开发也需了解的运维知识之Docker Compose

关注“Java艺术”一起来充电吧!

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的使用就介绍到这,因为其它的功能笔者暂时也都用不到,感兴趣的读者可自行深入去学习。

公众号:Java艺术

扫码关注最新动态

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章