一步步创建第一个Docker App —— 1. 背景介绍
原文: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。
本文中我们会学习:
- 使用 docker machine 创建多个虚拟本地主机或 dockerized 云服务器
- 使用 docker 命令,配置运行具有manager 和 worker的集群(swarm)
- 通过 feeding docker-stack.yml 文件到docker stack deploy 命令,将 vote app 服务部署在两个nodes上
- 测试 app,观察结果
- 使用 visualizer 来探索和理解 app 运行过程
- 更新 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
该命令只支持 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. 背景介绍的更多相关文章
- 一步步创建第一个Docker App —— 2. 创建 Docker化 主机
原文:https://docs.docker.com/engine/getstarted-voting-app/node-setup/ 部署voting app的第一步,是为集群节点(swarm no ...
- 一步步创建第一个Docker App —— 4. 部署应用
原文:https://docs.docker.com/engine/getstarted-voting-app/deploy-app/ 在这一步中,将会使用第一步提到的 docker-stack.ym ...
- 一步步创建第一个Docker App —— 3. 创建一个集群Swarm
原文:https://docs.docker.com/engine/getstarted-voting-app/create-swarm/ 初始化集群 Swarm 1. 使用 ssh 命令登录 man ...
- django学习笔记【002】创建第一个django app
2.3.3 1.创建一个名叫polls的app python3. manage.py startapp polls tree mysite/ mysite/ ├── db.sqlite3 ├── ma ...
- Cordova - Windows 下创建第一个 Android App
官方文档: Create your first Cordova app Android Platform Guide 安装 JDK 和 Android SDK 注意: 需要将 JK 和 Android ...
- 一步步创建第一个Vue项目
写在了GitHub https://github.com/TaoPanfeng/vue-cms 1 初始化 创建一个文件夹 vue-cms 在vue-cms目录下创建文件 package.json 在 ...
- NodeJS笔记(五) 使用React Native 创建第一个 Android APP
参考:原文地址 几个月前官方推出了快速创建工具包,由于对React Native不熟悉这里直接使用这2个工具包进行创建 1. create-react-native-app(下文简称CRNA): 2. ...
- Docker - 创建第一个 docker 实例
1. 概述 安装完准备开始使用 2. 环境 os centos 7 docker docker - ce 19.03 3. 步骤 启动docker > systemctl start docke ...
- 编写第一个Flutter App(翻译)
博客搬迁至http://blog.wangjiegulu.com RSS订阅:http://blog.wangjiegulu.com/feed.xml 以下代码 Github 地址:https://g ...
随机推荐
- 【Go】Mac上安装Go
一:首先安装brew,方便管理,安装方法,终端中输入 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/ins ...
- SSO流程
SSO SSO又名单点登录,用户只需要登录一次就可以访问权限范围内的所有应用子系统.举个简单的例子,你在百度首页登录成功之后,你再访问百度百科.百度知道.百度贴吧等网站也会处于登录状态了,这就是一个单 ...
- 一种利用ADO连接池操作MySQL的解决方案(VC++)
VC++连接MySQL数据库 常用的方式有三种:ADO.mysql++,mysql API ; 本文只讲述ADO的连接方式. 为什么要使用连接池? 对于简单的数据库应用,完全可以先创建一个常连接(此连 ...
- CS224n-作业1
0 前言 作业1对应的试题 作业1对应的启动代码 作业1主页 1 Softmax(10分) (a)(5分) 对于向量$x+c$的任一维度$i$,有: \begin{align*}\mbox{softm ...
- basename命令详解
基础命令学习目录首页 摘要:前言bashname命令用于获取路径中的文件名或路径名(获取的时候叶子节点的元素内容)常见用法举例basenamepath获取末尾的文件名或路径名1:[aliyunzixu ...
- 点击小图查看大图jQuery插件FancyBox魔幻灯箱
今日发现一个不错的JQuery插件FancyBox,也许早就有这个插件了,但是没名字,我就暂且叫他魔幻灯箱吧,采用Mac系统的样式.网传主要有以下功能:■弹出的窗口有很漂亮的阴影效果.■关联的对象(就 ...
- [zabbix] zabbix数据采集频率、数据连续多次异常触发、告警次数、告警频率
数据采集频率:1分钟采集一次 数据连续多次异常触发:连续三次异常才触发告警 告警次数:告警三次 告警频率:每隔10分钟告警一次 默认模板“Template App Zabbix Agent”监控项“A ...
- Beta发布文案+美工
团队名称:探路者 1蔺依铭:http://www.cnblogs.com/linym762/(组长) 2张恩聚:http://www.cnblogs.com/zej87/ 3米赫:http://www ...
- Scrum Meeting 7 -2014.11.13
之前srcum没写好是我的错.以后会每天更新的. 老师反映之前项目小组从pdf中提取作者效果不好,我们讨论决定进行一定的优化.在整合测试的同时开始服务器程序部署. Member Today’s tas ...
- 实验3 --俄罗斯方块 with 20135335郝爽
一. 实验内容 (一)敏捷开发与XP 内容:1.敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法. 2.极限编程(eXtreme Programming,X ...
- 使用 docker machine 创建多个虚拟本地主机或 dockerized 云服务器
- 使用 docker 命令,配置运行具有manager 和 worker的集群(swarm)
- 通过 feeding docker-stack.yml 文件到docker stack deploy 命令,将 vote app 服务部署在两个nodes上
- 测试 app,观察结果
- 使用 visualizer 来探索和理解 app 运行过程
- 更新 docker-stack.yml文件,并使用一个不同的 vote 镜像(image)重新部署 app,获得不同的民意调查结果

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

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
docker-stack.yml 部署配置文件
除了在Dockerfile中定义一系列build和run命令,我们还可以在一个 Compose file 文件中定义services,这里面还包括 services 将要如何并在哪里运行的信息。所以,我们可以使用 Compose file 来替代 多个Dockerfiles的配置方法,亦或者,Compose file也可以独立于 Dockerfiles使用。
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 文件配置的那样。
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
该命令只支持
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. 背景介绍的更多相关文章
- 一步步创建第一个Docker App —— 2. 创建 Docker化 主机
原文:https://docs.docker.com/engine/getstarted-voting-app/node-setup/ 部署voting app的第一步,是为集群节点(swarm no ...
- 一步步创建第一个Docker App —— 4. 部署应用
原文:https://docs.docker.com/engine/getstarted-voting-app/deploy-app/ 在这一步中,将会使用第一步提到的 docker-stack.ym ...
- 一步步创建第一个Docker App —— 3. 创建一个集群Swarm
原文:https://docs.docker.com/engine/getstarted-voting-app/create-swarm/ 初始化集群 Swarm 1. 使用 ssh 命令登录 man ...
- django学习笔记【002】创建第一个django app
2.3.3 1.创建一个名叫polls的app python3. manage.py startapp polls tree mysite/ mysite/ ├── db.sqlite3 ├── ma ...
- Cordova - Windows 下创建第一个 Android App
官方文档: Create your first Cordova app Android Platform Guide 安装 JDK 和 Android SDK 注意: 需要将 JK 和 Android ...
- 一步步创建第一个Vue项目
写在了GitHub https://github.com/TaoPanfeng/vue-cms 1 初始化 创建一个文件夹 vue-cms 在vue-cms目录下创建文件 package.json 在 ...
- NodeJS笔记(五) 使用React Native 创建第一个 Android APP
参考:原文地址 几个月前官方推出了快速创建工具包,由于对React Native不熟悉这里直接使用这2个工具包进行创建 1. create-react-native-app(下文简称CRNA): 2. ...
- Docker - 创建第一个 docker 实例
1. 概述 安装完准备开始使用 2. 环境 os centos 7 docker docker - ce 19.03 3. 步骤 启动docker > systemctl start docke ...
- 编写第一个Flutter App(翻译)
博客搬迁至http://blog.wangjiegulu.com RSS订阅:http://blog.wangjiegulu.com/feed.xml 以下代码 Github 地址:https://g ...
随机推荐
- 【Go】Mac上安装Go
一:首先安装brew,方便管理,安装方法,终端中输入 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/ins ...
- SSO流程
SSO SSO又名单点登录,用户只需要登录一次就可以访问权限范围内的所有应用子系统.举个简单的例子,你在百度首页登录成功之后,你再访问百度百科.百度知道.百度贴吧等网站也会处于登录状态了,这就是一个单 ...
- 一种利用ADO连接池操作MySQL的解决方案(VC++)
VC++连接MySQL数据库 常用的方式有三种:ADO.mysql++,mysql API ; 本文只讲述ADO的连接方式. 为什么要使用连接池? 对于简单的数据库应用,完全可以先创建一个常连接(此连 ...
- CS224n-作业1
0 前言 作业1对应的试题 作业1对应的启动代码 作业1主页 1 Softmax(10分) (a)(5分) 对于向量$x+c$的任一维度$i$,有: \begin{align*}\mbox{softm ...
- basename命令详解
基础命令学习目录首页 摘要:前言bashname命令用于获取路径中的文件名或路径名(获取的时候叶子节点的元素内容)常见用法举例basenamepath获取末尾的文件名或路径名1:[aliyunzixu ...
- 点击小图查看大图jQuery插件FancyBox魔幻灯箱
今日发现一个不错的JQuery插件FancyBox,也许早就有这个插件了,但是没名字,我就暂且叫他魔幻灯箱吧,采用Mac系统的样式.网传主要有以下功能:■弹出的窗口有很漂亮的阴影效果.■关联的对象(就 ...
- [zabbix] zabbix数据采集频率、数据连续多次异常触发、告警次数、告警频率
数据采集频率:1分钟采集一次 数据连续多次异常触发:连续三次异常才触发告警 告警次数:告警三次 告警频率:每隔10分钟告警一次 默认模板“Template App Zabbix Agent”监控项“A ...
- Beta发布文案+美工
团队名称:探路者 1蔺依铭:http://www.cnblogs.com/linym762/(组长) 2张恩聚:http://www.cnblogs.com/zej87/ 3米赫:http://www ...
- Scrum Meeting 7 -2014.11.13
之前srcum没写好是我的错.以后会每天更新的. 老师反映之前项目小组从pdf中提取作者效果不好,我们讨论决定进行一定的优化.在整合测试的同时开始服务器程序部署. Member Today’s tas ...
- 实验3 --俄罗斯方块 with 20135335郝爽
一. 实验内容 (一)敏捷开发与XP 内容:1.敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法. 2.极限编程(eXtreme Programming,X ...