项目使用的 docker-compose.yml 文件介绍
version: '3.7' # 指定 compose 文件的版本
services: # 定义所有的 service 信息, services 下面的第一级别的 key 既是一个 service 的名称
aaa: #服务aaa
build: # 与image二选一,指定包含构建上下文的路径, 或作为一个对象,该对象具有 context 和指定的 dockerfile 文件以及 args 参数值
context: . # context: 指定 Dockerfile 文件所在的路径
dockerfile: Dockerfile # dockerfile: 指定 context 指定的目录下面的 Dockerfile 的名称(默认为 Dockerfile)
args: # args: Dockerfile 在 build 过程中需要的参数 (等同于 docker container build --build-arg 的作用)
JAR_FILE: service.jar
cache_from: # v3.2中新增的参数, 指定缓存的镜像列表 (等同于 docker container build --cache_from 的作用)
labels: # v3.3中新增的参数, 设置镜像的元数据 (等同于 docker container build --labels 的作用)
shm_size: # v3.5中新增的参数, 设置容器 /dev/shm 分区的大小 (等同于 docker container build --shm-size 的作用)
#ports:
# - "80:80"
# - "443:443"
ports: # 建立宿主机与容器间的端口映射关系,上面是短语法写法,下面是长语法写法
- target: 80 # 容器端口
published: 80 # 宿主机端口
protocol: tcp # 协议类型
mode: host # host在每个节点上发布主机端口,ingress 对于集群模式端口进行负载均衡
- target: 443
published: 443
protocol: tcp
mode: host
command: # 覆盖容器启动后默认执行的命令, 支持 shell 格式和 [] 格式
configs: # 不知道怎么用
cgroup_parent: # 为容器指定父 cgroup 组,意味着将继承该组的资源限制。
container_name: # 指定容器的名称 (等同于 docker run --name 的作用)
deploy: # v3 版本以上, 指定与部署和运行服务相关的配置, deploy 部分是 docker stack 使用的, docker stack 依赖 docker swarm
endpoint_mode: vip # v3.3 版本中新增的功能, 指定服务暴露的方式
# vip # Docker 为该服务分配了一个虚拟 IP(VIP), 作为客户端的访问服务的地址
# dnsrr # DNS轮询, Docker 为该服务设置 DNS 条目, 使得服务名称的 DNS 查询返回一个 IP 地址列表, 客户端直接访问其中的一个地址
labels: # 指定服务的标签,这些标签仅在服务上设置
mode: replicated # 指定 deploy 的模式
# global # 每个集群节点都只有一个容器
# replicated # 用户可以指定集群中容器的数量(默认)
placement:
constraints:
- node.role==manager # 不知道怎么用
replicas: 1 # deploy 的 mode 为 replicated 时, 指定容器副本的数量
resources: # 资源限制
limits: # 设置容器的资源限制
cpus: "0.5" # 设置该容器最多只能使用 50% 的 CPU
memory: 50M # 设置该容器最多只能使用 50M 的内存空间
reservations: # 设置为容器预留的系统资源(随时可用)
cpus: "0.2" # 为该容器保留 20% 的 CPU
memory: 20M # 为该容器保留 20M 的内存空间
restart_policy: # 定义容器重启策略, 用于代替 restart 参数
condition: on-failure # 定义容器重启策略(接受三个参数)
# none: # 不尝试重启
# on-failure: # 只有当容器内部应用程序出现问题才会重启
# any : # 无论如何都会尝试重启(默认)
delay: 10s # 尝试重启的间隔时间(默认为 0s)
max_attempts: 6 # 尝试重启次数(默认一直尝试重启)
window: 120s # 检查重启是否成功之前的等待时间(即如果容器启动了, 隔多少秒之后去检测容器是否正常, 默认 0s)
update_config: # 用于配置滚动更新配置
parallelism: 1 # 一次性更新的容器数量
delay: 10s # 更新一组容器之间的间隔时间
order: stop-first # v3.4 版本中新增的参数, 回滚期间的操作顺序
# stop-first #旧任务在启动新任务之前停止(默认)
# start-first #首先启动新任务, 并且正在运行的任务暂时重叠
failure_action: continue # 定义更新失败的策略
# continue # 继续更新
# rollback # 回滚更新
# pause # 暂停更新(默认)
# monitor # 每次更新后的持续时间以监视更新是否失败(单位: ns|us|ms|s|m|h) (默认为0)
max_failure_ratio: 0 # 回滚期间容忍的失败率(默认值为0)
rollback_config: # v3.7 版本中新增的参数, 用于定义在 update_config 更新失败的回滚策略
parallelism: 1 # 一次回滚的容器数, 如果设置为0, 则所有容器同时回滚
delay: 0 # 每个组回滚之间的时间间隔(默认为0)
failure_action: continue # 定义回滚失败的策略
# continue # 继续回滚
# pause # 暂停回滚
monitor: 10s # 每次回滚任务后的持续时间以监视失败(单位: ns|us|ms|s|m|h) (默认为0)
max_failure_ratio: 0 # 回滚期间容忍的失败率(默认值0)
order: stop-first # 回滚期间的操作顺序
# stop-first # 旧任务在启动新任务之前停止(默认)
# start-first # 首先启动新任务, 并且正在运行的任务暂时重叠
devices: # 指定设备映射列表 (等同于 docker run --device 的作用)
depends_on: #依赖容器
- db
- redis
dns: # 设置 DNS 地址(等同于 docker run --dns 的作用)
dns_search: # 设置 DNS 搜索域(等同于 docker run --dns-search 的作用)
tmpfs: # v2 版本以上, 挂载目录到容器中, 作为容器的临时文件系统(等同于 docker run --tmpfs 的作用, 在使用 swarm 部署时将忽略该选项)
entrypoint: # 覆盖容器的默认 entrypoint 指令 (等同于 docker run --entrypoint 的作用)
env_file: # 从指定文件中读取变量设置为容器中的环境变量, 可以是单个值或者一个文件列表, 如果多个文件中的变量重名则后面的变量覆盖前面的变量, environment 的值覆盖 env_file 的值
RACK_ENV=development
volumes: # 定义容器和宿主机的数据卷映射关系
- "/u01:/u01" # 映射容器内的 /u01 到宿主机的 /u01目录
environment: # 设置环境变量, environment 的值可以覆盖 env_file 的值 (等同于 docker run --env 的作用)
- TZ=Asia/Shanghai
- PORT_TO_EXPOSE=80
- LOG_PATH=/opt/proj/logs
- PROFILES_ACTIVE=prod
expose: # 暴露端口, 但是不能和宿主机建立映射关系, 类似于 Dockerfile 的 EXPOSE 指令
external_links: # 连接不在 docker-compose.yml 中定义的容器或者不在 compose 管理的容器(docker run 启动的容器, 在 v3 版本中使用 swarm 部署时将忽略该选项)
extra_hosts: # 添加 host 记录到容器中的 /etc/hosts 中 (等同于 docker run --add-host 的作用)
healthcheck: # v2.1 以上版本, 定义容器健康状态检查, 类似于 Dockerfile 的 HEALTHCHECK 指令
test: NONE # 检查容器检查状态的命令, 该选项必须是一个字符串或者列表, 第一项必须是 NONE, CMD 或 CMD-SHELL, 如果其是一个字符串则相当于 CMD-SHELL 加该字符串
# NONE # 禁用容器的健康状态检测
# CMD # test: ["CMD", "curl", "-f", "http://localhost"]
# CMD-SHELL # test: ["CMD-SHELL", "curl -f http://localhost || exit 1"] 或者 test: curl -f https://localhost || exit 1
interval: 1m30s # 每次检查之间的间隔时间
timeout: 10s # 运行命令的超时时间
retries: 3 # 重试次数
start_period: 40s # v3.4 以上新增的选项, 定义容器启动时间间隔
disable: true # true 或 false, 表示是否禁用健康状态检测和 test: NONE 相同
image: # 指定 docker 镜像, 可以是远程仓库镜像、本地镜像
init: # v3.7 中新增的参数, true 或 false 表示是否在容器中运行一个 init, 它接收信号并传递给进程
isolation: # 隔离容器技术, 在 Linux 中仅支持 default 值
labels: # 使用 Docker 标签将元数据添加到容器, 与 Dockerfile 中的 LABELS 类似
links: # 链接到其它服务中的容器, 该选项是 docker 历史遗留的选项, 目前已被用户自定义网络名称空间取代, 最终有可能被废弃 (在使用 swarm 部署时将忽略该选项)
logging: # 设置容器日志服务
driver: # 指定日志记录驱动程序, 默认 json-file (等同于 docker run --log-driver 的作用)
options: # 指定日志的相关参数 (等同于 docker run --log-opt 的作用)
max-size: # 设置单个日志文件的大小, 当到达这个值后会进行日志滚动操作
max-file: # 日志文件保留的数量
network_mode: # 指定网络模式 (等同于 docker run --net 的作用, 在使用 swarm 部署时将忽略该选项)
networks: # 将容器加入指定网络 (等同于 docker network connect 的作用), networks 可以位于 compose 文件顶级键和 services 键的二级键
aliases: # 同一网络上的容器可以使用服务名称或别名连接到其中一个服务的容器
ipv4_address # IP V4 格式
ipv6_address # IP V6 格式
例1
version: '3.9'
services:
pms-tsssd-service:
build:
context: .
args:
JAR_FILE: servsssisce.jar
dockerfile: Dockerfile
image: pms-td-ssssservice:1.0.0
restart: always
ports:
- "9199:80"
environment:
- TZ=Asia/Shanghai
- PORT_TO_EXPOSE=80
- LOG_PATH=/opt/proj/logs
- PROFILES_ACTIVE=test
volumes:
## - /opt/pro/pms-td-service.jar:/home/admin/service.jar
- /Users/yuan/Desktop/nc/pms-td-service.jar:/home/admin/service.jar
- /Users/yuan/Desktop/nc/logs:/opt/proj/logs
# - /opt/pe/data/logs:/opt/proj/logs
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role==manager
resources:
limits:
cpus: '2'
memory: 4096M
# reservations:
# cpus: '2'
# memory: 1024M
update_config:
parallelism: 1
delay: 10s
order: stop-first
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 6
window: 120s
# networks:
# host:
# external: true
# default:
# external:
# name: pldds_nctransfer
version: '3.7' # 版本必须3.0及以上,否则无法使用docker-stack 运行
services: # 定义 service 信息
emcs-nginx:
image: "***/nginx:test" # 使用指定的 docker 镜像
#ports:
# - "80:80"
# - "443:443"
ports: # 建立宿主机与容器间的端口映射关系,上面是短语法写法,下面是长语法写法
- target: 80 # 容器端口
published: 80 # 宿主机端口
protocol: tcp # 协议类型
mode: host # host在每个节点上发布主机端口,ingress 对于集群模式端口进行负载均衡
- target: 443
published: 443
protocol: tcp
mode: host
volumes: # 定义容器和宿主机的数据卷映射关系
- "/u01:/u01" # 映射容器内的 /u01 到宿主机的 /u01目录
environment: # 设置环境变量
TZ: Asia/Shanghai # 设置时区为上海
deploy: # 指定与部署和运行服务相关的配置, deploy部分是docker stack使用的, docker stack依赖docker swarm
mode: replicated # 指定模式:global每个集群节点都只有一个容器,
# replicated用户可以指定集群中容器的数量(默认)
replicas: 1 # deploy的mode为 replicated 时, 指定容器副本的数量
update_config: # 用于配置滚动更新的配置
parallelism: 1 # 一次性更新的容器数量
delay: 10s # 更新一组容器之间的间隔10s
order: stop-first # 指定回滚期间的操作顺序:stop-first旧任务在启动新任务之前停止(默认),
# start-first首先启动新任务, 并且正在运行的任务暂时重叠
restart_policy: # 定义容器重启策略, 用于代替 restart 参数
condition: on-failure # 定义容器重启策略(接受三个参数):
# none不尝试重启;any无论如何都会尝试重启(默认)
# on-failure只有当容器内部应用程序出现问题才会重启
emcs-front: # 第二个服务
image: "***/front"
volumes:
- "/u01/log:/u01/log"
environment:
TZ: Asia/Shanghai
deploy:
mode: replicated
replicas: 1
update_config:
parallelism: 1
delay: 20s
order: stop-first
restart_policy:
condition: on-failure
网友评论