ComposeDocker用于定义和运行多容器应用程序的工具。有了Kubernetes之后,我们不需要过多的学习Docker Compose,但也有必须了解下它。如应用在微服务项目中,我们可以通过Docker Compose快速地将整个微服务项目打包生成的一个个jar构建成Docker容器镜像文件,并替换应用程序所需要的环境变量。


举个例子,假设我们整个微服务项目的代码都放在一个idea project下,服务按module划分,当我们在项目的根目录下执行mvn clean package命令之后,可以立即执行docker-compose build命令将每个模块下的jar包构建为镜像,前提是我们先写好Dockerfiledocker-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-srvdemo-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 bootapplication.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