docker-compose实践(携程apollo项目)

docker-compose使用开源镜像启动容器

以携程apollo项目为例,使用docker-compose部署单节点模式

创建apollo文件夹,vim一个新的docker-compose.yaml文件,文件内容如下:

version: '3'
services:
  apollo-configservice:
    image: apolloconfig/apollo-configservice:latest # 镜像地址,这里使用的是直接在当前主机上构建的镜像
    container_name: apollo-configservice
    ports:
      - "8080:8080"
    volumes:
      # 日志挂载
      - /usr/local/apollo/servers/server2/logs/apollo-configservice:/opt/logs
    environment:
      # 可通过 SERVER_PORT 指定默认启动端口,ports 也需要对应修改
      # SERVER_PORT: 8080
      # 指定 homePageUrl 为当前宿主的 apollo-configservice 地址,不然会出现无法访问
      JAVA_OPTS: "-Deureka.instance.homePageUrl=http://192.168.10.1:8080"
      # 数据库连接地址
      SPRING_DATASOURCE_URL: 'jdbc:mysql://192.168.10.1:13306/ApolloConfigDB?characterEncoding=utf8'
      SPRING_DATASOURCE_USERNAME: 'XXX'
      SPRING_DATASOURCE_PASSWORD: '123456'
    depends_on:
      - apollo-db

  apollo-adminservice:
    image: apolloconfig/apollo-adminservice:latest # 镜像地址,这里使用的是直接在当前主机上构建的镜像
    container_name: apollo-adminservice
    ports:
      - "8090:8090"
    volumes:
      # 日志挂载
      - /usr/local/apollo/servers/server2/logs/apollo-adminservice:/opt/logs
    environment:
      # 指定 homePageUrl 为当前宿主的 apollo-adminservice 地址,不然会出现无法访问
      JAVA_OPTS: "-Deureka.instance.homePageUrl=http://192.168.10.1:8090"
      # 数据库连接地址
      SPRING_DATASOURCE_URL: 'jdbc:mysql://192.168.10.1:13306/ApolloConfigDB?characterEncoding=utf8'
      SPRING_DATASOURCE_USERNAME: 'root'
      SPRING_DATASOURCE_PASSWORD: '123456'
    depends_on:
      - apollo-configservice

  apollo-db:
    image: mysql:5.7
    container_name: apollo-db
    command: --default-authentication-plugin=mysql_native_password
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    depends_on:
      - apollo-dbdata
    ports:
      - "13306:3306"
    volumes:
      - ./sql:/docker-entrypoint-initdb.d
    volumes_from:
      - apollo-dbdata

  apollo-dbdata:
    image: alpine:latest
    container_name: apollo-dbdata
    volumes:
      - /var/lib/mysql


  apollo-portal:
    image: apolloconfig/apollo-portal:1.7.0 # 镜像地址,这里使用的是直接在当前主机上构建的镜像
    container_name: apollo-portal
    ports:
      - "8070:8070"
    volumes:
      # 日志挂载
      - /usr/local/apollo/servers/server1/logs/apollo-portal:/opt/logs
    environment:
      # 数据库连接地址
      DS_URL: "jdbc:mysql://192.168.10.1:13306/ApolloPortalDB?characterEncoding=utf8"
      # 数据库用户名
      DS_USERNAME: "root"
      # 数据库密码      
      DS_PASSWORD: "123456"
      # META_SERVER 地址
      # PRO_META: "http://192.168.10.1:8080"
      #自定义相对路径
      SERVER_SERVLET_CONTEXT_PATH: "/apollo"
    depends_on:
      - apollo-adminservice

 

进入apollo文件夹后,使用以下命令进行容器操作控制

docker-compose  up (启动yml定义的所有服务,-d 后台启动)

 

docker-compose  ps (查看已经启动的服务状态)

docker-compose  kill (停止某个服务)

docker-compose  logs (可以查看某个服务的log)

docker-compose  port (打印绑定的public port)

docker-compose  pull (pull服务镜像)

docker-compose  stop (停止yml中定义的所有服务)

docker-compose  start (启动被停止的yml中的所有服务)

docker-compose  kill (强行停止yml中定义的所有服务)

docker-compose  rm (删除yml中定义的所有服务)

docker-compose  restart (重启yml中定义的所有服务)

 

apollo的三个服务是有先后依赖关系的,所以使用depends_on 对容器启动顺序进行编排

如需分布式部署,可将上述docker-compose进行拆分,在不同机器上部署admin、config的环境

将portal的XXXX_META设置或者在数据库更改(具体分布式部署配置请参考Apollo官方说明)

 

docker-compose使用dockerfile构建镜像,并启动容器

以上服务镜像都是开源镜像,所有没有使用DockerFile,如果项目中需要使用DockerFile构建自定义镜像,可以在docker-compose.yaml文件中 使用build关键字来来构建,如下:

 

version: '3.0'
services:
    test_container:
      build:
       context: ../
       dockerfile: DockerfileDev
      ports:
       - 81:80
      restart: unless-stopped
      container_name: test_container
      image: test_container
  • build中context指定设定上下文根目录,然后以该目录为准指定Dockerfile
  • dockerfile指定 Dockerfile 文件名
  • ports用于映射端口的标签。
  • 如果前面有了build那image则用来指定镜像名称,如果没有image则用来构建镜像
  • restart重启策略

dockerFile文件相关知识点见下述链接

1. Docker入门基础(一)

2. Docker 实战(二)——centos7镜像安装nginx,将安装nginx的centos容器生成新的镜像,并导出

3. Docker实战(三)--Dockerfile构建带nginx的centos镜像,并挂载

 

posted @ 2021-06-05 20:18  Shadow.Yin  Views(773)  Comments(0Edit  收藏  举报