原文:https://docs.docker.com/engine/getstarted-voting-app/#/docker-stacks-and-services

你将会学习什么

   本文创建了一个基于web的投票voting应用,会收集,匹配,并返回投票结果(你选择的是cats,dogs还是其他)。这个投票app包括多个服务,每个都在独自的container容器中运行。

   我们会将app部署为一个stack,从而介绍一些在Compose Version 3中的新概念,并且使用swarm mode

   本文中我们会学习:
  1. 使用 docker machine 创建多个虚拟本地主机或 dockerized 云服务器
  2. 使用 docker 命令,配置运行具有manager 和 worker的集群(swarm)
  3. 通过 feeding docker-stack.yml 文件到docker stack deploy 命令,将 vote app 服务部署在两个nodes上
  4. 测试 app,观察结果
  5. 使用 visualizer 来探索和理解 app 运行过程
  6. 更新 docker-stack.yml文件,并使用一个不同的 vote 镜像(image)重新部署 app,获得不同的民意调查结果
    
 

服务(Services)和镜像(images)概况

   service的定义是:一个用来完成特定task的可执行code。一个 service可以运行在一个或者多个容器containers中。配置service的configuration文件,可以让你将app部署为一个集群swarm,并且管理它以 distributed,multi-container应用的形式。

   voting app you由多个services组成,每个都基于一个镜像 image:
   

   每一个service都会在各自的container中运行。通过使用 集群模式(swarm mode),我们还能够将将应用扩展,部署副本到多个nodes中。 

   下面是一个例子:
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- 5000:80
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure
image 定义了我们将会用到哪一个service
depends_on 让我们指定在某个service部署以后,该service才部署。这里是在redis部署之后,vote service才开始部署
deploy 则指定了集群部署(swarm deployment)

docker-stack.yml 部署配置文件

   除了在Dockerfile中定义一系列build和run命令,我们还可以在一个 Compose file 文件中定义services,这里面还包括 services 将要如何并在哪里运行的信息。所以,我们可以使用 Compose file 来替代 多个Dockerfiles的配置方法,亦或者,Compose file也可以独立于 Dockerfiles使用。

   在之前的 Getting Started with Docker tutorial 中,我们为 whalesay app 创建了一个 Dockerfile,并使用它来build了一个image,并运行在一个container中。

   在本文教程,images 则是 pre-build 的,我们将要使用 docker-stack.yml (a Version 3 Compose file)来替代 Dockerfile来运行 images。当我们开始部署时候,每一个image 都会以service的形式在一个container中运行(或者运行在多个container中)。

为了进行本文的示例,这里我们先直接复制如下的 docker-stack.yml 配置,并运行 Docker。该文件已经定义了所有上文需要的 services,配置信息,如:ports, networks, volumes, application dependencies 和 swarm configuration。
version: "3"
services: redis:
image: redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints: [node.role == manager]
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- 5000:80
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure
result:
image: dockersamples/examplevotingapp_result:before
ports:
- 5001:80
networks:
- backend
depends_on:
- db
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 1
labels: [APP=VOTING]
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager] networks:
frontend:
backend: volumes:
db-data:

Compose Version 3 特性和功能

为了部署 voting app,我们需要调用 docker stack deploy命令,并使用 docker-stack.yml文件。从而 pull 相关的 images到本地,并在swarm集群中调用 services,就如在 .yml 文件配置的那样。

注意到 socker-stack.yml 文件的顶部,版本被定义为 version: "3" 。该文的 voting app 是基于 Compose version 3的,它和 Compose 以及 Docker Engine swarm mode 相互兼容。

在正是开始之前,我们来看一下 Compose files 和一些在Compose Version 3中,新的部署特性。

docker-stack.yml

docker-stack.yml 是 Compose file 中的一个新文件类型,只和Compose Version 3兼容。

--deploy key and swarm mode

deploy 关键字,允许我们指定一个集群部署(swarm deployment)的各种特性。

比如,voting app 配置中,使用这个关键字,创建了 vote 和 result services 的副本(每个service有两个 container,被部署到swarm集群中).

voting app 同样使用 deploy 约束某些services只能够在manager node中执行。

docker stack deploy command

docker stack deploy 是一条使用 docker-stack.yml 文件来部署系统的命令。
  • 该命令只支持 version: "3" 的Compose files.

  • 不支持关键字 build ,这之前是在标准 Compose files中被支持的, 而Compose file则是基于 Dockerfile的。为了使用 docker stack deploy,我们需要使用 pre-built image

  • 它可以替代命令 docker compose up 来运行与 Version 3 兼容的 applications.

最新文章

  1. Xcode 快速开发 代码块
  2. 在SQL Server中将数据导出为XML和Json
  3. phpcms V9 首页模板文件解析
  4. js和 jquery对象
  5. find 日常使用
  6. 如何通过REST获取JENKINS的编译进度?
  7. SQL SERVER 2008 nvarchar 转换 deciaml 失败(nvarchar to decimal)
  8. 可爱的 Python : Python中的函数式编程,第三部分
  9. java数组中的三种排序方法中的冒泡排序方法
  10. cocos2d-x 3.2 2048——第六部分(最后一章)
  11. web-故道白云&Clound的错误
  12. C#总结(六)EventBus事件总线的使用-自己实现事件总线
  13. CMake命令行添加编译参数
  14. JDK8- interface接口可以写方法体了-- 惊 dt.jar包等
  15. 对于Vue的v-if 和 v-showi
  16. day94
  17. P1130 红牌
  18. GAN-生成对抗网络原理
  19. python学习笔记_week21
  20. Mac 命令行,自定义命令

热门文章

  1. AES128加密算法完整实现
  2. (转)一个简单的rest_framework demo
  3. Oracle purge 用法介绍
  4. 《 Spring1之第二次站立会议(重发)》
  5. ASP.net四则运算《《《策略模式
  6. python learning GUI
  7. [二叉树建树]1119. Pre- and Post-order Traversals (30) (前序和后序遍历建立二叉树)
  8. IO流的各种继承关系
  9. js中的let\var\const
  10. 单片机FLASH与RAM、ROM的关系