Docker|Docker Swarm 服务编排之命令详解

一、简介 Docker有个编排工具docker-compose,可以将组成某个应该的多个docker容器编排在一起,同时管理。同样在Swarm集群中,可以使用docker stack 将一组相关联的服务进行编排管理。
Docker stack 也是一个yaml文件,和一份docker-compose.yml文件差不多,指令也基本一致。但是与compose相比其不支持build、links和network_mode。Docker stack有一个新的指令deploy。
注:stack不支持的指令
Docker|Docker Swarm 服务编排之命令详解
文章图片

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

version: '3'services:redis:image: redis:alpinedeploy:replicas: 6update_config:parallelism: 2delay: 10srestart_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+
version: "3.3" services:wordpress:image: wordpressports:- 8080:80networks:- overlaydeploy:mode: replicatedreplicas: 2endpoint_mode: vip mysql:image: mysqlvolumes:- db-data:/var/lib/mysql/datanetworks:- overlaydeploy:mode: replicatedreplicas: 2endpoint_mode: dnsrr volumes:db-data: networks:overlay:

(2)LABELS
指定服务的标签。这些标签仅在服务上设置,而不在服务的任何容器上设置
version: "3"services:web:image: webdeploy:labels:com.example.description: "This label will appear on the web service"

要改为在容器上设置标签,请在deploy之外使用标签键
version: "3"services:web:image: weblabels:com.example.description: "This label will appear on all containers for the web service"

(3)MODE
全局(每个群集节点只有一个容器)或副本(指定容器的数量)。默认值被副本。
version: '3'services:worker:image: dockersamples/examplevotingapp_workerdeploy:mode: global

(4)PLACEMENT
指定约束和偏好设置
version: '3'services:db:image: postgresdeploy:placement:constraints:- node.role == manager- engine.labels.operatingsystem == ubuntu 14.04preferences:- spread: node.labels.zone

(5)REPLICAS
如果服务是副本模式(默认模式),可以指定该服务运行的容器数量。
version: '3'services:worker:image: dockersamples/examplevotingapp_workernetworks:- frontend- backenddeploy:mode: replicatedreplicas: 6

(6)RESOURCES
资源限制配置
version: '3'services:redis:image: redis:alpinedeploy:resources:limits:cpus: '0.50'memory: 50Mreservations:cpus: '0.25'memory: 20M

在下例中,redis服务限制使用不超过50M的内存和0.50(50%)的可用处理时间(CPU),并且拥有20M的内存和0.25个CPU时间(总是可用)。
(7)RESTART_POLICY
配置在容器退出时是否并如何重启容器。取代restart指令。
  • condition :none、on-failure和any(默认any)
  • delay :在重启尝试之间等待多久(默认0)
  • max_attempts :尝试重启的次数(默认一直重启,直到成功)
  • window : 在确实一个重启是否成功前需要等待的窗口时间 
version: "3"services:redis:image: redis:alpinedeploy:restart_policy:condition: on-failuredelay: 5smax_attempts: 3window: 120s

(8)UPDATE_CONFIG
配置服务如何升级
  • parallelism:同一时间升级的容器数量
  • delay:容器升级间隔时间
  • failure_action:升级失败后的动作(continue、rollback和pause。默认pause)。
  • monitor:更新完成后确实成功的时间(ns|us|ms|s|m|h)。
  • (默认0s)max_failure_ratio:更新期间允许的失败率o
  • rder:更新期间的操作顺序。停止优先(旧任务在开始新任务之前停止)或者先启动(首先启动新任务,并且正在运行的任务短暂重叠)(默认停止优先)注意:只支持v3.4及更高版本。
version: '3.4'services:vote:image: dockersamples/examplevotingapp_vote:beforedepends_on:- redisdeploy:replicas: 2update_config:parallelism: 2delay: 10sorder: stop-first

 (9)depends_on
表示服务之间的依赖关系
version: '3'services:web:build: .depends_on:- db- redisredis:image: redisdb:image: postgres

(10)dns
自定义DNS服务器。可以是单个值或列表。
dns: 8.8.8.8dns:- 8.8.8.8- 9.9.9.9

(11)dns_search
dns_search: example.comdns_search:- dc1.example.com- dc2.example.com

(12)environment
添加环境变量。您可以使用数组或字典。任何布尔值; 真/假,是/否,需要用引号括起来以确保它们不被YML解析器转换为True或False。
environment:RACK_ENV: developmentSHOW: 'true'SESSION_SECRET: environment:- RACK_ENV=development- SHOW=true- SESSION_SECRET

(13)expose
开放容器的端口而不用在主机上暴露端口,它们只能被相关联的服务获取。只能指定内部端口。 
expose: - "3000" - "8000"

【Docker|Docker Swarm 服务编排之命令详解】以上就是Docker Swarm 服务编排之命令的详细内容,更多关于Docker Swarm 服务编排的资料请关注脚本之家其它相关文章!

    推荐阅读