原文地址
docker run -p 80:80 username/repo:tag
,然后访问:http://localhost/
。你一直在为这个系列教程编辑同一个 Compose 文件。好消息是这个 Compose 文件在生产中的效果与在您的计算机上的效果相同。 在这里,我们通过一些选项来运行 Dockerized 应用程序。
如果你的生产环境使用的是 Docker Community Edition
,可以使用 Docker Cloud
来辅助管理特定服务提供商上的应用,比如 Amazon Web Services、DigitalOcean 和 Microsoft Azure。
设置和部署:
注意:这里并没有列出 Docker Cloud 的文档,务必在完成每个步骤后回到这个页面。
可以在标准模式或 swarm 模式下运行 Docker Cloud。
如果在标准模式下运行 Docker Cloud,按照下面的指示将你的服务提供商连接到 Docker Cloud。
如果是在 swarm 模式下运行(建议用于 Amazon Web Services 或 Microsoft Azure),直接跳到下一部分 创建 swarm。
如果使用的是 Amazon Web Services (AWS) 可以 在 AWS 上自动创建 swarm
如果使用 Microsoft Azure 可以 在 Azure 上自动创建 swarm
其他情况下,在 Docker Cloud UI 中 创建节点,然后 通过 Docker Cloud 使用 SSH 运行 docker swarm init
命令和 docker swarm join
命令 开启 swarm 模式。最终,点击屏幕顶部的开关开启 swarm 模式并 注册刚创建的 swarm。
注意:如果 使用 Docker Cloud Agent 自带主机,则此程序不支持 swarm 模式(If you are Using the Docker Cloud Agent to Bring your Own Host, this provider does not support swarm mode)。可以使用 Docker Cloud 注册自己的已存在的 swarm。
有两种不同的连接方式:
无论使用哪种方式,都将打开一个上下文是本地计算机的终端,但其 Docker 命令会路由到云服务提供商上运行的 swarm。 你可以直接访问本地文件系统和远程 swarm,从而启用纯 docker 命令。
运行 docker stack deploy -c docker-compose.yml getstartedlab
命令来部署应用到云端的 swarm。
docker stack deploy -c docker-compose.yml getstartedlab
Creating network getstartedlab_webnet
Creating service getstartedlab_web
Creating service getstartedlab_visualizer
Creating service getstartedlab_redis
现在应用运行在云端了。
可以使用 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 node ps
查看服务的任务 task:[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
此时应用已经在云服务器上作为 swarm 集群部署好了,正如刚刚运行的 docker 命令所证明的那样。但是,您仍然需要在云服务器上打开端口,以便:
允许每个 worker 节点上的 redis 和 web 服务互相通信
允许到 worker 节点上的 web 服务的入站流量,以使 Hello World 和 Visualizer 可以从浏览器访问。
允许到运行 swarm 管理器的服务器上 SSH 服务的入站流量(可能已经有云服务提供商设置好了)。
这些是每个服务需要暴露的端口:
服务 | 类型 | 协议 | 端口 |
---|---|---|---|
web | HTTP | TCP | 80 |
visualizer | HTTP | TCP | 8080 |
redis | TCP | TCP | 6379 |
开启端口的方法,参考每个云服务提供商,不再举例。
用于数据持久化的 redis 服务怎么设置?
要让 redis 服务工作,需要在运行docker stack deploy
命令前通过 ssh 登入运行 swarm 管理器的那台云服务器,并在目录/home/docker/
中创建data/
目录。另一种选择是将docker-stack.yml
文件中的数据路径改为一个运行 swarm 管理器的那台云服务器上已经存在的目录。这个例子中的 redis 因为没有设置路径,所以无法使用。
现在可以使用之前学过的所有知识了。
通过改变 docker-compose.yml
文件来伸缩应用,执行 docker stack deploy
命令就地重新部署应用。
通过编辑代码、重新构建并推送新镜像来改变应用程序的表现。
通过 docker stack rm
命令删除 stack:
docker stack rm getstartedlab
与在本地 Docker 虚拟机上运行 swarm 的场景不同,不管是否关闭本地主机,swarm 和部署在其上的任何应用程序都将继续在云服务器上运行。
你已经对使用 Docker 平台进行从开发到部署的完整流程进行了学习。
Docker 平台上,有更多的知识是这里没有提到的,但是你已经对 container、image、service、swarm、stack、scaling、load-balancing、volume、placement constraint 有了基本认识。
想要深入学习吗?下面是我们建议的资源: