小知识: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 Swarm 服务编排之命令详解-猿站网-插图

二、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
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

  在下例中,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 : 在确实一个重启是否成功前需要等待的窗口时间 
?
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:更新期间允许的失败率o rder:更新期间的操作顺序。停止优先(旧任务在开始新任务之前停止)或者先启动(首先启动新任务,并且正在运行的任务短暂重叠)(默认停止优先)注意:只支持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”

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

原文链接:https://www.cnblogs.com/bigberg/p/8867326.html

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:docker部署蜗牛影院系统详细流程分析

2023-3-21 10:10:58

建站知识

小知识:什么是服务器内存?服务器内存和普通内存有什么区别?

2023-3-21 10:25:32

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索