Docker Compose

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

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

示例如下:


Docker Compose_第1张图片
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

你可能感兴趣的:(Docker Compose)