参考文档:Get Started, Part 6: Deploy your app
Prerequisites
- 安装docker
- 获取Part 3的预备工作中的docker compose
- 获取Part 4的预备工作中的docker machine
- 阅读Part 1中的orientation
- 在Part 2中学习如何创建容器
- 确保你已经发布了
friendlyhello
镜像并且push到了registry上。我们在这里使用这个共享镜像 - 确保你的镜像作为一个已部署的容器运行。运行这个命令,然后将
username
,repo
,tag
换成你自己的:docker run -p 80:80 username/repo:tag
,然后访问http://localhost/ - 确保手边有Part 5最后一个版本的
docker-compose.yml
文件
Introduction
对于这整个教程,你一直在编辑相同的Compose file。好了,我们有一个好消息。这个Compose file在生产环境中会和在你本机上运行的一样好。现在,我们来看看一些用于你Dockerized化应用的选项。
Choose an option
备注:这里只翻译Docker CE部分,Enterprise(Cloud provider)和Enterprise(On-premise)部分请查阅原文档
如果你觉得在你的生产中使用Docker社区版本ok的化,你可以在流行的服务提供商(如AWS, DigitalOcean, MS Azure)上使用Docker cloud来帮助自己管理应用。
设置和部署:
- 通过你喜欢的运营商连接Docker Cloud,授予Docker Cloud的权限和Dockerize的虚拟机
- 使用Docker Cloud来创建你的计算资源和你的swarm
- 部署你的app
注意:我们这里不链接到Docker Cloud文档,确保你完成每一步后都会回到这一页。
Connect Docker Cloud
你可以使用Standard模式和Swarm模式运行Docker Cloud
如果你正在使用Standard模式运行Docker Cloud,依次查看以下链接的指导,以便你的服务提供商接入Docker Cloud
- Amazon Web Services setup guide
- DigitalOcean setup guide
- Microsoft Azure setup guide
- Packet setup guide
- SoftLayer setup guide
- Use the Docker Cloud Agent to bring your own host
如果你使用Swarm模式(推荐在AWS和MS Azure使用),那么直接看下一个章节create your swarm。
Create your swarm
准备好创建一个swarm了吗?
- 如果你在使用Amazon Web Services(AWS),你可以在AWS上自动创建一个swarm
- 如果你在使用Microsoft Azure,你可以在Azure上自动创建一个swarm
- 其他情况下,通过Docker Cloud的UI创建你的结点,然后运行你之前在part 4中学过的通过ssh访问Docker Cloud的
docker swarm init
和docker swarm join
指令。最后,通过点击屏幕上方的开关启动Swarm模式,然后注册到你刚创建的swarm上来启动Swarm模式
注意:如果你在使用Docker Cloud Agent来bring你的主机,那么这个提供者则不支持swarm模式,你可以通过Docker Cloud注册你已有的swarm。
Deploy your app on a cloud provider.
1、通过Docker Cloud连接到你的swarm上。有以下几种不同的方法来进行连接:
- 在Swarm模式下的Docker Cloud web interface,选择网页顶端的Swarms,点击你想要连接的swarm,在命令行粘贴给出的指令。
或者…
- 在Mac或者Windows版本的Docker中,你可以通过你的桌面应用菜单直接连接你的集群
不管使用哪种方式,这都会打开一个终端,内容是你本机,但是指令会在你的云服务提供商的swarm上运行。你可以直接访问你本地的文件系统和远程的swarm,使用pure的docker命令。
2、运行
docker stack deploy -c docker-compose.yml getstartedlab
来在云主机swarm上部署应用
1 | docker stack deploy -c docker-compose.yml getstartedlab |
你的app现在已经运行在云服务器上了。
RUN SOME SWARM COMMANDS TO VERIFY THE DEPLOYMENT
你可以使用一些swarm的命令行,就像你之前做的那样,来浏览和管理swarm。这里给出一些示例,你现在应该已经很眼熟了:
- 使用
docker node ls
来列出结点
1 | [getstartedlab] ~ $ docker node ls |
- 使用
docker service ls
来列出服务
1 | [getstartedlab] ~/sandbox/getstart $ docker service ls |
使用docker service ps <service>
来显示当前service的tasks
1 | [getstartedlab] ~/sandbox/getstart $ docker service ps vy7n2piyqrtr |
OPEN PORTS TOSERVICES ON CLOUD PROVIDER MACHINES
现在,你的应用已经在你的云服务器上部署好了,你刚才运行的docker指令就能很好的说明这点。但是你仍然需要在你的云服务器上打开一些端口以便于:
- 允许redis服务和web服务在worker机间通信
- 允许入站的流量访问运行在worker结点上的web服务,这样Hello World和Visualizer才能通过web浏览器访问。
- 允许入站的ssh流量访问服务器,这样才能运行在manager上(这点可能你的云服务商已经弄好了)
这些端口你需要给各个服务开放:
Service | Type | Protocol | Port |
---|---|---|---|
web |
HTTP | TCP | 80 |
visualize |
HTTP | TCP | 8080 |
redis |
TCP | TCP | 6379 |
具体要怎样做取决于你的云服务提供商。
我们使用Amazon Web Services(AWS)作一个例子。
Redis服务是怎样来持久化数据的呢?
想要让redis
服务运行,你需要ssh
到manager运行的云服务器上,在你运行docker stack deploy
之前,在/home/docker
目录下创建一个data/
目录。另一个选择是在docker-stack.yml
文件中改变数据的path为一个已经在manager服务器上存在的路径。这个例子不包括这一步,所以redis服务在这个例子的输出中不会出现。
EXAMPLE: AWS
1、 登录AWS Console,进入EC2 Dashboard,然后点进你正在运行的实例来查看结点。
2、 在左侧的菜单中,进入Network & Security -> Security Groups。查看和你的swarm相关的security groups,如关联getstartedlab-Manager-<xxx>
, getstartedlab-Nodes-<xxx>
以及getstartedlab-SwarmWide-<xxx>
3、 选择”Node”security group对那个swarm。这个group的名字类似于getstartedlab-NodeVpcSG-9HV9SMHDZT8C
4、 为web
, visualizer
, redis
服务添加入站规则,设置Type, Protocol, Port如上面的表格所示,然后点击Save来应用这些规则
Tips: 当你保存新的rules的时候,HTTP和TCP的端口会自动创建IPv4和IPv6形式的地址。
5、 进入Running Instances,获取每一个worker的公共DNS名称,并且将他们粘贴进入你网页浏览器的address bar。
如同之前教程的内容,Hello Word应用将会在80端口显示,Visualizer会在8080端口显示。
Iteration and cleanup
从这里,你可以做你之前章节学过的所有内容了。
- 通过改变
docker-compose.yml
文件来规模化你的app,然后远程发出docker stack deploy
指令来重新部署。 - 通过编辑代码来改变应用行为,然后重建,push新的镜像。(要做这个,请参照你之前学习的build the app和publish the image中的相关指令
- 通过
docker stack rm
指令,你可以解散一个stack。比如:docker stack rm getstartedlab
不同于你之前在本地的Docker machine虚拟机上运行的场景,你的swarm和在此之上部署的app持续运行在云服务器上,不论你是否关掉你本地的主机。
Congratulations!
你已经完成了全栈的、从开发到部署的docker平台旅程。
有很多这个旅程没有覆盖到的但是docker平台可以为你提供的东西,但是你已经有一个对containers, images, services, swarms, stacks, scaling, load-balancing, volumes, placement constrains的基本概念了。
想要了解的更加深入,这里有一些我们推荐的资源。
- Samples: 我们的示例包括多个流行软件在containers中运行的实例,以及一些labs教会你最佳实践。
- User Guide: 这个用户指南有多个例子,解释网络和存储,相比于这些教程有着更加的深度。
- Admin Guide: 覆盖如何管理一个docker化的生产环境。
- Training: 官方Docker教程,提供了一些实践性的知道和虚拟课程环境。
- Blog: 包括Docker最近变动的教程。