date: 2020-04-02title: docker-compose.yml文件实例 #标题
tags: docker-compose #标签
categories: docker # 分类
本博文用于记录下docker-compose.yml文件的规范格式,同样适用于docker stack指令运行。
部署tomcat容器
[root@nginx ~]# cat docker-compose.yml # tomcat的部署文件
version: "3.3" # 指定版本
networks: # 创建网络
swarm-net: # 网络名称为swarm-net
external: true # 表示该网络已经存在,无需创建(如果网络已存在,而不增加此选项,可能会报错)
services: # 定义服务
acenter: # 服务名称为acenter
image: hub.dayu-boss.com/core/tomcat # 指定镜像
networks: # 指定使用swarm-net网络
- swarm-net
hostname: acenter # 指定容器内的主机名为acenter
environment: # 定义变量列表
- idc=A
- JAVA_OPT=-Xms1000m -Xmx1000m -Xmn800m
healthcheck: # 定义健康检测
disable: true # disable的值为true,则表示禁用健康检测
deploy: # 定义部署相关参数
replicas: 1 # 指定副本数量
placement: # 限制容器运行在哪个节点
constraints: [node.labels.line == 1] #
restart_policy: # 配置如何在退出容器时重新启动容器
condition: on-failure # 可选none,on-failure或any(默认值:any)
delay: 5s # 设置多久后重启(默认值: 0)
max_attempts: 3 # 尝试重新启动容器的次数,超出次数,则不再尝试(默认值:一直重试)
window: 120s # 设置容器重启超时时间(默认值: 0)
volumes: # 将主机的文件挂载到容器里
- /var/gb/data/pg/pg_boss/backup:/var/data/backup # 冒号前面是主机上的文件,冒号后面是容器内的文件路径
- /var/gb/apps/acenter:/usr/local/tomcat/webapps/acenter # 同上
- /var/gb/logs/acenter:/usr/local/tomcat/logs/ # 同上
############### 定义第二个service ##################
boss: # service名称为boss
image: hub.dayu-boss.com/core/tomcat # 指定镜像
networks: # 指定网络为swarm-net
- swarm-net
hostname: boss # 指定容器中的主机名
environment: # 配置环境变量
- idc=A
- JAVA_OPT=-Xms2500m -Xmx2500m -Xmn1500m
healthcheck: # 关闭健康检测
disable: true
deploy: # 定义部署相关信息
replicas: 1 # 容器副本数量为1个
placement: # 限制容器运行在哪个节点
constraints: [node.labels.line == 1]
restart_policy: # 制定重启策略,参考上面第一个service的注释
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
volumes: # 同第一个service的注释
- /var/gb/data/pg/pg_boss/backup:/var/data/backup
- /var/gb/apps/boss:/usr/local/tomcat/webapps/boss
- /var/gb/logs/boss:/usr/local/tomcat/logs/
################### 定义第三个service ##################
boss-api: # service名称为boss-api
image: hub.dayu-boss.com/core/tomcat-php # 指定镜像
networks: # 指定网络为swarm-net
- swarm-net
hostname: boss-api # 配置容器中的主机名
healthcheck: # 关闭健康检测
disable: true
extra_hosts: # 添加主机名映射。类似 docker client --add-host。
- "pg_11-dd1:182.16.68.126"
- "pg_12-dd2:182.16.66.166"
- "pg_13-dd3:182.16.62.44"
- "pg_11-dd4:182.16.60.232"
- "pg_12-dd4:182.16.60.232"
- "pg_13-dd4:182.16.60.232"
- "pg-01.d1:10.10.6.1"
- "pg-02.d2:10.10.6.2"
- "pg-03.d3:10.10.6.3"
- "pg-01.d4:10.10.6.4"
- "pg-02.d4:10.10.6.4"
- "pg-03.d4:10.10.6.4"
- "pg-05.d5:10.10.6.5"
- "pg-06.d6:10.10.6.6"
- "pg-mx.d7:10.10.6.7"
- "pg-pb.d7:10.10.6.7"
- "pg-05.d8:10.10.6.8"
- "pg-06.d8:10.10.6.8"
- "pg-mx.d8:10.10.6.8"
- "pg-11.d5:10.10"
# 以上会在此服务内部容器中/etc/hosts创建一个具有IP地址和主机名的映射关系,如下:
# 182.16.68.126 pg_11-dd1
# 182.16.66.166 pg_12-dd2
# ....... 省略部分内容
部署nginx容器
大多数参数在上面都写下来了,这里就省略了。
[root@nginx ~]# cat docker-compose.yml
version: "3.3"
networks:
swarm-net:
external: true
services:
core-ngx:
image: hub.dayu-boss.com/core/openresty:gb
hostname: core-ngx
networks:
swarm-net:
aliases: # 同一网络上的其他容器可以使用服务名称或此别名来连接到对应容器的服务。
- proxy-server
- gb-rcenter
- gb-mdcenter
- gb-fserver
- 3rd.game.api.com
- 3rd.pay.api.com
environment: # 添加环境变量
- nginx_line=line1-
ports: # 暴露端口信息
- target: 80 # 暴露的是容器内80端口
published: 13380 # 对应的主机端口是13380
protocol: tcp # 协议为tcp
mode: host # 为主机模式
deploy:
replicas: 1
placement:
constraints: [node.labels.ngx == 1]
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
healthcheck:
disable: true
volumes:
- /var/gb/conf/core-ngx-a:/usr/local/openresty/nginx/conf
- /var/gb/logs/core-ngx-a:/data/nginx/logs