docker stack的相关编排指令

一、简介

  Docker有个编排工具docker-compose,可以将组成某个应该的多个docker容器编排在一起,同时管理。同样在Swarm集群中,可以使用docker stack 将一组相关联的服务进行编排管理。

  Docker stack 也是一个yaml文件,和一份docker-compose.yml文件差不多,指令也基本一致。但是与compose相比其不支持build、links和network_mode。Docker stack有一个新的指令deploy。

  注:stack不支持的指令

  

 

二、Deploy

  Deploy是用来指定swarm服务部署和运行时的相关配置,并且只有使用docker stack deploy 部署swarm集群时才会生效。如果使用docker-compose up 或者docker-compose run时,该选项会被忽略。要使用deploy选项,compose-file中version版本要在3或3+。  

1

2

3

4

5

6

7

8

9

10

11

version: '3'

services:

  redis:

    image: redis:alpine

    deploy:

      replicas: 6

      update_config:

        parallelism: 2

        delay: 10s

      restart_policy:

        condition: on-failure

  (1)ENDPOINT_MODE

   指定swarm服务发现的模式

  • endpoint_mode: vip - Docker为swarm集群服务分配一个虚拟IP(VIP),作为客户端到达集群服务的“前端”。Docker 在客户端和可用工作节点之间对服务的请求进行路由。而客户端不用知道有多少节点参与服务或者是这些节点的IP/端口。(这是默认模式)
  • endpoint_mode: dnsrr - 
    DNS轮询(DNSRR)服务发现不使用单个虚拟IP。 Docker为服务设置DNS条目,使得服务名称的DNS查询返回一个IP地址列表,并且客户端直接连接到其中的一个。如果您想使用自己的负载平衡器,或者混合Windows和Linux应用程序,则DNS轮询功能非常有用。

  注:version 3.3+

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

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:

  (2)LABELS  

  指定服务的标签。这些标签仅在服务上设置,而不在服务的任何容器上设置  

1

2

3

4

5

6

7

version: "3"

services:

  web:

    image: web

    deploy:

      labels:

        com.example.description: "This label will appear on the web service"

  要改为在容器上设置标签,请在deploy之外使用标签键

1

2

3

4

5

6

version: "3"

services:

  web:

    image: web

    labels:

      com.example.description: "This label will appear on all containers for the web service"

  (3)MODE

  全局(每个群集节点只有一个容器)或副本(指定容器的数量)。默认值被副本。 

1

2

3

4

5

6

version: '3'

services:

  worker:

    image: dockersamples/examplevotingapp_worker

    deploy:

      mode: global

  (4)PLACEMENT

  指定约束和偏好设置 

1

2

3

4

5

6

7

8

9

10

11

version: '3'

services:

  db:

    image: postgres

    deploy:

      placement:

        constraints:

          - node.role == manager

          - engine.labels.operatingsystem == ubuntu 14.04

        preferences:

          - spread: node.labels.zone

  (5)REPLICAS

  如果服务是副本模式(默认模式),可以指定该服务运行的容器数量。 

1

2

3

4

5

6

7

8

9

10

version: '3'

services:

  worker:

    image: dockersamples/examplevotingapp_worker

    networks:

      - frontend

      - backend

    deploy:

      mode: replicated

      replicas: 6

  (6)RESOURCES

  资源限制配置 

1

2

注意:这会替换版本3之前的Compose文件(cpu_shares,cpu_quota,cpuset,mem_limit,memswap_limit,mem_swappiness)

中的非群集模式的旧资源约束选项,如升级2.x版至3.x中所述。  

  在下例中,redis服务限制使用不超过50M的内存和0.50(50%)的可用处理时间(CPU),并且拥有20M的内存和0.25个CPU时间(总是可用)。  

1

2

3

4

5

6

7

8

9

10

11

12

version: '3'

services:

  redis:

    image: redis:alpine

    deploy:

      resources:

        limits:

          cpus: '0.50'

          memory: 50M

        reservations:

          cpus: '0.25'

          memory: 20M

  (7)RESTART_POLICY

  配置在容器退出时是否并如何重启容器。取代restart指令。

  • condition :none、on-failure和any(默认any)
  • delay :在重启尝试之间等待多久(默认0)
  • max_attempts :尝试重启的次数(默认一直重启,直到成功)
  • window : 在确实一个重启是否成功前需要等待的窗口时间 

1

2

3

4

5

6

7

8

9

10

version: "3"

services:

  redis:

    image: redis:alpine

    deploy:

      restart_policy:

        condition: on-failure

        delay: 5s

        max_attempts: 3

        window: 120s

  (8)UPDATE_CONFIG

  配置服务如何升级

  • parallelism:同一时间升级的容器数量
  • delay:容器升级间隔时间
  • failure_action:升级失败后的动作(continue、rollback和pause。默认pause)。
  • monitor:更新完成后确实成功的时间(ns|us|ms|s|m|h)。(默认0s)
  • max_failure_ratio:更新期间允许的失败率
  • order: 更新期间的操作顺序。停止优先(旧任务在开始新任务之前停止)或者先启动(首先启动新任务,并且正在运行的任务短暂重叠)(默认停止优先)注意:只支持v3.4及更高版本。  

1

2

3

4

5

6

7

8

9

10

11

12

version: '3.4'

services:

  vote:

    image: dockersamples/examplevotingapp_vote:before

    depends_on:

      - redis

    deploy:

      replicas: 2

      update_config:

        parallelism: 2

        delay: 10s

        order: stop-first

  (9)depends_on

  表示服务之间的依赖关系  

1

2

3

4

5

6

7

8

9

10

11

version: '3'

services:

  web:

    build: .

    depends_on:

      - db

      - redis

  redis:

    image: redis

  db:

    image: postgres

  (10)dns  

  自定义DNS服务器。可以是单个值或列表。 

1

2

3

4

dns: 8.8.8.8

dns:

  - 8.8.8.8

  - 9.9.9.9

  (11)dns_search  

1

2

3

4

dns_search: example.com

dns_search:

  - dc1.example.com

  - dc2.example.com

  (12)environment  

  添加环境变量。您可以使用数组或字典。任何布尔值;真/假,是/否,需要用引号括起来以确保它们不被YML解析器转换为True或False。 

1

2

3

4

5

6

7

8

9

environment:

  RACK_ENV: development

  SHOW: 'true'

  SESSION_SECRET:

 

environment:

  - RACK_ENV=development

  - SHOW=true

  - SESSION_SECRET

  (13)expose

  开放容器的端口而不用在主机上暴露端口,它们只能被相关联的服务获取。只能指定内部端口。 

1

2

3

expose:

 - "3000"

 - "8000"

转载自: https://www.cnblogs.com/bigberg/p/8867326.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值