Docker 入门 第六部分:部署app
Docker 入门 第六部分:部署app
先决条件
- 安装 Docker 1.13 或更高版本
- 按照第三部分中的描述安装Docker Compose。
- 按照第四部分中描述安装了Docker Machine,
- 阅读第一部分
- 在第二部分中学习如何创建容器
- 确保你已经将创建的
friendlyhello镜像发布到registry。我们会在这里用到这个镜像 - 确保你的镜像已经作为容器被部署运行,运行这个命令,在你的信息中加入
username,repo, 和tag:docker run -p 80:80 username/repo:tag, 然后查看http://localhost/。 - 从第五部分获取
docker-compose.yml的最终版本.
介绍
现在我们已经为整个教程编辑了Compose文件。这里有好消息,Compose文件在生产环境中的产生的效果和在你计算机上产生的效果是一样的。在这里,我们会介绍一些运行容器化应用的选项。
选择一个选项
Docker CE(Cloud provider)
如果你在生产环境中使用Docker社区办用的很好,你可以使用Docker Cloud来帮助你管理在流行服务提供商(例如Amazon Web Services、DigitalOcean 或者 Microsoft Azure)上的app,
设置和部署:
- 将你首选的提供商链接到Docker云,授权Docker Cloud自动为你配置和“Dockerize”VM的权限。
- 使用Docker Cloud创建你的计算资源和swarm
- 部署你的app
注意: 这里我们不会链接到Docker Cloud文档,完成每个步骤后,请确保重新返回这个页面。
链接Docker Cloud
你可以在标准模式或者Swaram模式中运行Docker Cloud。
如果你在标准模式中运行Docker Cloud,请遵照下面的步骤将你的服务提供商河Docker Cloud链接起来。
- Amazon Web Services 配置指南
- DigitalOcean 配置指南
- Microsoft Azure 配置指南
- Packet 配置指南
- SoftLayer 配置指南
- 使用 the Docker Cloud Agent 引用你自己的主机
如果你运行在Swarm模式中(推荐使用Amazon Web Service 或者Microsoft Azure),请跳到下一节有关如何创建swarm。
创建 swarm
准备创建swarm:
- 如果使用的是Amazon Web Services(AWS),你可以在AWS上自动创建一个swarm。
- 如果使用的是微软的Azure ,你可以在Azure上自动创建awzrm
- 否则,就使用Dcoker Cloud UI界面创建你的节点 ,并运行第四部分里在Docker Cloud上通过ssh学习到的
docker swarm init和docker swarm join命令。最后,点击屏幕顶部的切换按钮来启用Swarm模式,并注册刚刚创建的swarm。
注意:如果你使用Docker Cloud Agent来带动你自己的主机,则这种方式不支持集群模式。你可以在Docker Cloud 中注册自己已存在的swarm。
在云提供商上部署你的应用
通过Docker Cloud链接你自己的swarm。有几种不同的连接方式:
- 在Swarm模式的Docker Cloud web界面,选择页面顶部的Swarms,点击你想要连接的swarm,然后将给定的命令复制粘贴到命令行终端。

- 在Docker for Mac 或者Docker for Windows上,你可以通过桌面应用菜单直接连接到你的swarm上。

- 无论哪种方式,都会打开一个上下文是你的本地机器的终端,但其docker命令会被路由到你的云服务提供商上的swarm上。你可以直接连接本地文件系统和远程swarm,从而使用
docker命令。
运行
docker stack deploy -c docker-compose.yml getstartedlab在云托管的swarm上部署appdocker stack deploy -c docker-compose.yml getstartedlab Creating network getstartedlab_webnet
Creating service getstartedlab_web
Creating service getstartedlab_visualizer
Creating service getstartedlab_redis
现在你的app就运行在云上了。
运行一些swarm命令来验证部署
你可以像使用swarm命令行一样浏览和管理swarm。这里会有一些看起来看熟悉的例子:
使用
docker node ls列出节点。[getstartedlab] ~ $ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
9442yi1zie2l34lj01frj3lsn ip-172-31-5-208.us-west-1.compute.internal Ready Active
jr02vg153pfx6jr0j66624e8a ip-172-31-6-237.us-west-1.compute.internal Ready Active
thpgwmoz3qefdvfzp7d9wzfvi ip-172-31-18-121.us-west-1.compute.internal Ready Active
n2bsny0r2b8fey6013kwnom3m * ip-172-31-20-217.us-west-1.compute.internal Ready Active Leader
使用
docker service ls列出服务[getstartedlab] ~/sandbox/getstart $ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
x3jyx6uukog9 dockercloud-server-proxy global 1/1 dockercloud/server-proxy *:2376->2376/tcp
ioipby1vcxzm getstartedlab_redis replicated 0/1 redis:latest *:6379->6379/tcp
u5cxv7ppv5o0 getstartedlab_visualizer replicated 0/1 dockersamples/visualizer:stable *:8080->8080/tcp
vy7n2piyqrtr getstartedlab_web replicated 5/5 sam/getstarted:part6 *:80->80/tcp
使用
docker service ps <service>查看服务中的任务[getstartedlab] ~/sandbox/getstart $ docker service ps vy7n2piyqrtr
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
qrcd4a9lvjel getstartedlab_web.1 sam/getstarted:part6 ip-172-31-5-208.us-west-1.compute.internal Running Running 20 seconds ago
sknya8t4m51u getstartedlab_web.2 sam/getstarted:part6 ip-172-31-6-237.us-west-1.compute.internal Running Running 17 seconds ago
ia730lfnrslg getstartedlab_web.3 sam/getstarted:part6 ip-172-31-20-217.us-west-1.compute.internal Running Running 21 seconds ago
1edaa97h9u4k getstartedlab_web.4 sam/getstarted:part6 ip-172-31-18-121.us-west-1.compute.internal Running Running 21 seconds ago
uh64ez6ahuew getstartedlab_web.5 sam/getstarted:part6 ip-172-31-18-121.us-west-1.compute.internal Running Running 22 seconds ago
在云主机上开放服务
现在,你的app作为一个swarm部署在云服务器上,就像刚刚运行docker命令验证的那样。但你还需要开放端口来实现下面的内容:
- 允许工作节点上的redis服务和web服务可以进行通信
- 允许工作节点上的web服务可以入站访问,以便可以通过web浏览器可以访问Hello world 和 Visualizer。
- 允许服务器上的SSH入站访问,以便运行
manager(这可能已经在你的云服务商设置了)
下面是每个服务你需要开放的端口
| Service | Type | Protocol | Port |
|---|---|---|---|
| web | HTTP | TCP | 80 |
| visualizer | HTTP | TCP | 8080 |
| redis | TCP | TCP | 6379 |
表1
执行该操作的方法因与服务商的不同而不同。
这里我们使用Amazon Web Service(AWS)来举例。
如何使用redis来存储数据
要是redis正常工作,你需要ssh连接到运行了manager的云服务器,在运行docker stack deploy之前先在 /home/docker/ 创建 data/ 目录。另外一个方法是将docker-stack.yml文件中的数据路径更改为manager服务器上预先存在的路径。这里的例子不包含该步骤,因此示例输出中的redis服务没有运行。
示例:AWS
登陆AWS控制台,进入EC2面板,并点击进入Running Instances 来查看节点。
在左侧菜单里找到Network & Security > Security Groups
查看关联到你的swarm的security groups,,getstartedlab-Manager-<XXX>,getstartedlab-Nodes-<XXX>,getstartedlab-SwarmWide-<XXX>选择swarm的“Node”安全组,安全组的名字类似:
getstartedlab-NodeVpcSG-9HV9SMHDZT8C。为 web、visualizer 和 redis 服务添加入站规则,为上面表格(表1)的每一行内容都设置类型、协议和端口,点击保存这些规则。

提示: 当你保存新规则时,HTTP 和TCP端口会在IPv4和IPv6地址上自动创建。

返回Running Instances列表,获取其中一个worker的公共DNS名称,并粘贴到浏览器地址栏。

与教程的前几部分一样, HelloWorld app会显示在80端口,Visualizer显示在8080端口


迭代和清理
从这里开始,你可以做之前部分教程中学到的所有事情,
- 通过修改
docker-compose.yml文件来扩展app,使用docker stack deploy命令来及时更新部署。 - 通过修改代码来更改app行为,然后重建,并推送新的镜像。(要这样做,需要按照前面学习的构建app和发布镜像相同的步骤来实现)。
- 你可以使用
docker stack rm来删除stack,例如:
docker stack getstartedlab
与在本地docker机器上运行swarm不同,无论你是否关闭本地主机,你的swarm 和 其上的app都可以继续运行在云服务器上。
Enterprise(Cloud provider)这里不做介绍
Enterprise(On-premise)这了不做介绍
Docker 入门 第六部分:部署app的更多相关文章
- Docker入门(六):Stacks
这个<Docker入门系列>文档,是根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指 ...
- Docker入门(七):部署app
这个<Docker入门系列>文档,是根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指 ...
- Docker入门教程(六)另外的15个Docker命令
Docker入门教程(六)另外的15个Docker命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第六篇,继续介绍Docker命令.之前的第二篇文章 ...
- docker入门与部署微服务--学习笔记
最近公司进一步去windows,走向 linux+云化. 原来的一大坨windows虚拟机服务器都要转向linux, 既然走向linux的话,那么docker肯定是要涉足的. 故学习了docker入门 ...
- Docker入门(三):容器(Containers)
这个<Docker入门系列>文档,是根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指 ...
- Docker入门学习
Python爬虫 最近断断续续的写了几篇Python的学习心得,由于有开发经验的同学来说上手还是比较容易,而且Python提供了强大的第三方库,做一个小的示例程序还是比较简单,这不我之前就是针对Pyt ...
- 【转载】大白话Docker入门(二)
原文:https://yq.aliyun.com/articles/63517?spm=a2c4e.11153940.blogcont63035.15.12011c3fddklk0 上篇的大白话Doc ...
- 这可能是最为详细的Docker入门吐血总结
这可能是最为详细的Docker入门吐血总结 https://www.cnblogs.com/ECJTUACM-873284962/p/9789130.html Docker是什么? 在计算机技术日新 ...
- Docker 入门 第五部分:Stacks
目录 Docker 入门 第五部分:Stacks 先决条件 介绍 添加一个新的服务并重新部署 保存数据 回顾 Docker 入门 第五部分:Stacks 先决条件 安装 Docker 1.13 或更高 ...
随机推荐
- SQLSERVER 创建对Oracle数据库的DBlink以及查询使用
1. 与针对oracle数据库一样, 在sqlserver中创建对oracle数据库的dblink 安全性上面也进行定义(貌似不需要跟访问字符串只需要填一个即可) 发现有的版本改注册表不管用 还得修改 ...
- ELK日志框架(1):安装Elasticsearch组建单服务器多节点集群
ELK简介 最近有个需求搭建一套日志系统用于集成几个业务系统的日志提供快速的检索功能,目前是用Log4net存数据库+Error级别发邮件方式,也算简单暴力好用,但历史日志的模糊查询确实很慢,所以使用 ...
- python异常提示表
Python常见的异常提示及含义对照表如下: 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是 ...
- BZOJ4408&4299[Fjoi 2016]神秘数——主席树
题目描述 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13},1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = 4+1 6 = ...
- LOJ6045 雅礼集训 2017 Day8 价(最小割)
由Hall定理,任意k种减肥药对应的药材数量>=k.考虑如何限制其恰好为k,可以将其看作是使对应的药材数量尽量少. 考虑最小割.建一个二分图,左边的点表示减肥药,右边的点表示药材.减肥药和其使用 ...
- Codeforces Round #412 C. Success Rate
C. Success Rate time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- 值得Python小白学习的书 简单推荐几本吧
于我个人而言,我很喜欢Python,当然我也有很多的理由推荐你去学python.我只说两点.一是简单,二是写python薪资高.我觉得这俩理由就够了,对不对.买本书,装上pycharm,把书上面的例子 ...
- 自学Linux Shell5.2-shell内建命令history alias
点击返回 自学Linux命令行与Shell脚本之路 5.2-shell内建命令history alias 外部命令:有时称为文件系统命令,是存在于bash shell之外的程序,通常位于/bin./u ...
- 【HDU1693】Eat the Trees(插头dp)
[HDU1693]Eat the Trees(插头dp) 题面 HDU Vjudge 大概就是网格图上有些点不能走,现在要找到若干条不相交的哈密顿回路使得所有格子都恰好被走过一遍. 题解 这题的弱化版 ...
- [luogu1131][bzoj1060][ZJOI2007]时态同步【树形DP】
传送门:https://www.luogu.org/problemnew/show/P1131 题目大意 给你一棵树,每条边有边权,要求增加一些边的边权,使得根节点到每个叶子节点的距离相等,求出最少共 ...