前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开发也需了解的运维知识之Docker Compose

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

作者头像
吴就业
发布2020-07-10 11:30:35
7090
发布2020-07-10 11:30:35
举报
文章被收录于专栏:Java艺术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配置文件内容如下:

代码语言:javascript
复制
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配置文件内容:

代码语言:javascript
复制
SPRING_PROFILES_ACTIVE=sit
SERVER_PORT=8080

docker-compose.yaml配置文件修改,添加环境变量配置:

代码语言:javascript
复制
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配置文件也需要修改下:

代码语言:javascript
复制
spring:
  profiles:
    active: ${SPRING_PROFILES_ACTIVE:dev}
server:
  port: ${SERVER_PORT:8080}

冒号(:)后面指定当环境变量没有配置时,使用的默认值,这用于本地开发调试,因为本地开发不使用docker运行,本例中默认使用dev环境为本地debug环境。

关于docker-compose的使用就介绍到这,因为其它的功能笔者暂时也都用不到,感兴趣的读者可自行深入去学习。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java艺术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档