区别和联系

docker-compose V3之后,设置资源限额和容器数量的配置,只能写在deploy字段里, 但是docker-compose up 却不支持 deploy 配置
编辑同一份docker-compose.yml, 但是compose 和 swarm/stack的分工是这样的:

docker-compose 用于dev 支持build/restart 但是不支持deploy,
swarm/stack 用于 prod 支持 deply的各种设置,包括分配cpu和内存, 但是创建容器只支持从image,不支持build.

deploy扩缩容参数

deploy是用于在docker集群环境下自动进行扩容和缩容的配置项,docker-compose up and docker-compose run两个命令会忽略此配置,只有docker stack deploy命令下才有用
有以下子选项

  1. endpoint_mode:集群对提供服务的方式
    • endpoint_mode: vip VIP方式
    • endpoint_mode: dnsrr dns轮询方式
  2. labels:元数据(标签)
  3. mode:设置容器模式(默认replicated)
    • mode: global 全局模式,只能有一个容器
    • mode: replicated 复制模式,可以指定数量
  4. placement:定约束和首选项的配置
  5. replicas:指定容器可运行的数量,需要(mode: replicated)
  6. resources:资源约束,可约束cpu和内存,设置分配量和预留量
    • limits:
      • cpus: ‘0.50’
      • memory: 50M
    • reservations:
      • cpus: ‘0.25’
      • memory: 20M
  7. restart_policy:重启策略
    • condition:重启的条件(default: any)
      • none 没有条件(不重启)
      • on-failure 故障情况下才重启
      • any 任何情况下都重启
    • delay: 两次重启中的时间间隔(default: 0).
    • max_attempts: 尝试重启的次数(默认不限制)
    • window: 重启之前的等待时间(默认不等待)
  8. rollback_config:回滚配置
    • parallelism: 一次回滚的容器数量,为0则1次回滚完
    • delay: 两次回滚间隔(default 0s).
    • failure_action: 回滚失败后的操作,继续或暂停(default pause)
    • monitor: 任务更新后的持续监测时间(ns|us|ms|s|m|h) (default 0s).
    • max_failure_ratio: 回滚期间的容错率(default 0).
    • order: 任务执行顺序(default stop-first).
      • stop-first 旧任务在开始新任务之前停止
      • start-first 新任务首先启动,正在运行的任务暂停
  9. update_config:更新配置
    • parallelism: 一次要更新的容器数量
    • delay: 两次更新的时间间隔
    • failure_action: 更新失败后的操作,继续或暂停(default pause)
    • monitor: 任务更新后的持续监测时间(ns|us|ms|s|m|h) (default 0s).
    • max_failure_ratio: 更新期间的容错率(default 0).
    • order: 任务执行顺序(default stop-first).
      • stop-first 旧任务在开始新任务之前停止
      • start-first 新任务首先启动,正在运行的任务暂停

配置举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: "3.7"
services:
redis:
image: redis:alpine
deploy:
mode: global
replicas: 6
endpoint_mode: dnsrr
restart_policy:
condition: on-failure
labels:
com.example.description: "xxxx"
resources:
limits:
cpus: '0.50'
memory: 50M
update_config:
parallelism: 2
delay: 10s