原文: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.

一步步创建第一个Docker App —— 1. 背景介绍的更多相关文章

  1. 一步步创建第一个Docker App —— 2. 创建 Docker化 主机

    原文:https://docs.docker.com/engine/getstarted-voting-app/node-setup/ 部署voting app的第一步,是为集群节点(swarm no ...

  2. 一步步创建第一个Docker App —— 4. 部署应用

    原文:https://docs.docker.com/engine/getstarted-voting-app/deploy-app/ 在这一步中,将会使用第一步提到的 docker-stack.ym ...

  3. 一步步创建第一个Docker App —— 3. 创建一个集群Swarm

    原文:https://docs.docker.com/engine/getstarted-voting-app/create-swarm/ 初始化集群 Swarm 1. 使用 ssh 命令登录 man ...

  4. django学习笔记【002】创建第一个django app

    2.3.3 1.创建一个名叫polls的app python3. manage.py startapp polls tree mysite/ mysite/ ├── db.sqlite3 ├── ma ...

  5. Cordova - Windows 下创建第一个 Android App

    官方文档: Create your first Cordova app Android Platform Guide 安装 JDK 和 Android SDK 注意: 需要将 JK 和 Android ...

  6. 一步步创建第一个Vue项目

    写在了GitHub https://github.com/TaoPanfeng/vue-cms 1 初始化 创建一个文件夹 vue-cms 在vue-cms目录下创建文件 package.json 在 ...

  7. NodeJS笔记(五) 使用React Native 创建第一个 Android APP

    参考:原文地址 几个月前官方推出了快速创建工具包,由于对React Native不熟悉这里直接使用这2个工具包进行创建 1. create-react-native-app(下文简称CRNA): 2. ...

  8. Docker - 创建第一个 docker 实例

    1. 概述 安装完准备开始使用 2. 环境 os centos 7 docker docker - ce 19.03 3. 步骤 启动docker > systemctl start docke ...

  9. 编写第一个Flutter App(翻译)

    博客搬迁至http://blog.wangjiegulu.com RSS订阅:http://blog.wangjiegulu.com/feed.xml 以下代码 Github 地址:https://g ...

随机推荐

  1. python中__name__属性的使用

    python常用模块目录 1.打印出函数名字而非函数名对应的地址 )打印的是函数地址 def func(): print("我是%s函数"%func) func() ------- ...

  2. roadhog中如何拷贝文件

    一:使用 public 目录 我们约定 public 目录下的文件会在 server 和 build 时被自动 copy 到输出目录(默认是 ./dist)下.所以可以在这里存放 favicon, i ...

  3. 以符合人类阅读的方式打印php数组【转载】

    在程序开发过程中:打印数据进行查看调试是非常频繁的:如果没有一种易于阅读的样式那是相当痛苦的: 先定义一个数组: 1 2 3 4 5 6 7 8 9 $array=array(     't0'=&g ...

  4. “学霸系统”之NABC

    我们团队这次选择的是“学霸系统”客户端项目: 1.需求(need) 作为一款和网上教学问答系统具有相似功能的手机客户端,具体的功能已给出要求:用户管理.搜索.分类.上传下载.用户贡献与交互等功能. ( ...

  5. eclipse自动生成uml

    见如下链接: https://blog.csdn.net/zyf_balance/article/details/44937197 若eclipse无法生成,可以安装myeclipse使用自带的方法: ...

  6. arcgis 10.3中文版安装教程、配置及常见问题(百度的有些错误)

    参考的: 1.http://wenku.baidu.com/link?url=W-wo_lEMvzHxF19w91X7H0WDjyCQ16DjGu4ViaZ4-eVPr0NTU-LrZTPK1oyzT ...

  7. 【DL.AI】《Structuring Machine Learning Projects》笔记

    一.改进模型的几个方法 Collect more data Collect more diverse training set Train algorithm longer with gradient ...

  8. 【Coursera】线性回归和逻辑回归

    一.线性回归 1.批量梯度下降法 每次对参数进行一次迭代时,都要扫描一遍输入全集 算法可以收敛到局部最优值 当迭代多次之后,每次迭代参数的改变越小 2.随机梯度下降法 对于一个输入样本,对参数进行一次 ...

  9. DPDK RX / TX Callbacks 源码阅读

    这个sample是基于basicfw的.basicfw就是一个网口收到的包立即从另一个网口转发出去,非常简洁明了的程序,可以通过basicfw学习基础的DPDK发包API.RX / TX Callba ...

  10. 利用CNN进行多分类的文档分类

    # coding: utf-8 import tensorflow as tf class TCNNConfig(object): """CNN配置参数"&qu ...