Docker Compose

  • Docker Compose 是一个工具;
  • 这个工具可以通过一个yaml文件定义多容器的docker应用;
  • 通过一条命令就可以根据yaml文件的定义去创建或者管理这多个容器。

注意:version 2只支持单机部署,version 3支持集群部署。

示例如下:


image.png

根据docker-compose.yml文件创建多个容器:
命令:docker-compose up

默认使用当前目录下的docker-compose.yml文件

depends_on

表达services之间的依赖关系,service依赖关系导致以下行为:

  • docker-compose up 以依赖性顺序启动服务。在以下示例中,dbredis会在web之前启动。
  • docker-up up SERVICE自动包含SERVICE的依赖关系。 在下面的例子中,docker-compose up web也会创建并启动dbredis

示例:

version: '3'
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

--scale 扩缩容

web服务扩容:

[root@docker ha-flask]# docker-compose up -d --scale web=6
Starting haflask_web_1 ... 
Starting haflask_web_1 ... done
Starting haflask_web_2 ... done
Starting haflask_web_3 ... done
Creating haflask_web_4 ... done
Creating haflask_web_5 ... done
Creating haflask_web_6 ... done

-d后台运行。如果不加-d,默认是在前台运行,ctrl+c后会使在运行的容器停止。

web缩容:

[root@docker ha-flask]# docker-compose up -d --scale web=4
Stopping and removing haflask_web_5 ... 
Stopping and removing haflask_web_5 ... done
Stopping and removing haflask_web_6 ... done
Starting haflask_web_1 ... done
Starting haflask_web_2 ... done
Starting haflask_web_3 ... done
Starting haflask_web_4 ... done
haflask_lb_1 is up-to-date

docker swarm模式下的docker-compose

Docker-compose Version 3

version 3升级的地方:

  • 移除:volume_drivervolumes_fromcpu_shares
    cpu_quotacpusetmem_limitmemswap_limitextendsgroup_add.
  • 添加:deploy

deploy命令下面的子命令:

endpoint_mode

支持的版本:3.3
endpoint_mode: vip - Docker为该service分配一个虚拟ip,即vip。 service之间通过vip进行通信。底层通过LVS轮询,将请求分发至service下的container。这个值是默认的。
endpoint_mode: dnsrr - DNS轮询机制服务发现不使用单个虚拟IP。Docker为服务设置DNS条目,使得服务名称的DNS查询返回一个IP地址列表,并且客户端直接连接到其中的一个。 如果您想使用自己的负载平衡器,或者混合Windows和Linux应用程序,则DNS轮询功能非常有用。

示例:

version: "3.3"

services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    networks:
      - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: vip

  mysql:
    image: mysql
    volumes:
       - db-data:/var/lib/mysql/data
    networks:
       - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: dnsrr

volumes:
  db-data:

networks:
  overlay:

labels

labels 指定service的标签,其实就是对service的描述信息。这个标签仅在设置在service上,而不在service下的任何container设置。labels的值是key: value的形式。

示例:

version: "3" 
services:
  web:
    image: web
    deploy:
      labels:
        com.cgy.desc: "This label will appear on the web service"

mode

mode的值可以是global(每个群集节点只有一个容器,不能通过scale作横向扩展。)或replicated(指定数量的容器,可以通过scale扩展container数量)。 默认值是replicated

示例:

version: '3'
services:
  db:
    image: mysql:5.6
    deploy:
      mode: global

placement

placement设置service的限制条件(constraints)和偏好(preferences)设置。

官方文档参考:https://docs.docker.com/compose/compose-file/#placement

示例:

version: '3'
services:
  db:
    image: mysql:5.6
    deploy:
      mode: global
      placement:
        constraints:    # 限制条件
          - node.role == manager     # 限制db这个service部署至swarm的manager节点
          - engine.labels.operatingsystem == ubuntu 14.04
        preferences:    # 优先配置
          - spread: node.labels.zone

replicas

当模式为replicated(即mode: replicated)时,在初始化时,我们就可以通过relicas指定当前的service需要几个容器。

示例:

version: '3'
services:
  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 6      # 初始化时,在名为worker的service下创建6个container 

resources

资源控制

示例:

version: '3'
services:
  redis:
    image: redis:alpine
    deploy:
      resources:
        limits:              # 资源限制
          cpus: '0.50'
          memory: 50M
        reservations:        # 资源保留
          cpus: '0.25'
          memory: 20M

limits就是限制当前service能够使用的硬件资源;
reservations就是为当前service保留的硬件资源;

restart_policy

重启策略

  • condition:重启的条件,取值none(无),on-failure(失败时),any(默认值是:any)。
  • delay:延迟时间。在尝试重启之间等待多长时间,默认值为0。
  • max_attempts:尝试重新启动容器的次数。
  • window:在决定重新启动是否成功之前等待多久。(默认值:decide immediately,表示立即决定)。

示例:

version: "3"
services:
  redis:
    image: redis:alpine
    deploy:
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s

update_config

service更新时要遵循的配置

  • parallelism:同时更新的容器数量;
  • delay:更新一组容器之间的等待时间;
  • failure_action:更新失败时要执行的动作。continue(继续)、rollback(回滚)、pause(暂停)。(默认:pause)。
  • monitor:每次任务更新后监控失败的时间(单位:ns|us|ms|s|m|h),(默认为0s)。
  • max_failure_ratio:在更新期间容忍的失败率。
  • order:更新期间的操作顺序。stop-first(旧任务在开始新任务之前停止)或者start-first(首先启动新任务,并且正在运行的任务短暂重叠)。(默认:stop-first)。注意:只支持v3.4及更高版本。

示例:

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

推荐阅读更多精彩内容