美文网首页
Docker Compose

Docker Compose

作者: CaiGuangyin | 来源:发表于2019-04-18 18:44 被阅读0次
    • 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
    

    相关文章

      网友评论

          本文标题:Docker Compose

          本文链接:https://www.haomeiwen.com/subject/yptxgqtx.html