DockerSwarm服务编排之命令详解
⼀、简介
Docker有个编排⼯具docker-compose,可以将组成某个应该的多个docker容器编排在⼀起,同时管理。同样在Swarm集中,可以使⽤docker stack 将⼀组相关联的服务进⾏编排管理。
Docker stack 也是⼀个yaml⽂件,和⼀份l⽂件差不多,指令也基本⼀致。但是与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+。
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+
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
指定服务的标签。这些标签仅在服务上设置,⽽不在服务的任何容器上设置 version: "3"
services:
web:
image: web
deploy:
labels:
要改为在容器上设置标签,请在deploy之外使⽤标签键
version: "3"
services:
web:
image: web
labels:
(3)MODE
全局(每个集节点只有⼀个容器)或副本(指定容器的数量)。默认值被副本。 version: '3'
services:
worker:
image: dockersamples/examplevotingapp_worker
deploy:
mode: global
(4)PLACEMENT
指定约束和偏好设置
version: '3'
services:
db:
image: postgres
deploy:
placement:
constraints:
- le == manager
- engine.labels.operatingsystem == ubuntu 14.04
preferences:
- spread:
(5)REPLICAS
如果服务是副本模式(默认模式),可以指定该服务运⾏的容器数量。
version: '3'
services:
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 6
(6)RESOURCES
资源限制配置
version: '3'
services:
redis:
image: redis:alpine
deploy:
resources:
limits:
cpus: '0.50'
memory: 50M
reservations:
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: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:更新期间允许的失败率o
rder:更新期间的操作顺序。停⽌优先(旧任务在开始新任务之前停⽌)或者先启动(⾸先启动新任务,并且正在运⾏的任务短暂重叠)(默认停⽌优先)注意:只⽀持v3.4及更⾼版本。
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
表⽰服务之间的依赖关系
version: '3'
services:
web:
build: .
depends_on:
-
db
- redis
redis:
image: redis
db:
image: postgres
(10)dns
⾃定义DNS服务器。可以是单个值或列表。
dns: 8.8.8.8
dns:
- 8.8.8.8
-
9.9.9.9
(11)dns_search
nginx停止命令dns_search: example
dns_search:
- ample
- ample
(12)environment
添加环境变量。您可以使⽤数组或字典。任何布尔值;真/假,是/否,需要⽤引号括起来以确保它们不被YML解析器转换为True或False。
environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET:
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRET
(13)expose
开放容器的端⼝⽽不⽤在主机上暴露端⼝,它们只能被相关联的服务获取。只能指定内部端⼝。
expose:
- "3000"
- "8000"
以上就是Docker Swarm 服务编排之命令的详细内容,更多关于Docker Swarm 服务编排的资料请关注其它相关⽂章!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论