Docker Compose 配置文件详解(V3)

随着 Docker v1.13 版本发布,Compose 的配置文件也发生了改动,官方命名为 v3,今天来看一下相比 v2 的写法,v3有哪些异同。

因为是 YAML 语法,所以无论是 .yml 还是 .yaml 作为后缀名,Compose 都可以识别。

1. build

与上一个版本没有变化,依旧是熟悉的格式:

build:
  context: ./dir
  dockerfile: Dockerfile-alternate
  args:
    buildno: 1

2. cap_add, cap_drop

这部分用于调整容器操作内核权限、能力。这部分有一点点变化,就是在 Swarm 模式中,Compose 会忽略这部分参数的值。

cap_add:
  - ALL

cap_drop:
  - NET_ADMIN
  - SYS_ADMIN

大概是出于提高集群安全性的考虑?没怎么用过这个部分的参数。

3. command

没有变化

command: bundle exec thin -p 3000

4. cgroup_parent

与上面第二条一样,在 Swarm 模式中忽略这部分的值。格式没变化:

cgroup_parent: m-executor-abcd

5. container_name

没变化。

6. deploy

这个来了,deploy 加入了正式版,这是 V3 才能使用的语法。
首先这是一个服务于 Swarm 的语法,也就是当用户使用例如:

docker-compose up
docker-compose run

这种方式启动时,Compose 会忽略 deploy 部分的内容。

语法规则:

deploy:
  replicas: 6
  update_config:
    parallelism: 2
    delay: 10s
  restart_policy:
    condition: on-failure

6.1 mode

首先 deploy 提供了一个模式选项,它的值有 global 和 replicated 两个,默认是 replicated 模式。

这两个模式的区别是:

  • global:每个集群每个服务实例启动一个容器,就像以前启动 Service 时一样。
  • replicated:用户可以指定集群中实例的副本数量。

以前这个功能是无法在 Compose 中直接实现的,以前需要用户先使用 docker-compose bundle 命令将 docker-compose.yml 转换为 .dab 文件,然后才能拿到集群部署,而且很多功能用不了。

但是随着这次更新把 stack 加进来了,deploy 也就水到渠成加进了 Compose 功能中。

6.2 replicas

上面说到可以指定副本数量,其中 replicas 就是用于指定副本数量的选项。

deploy:
  replicas: 6

部署服务栈:

docker stack deploy --compose-file docker-compose.yml

6.3 placement

这是 Docker 1.12 版本时就引入的概念,允许用户限制服务容器,具体有什么用我也不知道,笑。

网上能找的资料好少,官方文档只有两句废话,如果我能找到原来的 issue 或者 PR 或许可以理解一些。

6.4 update_config

早在上一个版本中,Swarm 就提供了一个升级回滚的功能。当服务升级出现故障时,超过重试次数则停止升级的功能,这也很方便,避免让错误的应用替代现有正常服务。

这个选项用于告诉 Compose 使用怎样的方式升级,以及升级失败后怎样回滚原来的服务。

  • parallelism: 服务中多个容器同时更新。
  • delay: 设置每组容器更新之间的延迟时间。
  • failure_action: 设置更新失败时的动作,可选值有 continue 与 pause (默认是:pause)。
  • monitor: 每次任务更新失败后监视故障的持续时间 (ns|us|ms|s|m|h) (默认:0s)。
  • max_failure_ratio: 更新期间容忍的故障率。

6.5 resources

看例子:

resources:
  limits:
    cpus: '0.001'
    memory: 50M
  reservations:
    cpus: '0.0001'
    memory: 20M

知道干啥用了吧,这是一个新的语法选项,替代了之前的类似 cpu_shares, cpu_quota, cpuset, mem_limit, memswap_limit 这种选项。统一起来好看点。

6.6 restart_policy

设置如何重启容器,毕竟有时候容器会意外退出。

  • condition:设置重启策略的条件,可选值有 none, on-failure 和 any (默认:any)。
  • delay:在重新启动尝试之间等待多长时间,指定为持续时间(默认值:0)。
  • max_attempts:设置最大的重启尝试次数,默认是永不放弃,哈哈,感受到一股运维的绝望。
  • window:在决定重新启动是否成功之前要等待多长时间,默认是立刻判断,有些容器启动时间比较长,指定一个“窗口期”非常重要。

7. labels

没有变化。

8. devices

基本没变化,Swarm 模式会无视这部分设置。

9. depends_on

和以前一样。

10. dns 和 dns_search

Swarm 模式无视设置,其他一样。

11. tmpfs

没有变化。Swarm 模式无视设置。

12. entrypoint

没有变化。

13. env_file

变量出奇多时可以用这个办法管理变量。没有变化。

14. environment

没有变化。

15. expose

没有变化。

16. external_links

没有变化,但是不建议使用,因为这是一个遗留的选项,现在你可以在 Compose 中使用 networks 代替,效果是一样的,但是后者更加容易管理与理解。

17. extra_hosts

没有变化。

18. group_add 和 healthcheck、image、isolation、links、logging、network_mode、networks、aliases、ipv4_address, ipv6_address、link_local_ips、pid、ports、security_opt、stop_grace_period、stop_signal、sysctls、ulimits、userns_mode、domainname, hostname, ipc, mac_address, privileged, read_only, restart, shm_size, stdin_open, tty, user, working_dir

以上都没有变化,需要提一下的是 links、network_mode、security_opt、stop_signal、sysctls、userns_mode 会在 Swarm 模式中无视。
isolation 提供了三种容器隔离方式:default,process 和 hyperv。

19. secret 管理

新事物,这部分放到以后的文章中。

20. volumes_from

这个去掉了,嗯。需要共享数据用命名卷,例如:

version: "3"

services:
  db:
    image: db
    volumes:
      - data-volume:/var/lib/db
  backup:
    image: backup-service
    volumes:
      - data-volume:/var/lib/backup/data

volumes:
  data-volume:

去除 volume_driver,这种服务全局的东西没有必要,直接针对每个卷使用 volume 键下的 driver 即可。

最后一个官方例子结束本文:

version: "3"
services:

  redis:
    image: redis:alpine
    ports:
      - "6379"
    networks:
      - frontend
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend
    deploy:
      placement:
        constraints: [node.role == manager]
  vote:
    image: dockersamples/examplevotingapp_vote:before
    ports:
      - 5000:80
    networks:
      - frontend
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
      restart_policy:
        condition: on-failure
  result:
    image: dockersamples/examplevotingapp_result:before
    ports:
      - 5001:80
    networks:
      - backend
    depends_on:
      - db
    deploy:
      replicas: 1
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 1
      labels: [APP=VOTING]
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s
      placement:
        constraints: [node.role == manager]

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]

networks:
  frontend:
  backend:

volumes:
  db-data:
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • 以下原文转载于(https://docs.docker.com/docker-for-mac/)(想找中文版的最新...
    Veekend阅读 7,495评论 0 17
  • Docker从2013年发布第一个版本以来,已经火遍全球,技术迭代也比较频繁,其周边产品和技术也越来越丰富。Doc...
    归海听雪阅读 12,128评论 7 44
  • 我带着那颗纯真的心向你走去 温火 热焰 及寒冰 我笑那水中的倒影没出息 水一晃她便面目全非 水一止则令人心动 那饱...
    小辣椒0阅读 230评论 0 7
  • Zuul是什么? Zuul相当于是第三方调用(app应用端和PC端)和服务提供方之间的防护门。作为前端服务(Edg...
    黑山老妖拉肚子阅读 4,342评论 0 0
  • 孩子考完试放假了,本来想着放假可以晚点起床做早餐,结果还是五点醒啦!只好起来准备早餐,想着还可以去市场买点新鲜的食...
    黄泳仪阅读 192评论 0 2