Compose
是Docker
用于定义和运行多容器应用程序的工具。有了Kubernetes
之后,我们不需要过多的学习Docker Compose
,但也有必须了解下它。如应用在微服务项目中,我们可以通过Docker Compose
快速地将整个微服务项目打包生成的一个个jar
构建成Docker
容器镜像文件,并替换应用程序所需要的环境变量。
举个例子,假设我们整个微服务项目的代码都放在一个idea project
下,服务按module
划分,当我们在项目的根目录下执行mvn clean package
命令之后,可以立即执行docker-compose build
命令将每个模块下的jar
包构建为镜像,前提是我们先写好Dockerfile
与docker-compose.yaml
配置文件。
Dockerfile
文件的编写省略。Dockerfile
文件中的每一行命令都是一层镜像,镜像分层的好处是不需要每次都拉取一个大的镜像。虽然编写在Dockerfile
文件中的每一行命令都是一层镜像,但是不能实现共用,我们应该将通用配置构建成一个基础镜像,如jdk
镜像,如果需要nginx
,再在jdk
镜像的基础上构建nginx
基础镜像。
docker-compose.yaml
配置文件内容如下:
version: '3.7'
services:
demo-srv:
build: ./demo-srv
image: wujiuye/demo-srv
demo-client:
build: ./demo-client
image: wujiuye/demo-client
services
配置需要构建的镜像,为每个需要部署的微服务配置一个service
,如本例中的demo-srv
与demo-client
两个微服务。build
项指定Dockerfile
所在的路径,这里使用相对路径。image
项配置构建后的镜像名称。
将编写好的docker-compose.yaml
文件也放于项目根目录下,这不是必须的,只是为了方便。对应的每个模块(微服务)的Dockerfile
也应该放在每个模块的根目录下。现在执行docker-compose
就能构建出所有镜像了。(这里我们不指定镜像的版本,总是使用lastest
)
如果我们想通过构建容器镜像时替换spring boot
应用程序的yml
配置文件中的配置项,如指定spring boot
使用哪个环境的配置文件、指定内置tomcat
使用的端口号等,那么我们可以在docker-compose
中使用environment
项配置,同时在docker-compose.yaml
文件相同目录下创建一个.env
文件,配置环境变量对应的值。
.env
配置文件内容:
SPRING_PROFILES_ACTIVE=sit
SERVER_PORT=8080
docker-compose.yaml
配置文件修改,添加环境变量配置:
version: '3.7'
services:
demo-srv:
build: ./demo-srv
image: wujiuye/demo-srv
environment:
- SPRING_PROFILES_ACTIVE
- SERVER_PORT
demo-client:
build: ./demo-client
image: wujiuye/demo-client
environment:
- SPRING_PROFILES_ACTIVE
- SERVER_PORT
spring boot
的application.yml
配置文件也需要修改下:
spring:
profiles:
active: ${SPRING_PROFILES_ACTIVE:dev}
server:
port: ${SERVER_PORT:8080}
冒号(:
)后面指定当环境变量没有配置时,使用的默认值,这用于本地开发调试,因为本地开发不使用docker
运行,本例中默认使用dev
环境为本地debug
环境。
关于docker-compose
的使用就介绍到这,因为其它的功能笔者暂时也都用不到,感兴趣的读者可自行深入去学习。
https://mp.weixin.qq.com/s/KoxzQtVU3UwpW3gxmM4PhA