一、简介

  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. version: '3'
  2. services:
  3. redis:
  4. image: redis:alpine
  5. deploy:
  6. replicas: 6
  7. update_config:
  8. parallelism: 2
  9. delay: 10s
  10. restart_policy:
  11. 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. version: "3.3"
  2.  
  3. services:
  4. wordpress:
  5. image: wordpress
  6. ports:
  7. - 8080:80
  8. networks:
  9. - overlay
  10. deploy:
  11. mode: replicated
  12. replicas: 2
  13. endpoint_mode: vip
  14.  
  15. mysql:
  16. image: mysql
  17. volumes:
  18. - db-data:/var/lib/mysql/data
  19. networks:
  20. - overlay
  21. deploy:
  22. mode: replicated
  23. replicas: 2
  24. endpoint_mode: dnsrr
  25.  
  26. volumes:
  27. db-data:
  28.  
  29. networks:
  30. overlay:

  (2)LABELS  

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

  1. version: "3"
  2. services:
  3. web:
  4. image: web
  5. deploy:
  6. labels:
  7. com.example.description: "This label will appear on the web service"

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

  1. version: "3"
  2. services:
  3. web:
  4. image: web
  5. labels:
  6. com.example.description: "This label will appear on all containers for the web service"

  (3)MODE

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

  1. version: '3'
  2. services:
  3. worker:
  4. image: dockersamples/examplevotingapp_worker
  5. deploy:
  6. mode: global

  (4)PLACEMENT

  指定约束和偏好设置 

  1. version: '3'
  2. services:
  3. db:
  4. image: postgres
  5. deploy:
  6. placement:
  7. constraints:
  8. - node.role == manager
  9. - engine.labels.operatingsystem == ubuntu 14.04
  10. preferences:
  11. - spread: node.labels.zone

  (5)REPLICAS

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

  1. version: '3'
  2. services:
  3. worker:
  4. image: dockersamples/examplevotingapp_worker
  5. networks:
  6. - frontend
  7. - backend
  8. deploy:
  9. mode: replicated
  10. replicas: 6

  (6)RESOURCES

  资源限制配置 

  1. 注意:这会替换版本3之前的Compose文件(cpu_sharescpu_quotacpusetmem_limitmemswap_limitmem_swappiness
  2. 中的非群集模式的旧资源约束选项,如升级2.x版至3.x中所述。  

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

  1. version: '3'
  2. services:
  3. redis:
  4. image: redis:alpine
  5. deploy:
  6. resources:
  7. limits:
  8. cpus: '0.50'
  9. memory: 50M
  10. reservations:
  11. cpus: '0.25'
  12. memory: 20M

  (7)RESTART_POLICY

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

  • condition :none、on-failure和any(默认any)
  • delay :在重启尝试之间等待多久(默认0)
  • max_attempts :尝试重启的次数(默认一直重启,直到成功)
  • window : 在确实一个重启是否成功前需要等待的窗口时间 
  1. version: "3"
  2. services:
  3. redis:
  4. image: redis:alpine
  5. deploy:
  6. restart_policy:
  7. condition: on-failure
  8. delay: 5s
  9. max_attempts: 3
  10. 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. version: '3.4'
  2. services:
  3. vote:
  4. image: dockersamples/examplevotingapp_vote:before
  5. depends_on:
  6. - redis
  7. deploy:
  8. replicas: 2
  9. update_config:
  10. parallelism: 2
  11. delay: 10s
  12. order: stop-first

  (9)depends_on

  表示服务之间的依赖关系  

  1. version: '3'
  2. services:
  3. web:
  4. build: .
  5. depends_on:
  6. - db
  7. - redis
  8. redis:
  9. image: redis
  10. db:
  11. image: postgres

  (10)dns  

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

  1. dns: 8.8.8.8
  2. dns:
  3. - 8.8.8.8
  4. - 9.9.9.9

  (11)dns_search  

  1. dns_search: example.com
  2. dns_search:
  3. - dc1.example.com
  4. - dc2.example.com

  (12)environment  

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

  1. environment:
  2. RACK_ENV: development
  3. SHOW: 'true'
  4. SESSION_SECRET:
  5.  
  6. environment:
  7. - RACK_ENV=development
  8. - SHOW=true
  9. - SESSION_SECRET

  (13)expose

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

  1. expose:
  2. - "3000"
  3. - "8000"

  

Docker Swarm 服务编排之命令的更多相关文章

  1. 基于 Consul 的 Docker Swarm 服务发现

    Docker 是一种新型的虚拟化技术,它的目标在于实现轻量级操作系统的虚拟化.相比传统的虚拟化方案,Docker 虚拟化技术有一些很明显的优势:启动容器的速度明显快于传统虚拟化技术,同时创建一台虚拟机 ...

  2. Docker Swarm 服务版本更新与回滚

    Docker Swarm 服务版本更新 环境: 系统:Centos 7.4 x64 应用版本:Docker 18.09.0 管理节点:192.168.1.79 工作节点:192.168.1.78 工作 ...

  3. Docker Swarm 日常运维命令笔记

    之前介绍了Docker管理工具-Swarm部署记录,这里简单总结下Docker Swarm的日常维护命令,以作为平时运维笔记. Swarm作为一个管理Docker集群的工具,首先需要将其部署起来,可以 ...

  4. 九、docker swarm主机编排

    一. 什么是Docker Swarm Swarm 是 Docker 公司推出的用来管理 docker 集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/do ...

  5. Docker | 第七章:Docker Compose服务编排介绍及使用

    前言 前面章节,我们学习了如何构建自己的镜像文件,如何保存自己的镜像文件.大多都是一个镜像启动.当一个系统需要多个子系统进行配合时,若每个子系统也就是镜像需要一个个手动启动和停止的话,那估计实施人员也 ...

  6. 28. docker swarm 容器编排简介

    1.采用集群架构 集群架构包含节点和角色 docker 节点中 包含 worker 和 manager 两个角色 manager 相当于 swarm 集群的 大脑  是用来管理配置节点的 (避免单点故 ...

  7. Docker之Compose服务编排

    Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Comp ...

  8. (转)Docker之Compose服务编排

    转自:https://www.cnblogs.com/52fhy/p/5991344.html Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过 ...

  9. docker swarm英文文档学习-10-使用Docker密钥管理敏感数据

    Manage sensitive data with Docker secrets使用Docker secrets管理敏感数据 About secrets 对于Docker Swarm服务来说,sec ...

随机推荐

  1. oracle查看用户表

    select table_name from user_tables;

  2. Daily Scrum (2015/11/8)

    由于编译大作业临近deadline以及各项选修课即将结课,虽然PM强调软工任务也很紧迫,但是大多数成员表示今天想请假一天.符美潇今天把自己所负责的数据库编码部分和谢金洛的UI进行了对接.在测试过程中发 ...

  3. Scrum Meeting 11.04

    成员 今日任务 明日计划 用时 徐越 学习Fragment相关知识,代码移植 代码移植 4h 赵庶宏 selvet移植,服务器配置,编写数据库 服务器配置,代码移植 4h 薄霖 学习安卓界面设计数据库 ...

  4. 第四节 Linux目录文件及文件基本操作

    一.Linux目录结构 Linux 的目录与 Windows 的目录的区别: 一种不同是体现在目录与存储介质(磁盘,内存,DVD 等)的关系上,以往的 Windows 一直是以存储介质为主的,主要以盘 ...

  5. vs2013+python+ cocos2d-x-3.3rc0环境搭建

    1.vs2013安装一路next,安装即可,时间1~2个小时 2.解压cocos2d-x-3.3rc0   build文件夹里会有名为  cocos2d-win32.vc2012的sln文件  打开  ...

  6. gogoing软件NABCD

    N,need 需求:gogoing项目目前打算做得是一个基于石家庄铁道大学在校大学生对于短期节假日出行旅游的指南.最关键的定义为“穷游”.“穷”则体现在以小的花销去实现最完美的旅游方式.我们的gogo ...

  7. Codeforces Round #196 (Div. 2) D. Book of Evil 树形dp

    题目链接: http://codeforces.com/problemset/problem/337/D D. Book of Evil time limit per test2 secondsmem ...

  8. 【Coursera】应用机器学习的建议

    偏差方差权衡 使用较小的神经网络,类似于参数较少的情况,容易导致高偏差和欠拟合,但计算代价较小使用较大的神经网络,类似于参数较多的情况,容易导致高方差和过拟合,虽然计算代价比较大,但是可以通过归一化手 ...

  9. 确保你想要修改的char*是可以修改的

    void change(char *source) { source[] = 'D'; cout<<source<<endl; } 考虑一下,你有这么一个函数change它的作 ...

  10. 个人作业week3案例分析

    调研产品:博客园 第一部分 调研和评测 1.bug 1.不同种类浏览器的支持存在差异 bug描述:在不同浏览器下,部分博客内容显示的格式有明显不同 可尝试用下面两种不同的浏览器打开这个博客网址:htt ...