准备工作

  • 已安装docker。
  • 如第三部分准备工作那样获取docker compose相关知识。
  • 如第四部分准备工作描述获取docker machine。
  • 阅读了第一部分的相关概念。
  • 从第二部分中学会了如何创建容器。
  • 确保已经向仓库中提交了firendlyhello镜像,我们在本文中将使用这个已分享的公共镜像。
  • 确保你的镜像已经部署成了一个容器。执行命令docker run -p 80:80 username/repo:tag,使用你的用户名(username)、仓库名(repo)和标签名(tag)对应替换即可。然后使用http://localhost进行访问
  • 一份第五部分中的docker-compose.yml最终版副本。

引言

你已经编写了与整个教程相同的compose文件。令人很高兴的这个文件在生产环境中也可以很好的工作。在这一部分,我们将介绍一些运行docker应用的选项。

选择一个选项

Docker商业版

Docker Enterprise Edition的客户运行稳定的,商业支持的Docker Engine版本,还有附带一套一流的管理软件Docker Datacenter作为附件。 您可以使用通用控制平面界面管理应用程序的各个方面,使用Docker Trusted Registry运行私有镜像注册服务,与LDAP程序集成,使用Docker Content Trust签署生产镜像以及许多其他功能。

在你的服务器上使用Docker商业版和配置Docker Datacenter主要涉及两个步骤:
1. 从Docker Hub上获取您服务器操作系统的Docker商业版本。
2. 按照说明在您的服务器上安装Docker商业版。

注意:运行Windows容器? 查看我们的Windows Server安装指南。

一旦完成设置并且Docker商业版正在运行,您就可以直接在UI中部署Compose文件。

Deploy an app on Docker Enterprise

之后,您可以看到它正在运行,并且可以更改您选择的应用程序的任何方面,甚至可以编辑Compose文件本身。

Managing app on Docker Enterprise

Docker社区版

安装Docker社区版

获取您所选择系统的docker社区版安装包。

创建swarm

运行docker swarm init在节点上创建swarm。

Deploy your app

运行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命令行来浏览和管理swarm。 以下是一些现在应该看起来很熟悉的例子:

使用docker node ls列出swarm中的节点。

[getstartedlab] ~ $ docker node ls
ID                            HOSTNAME                                      STATUS              AVAILABILITY        MANAGER STATUS
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
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-20-217.us-west-1.compute.internal   Running             Running 20 seconds ago                       
sknya8t4m51u        getstartedlab_web.2   sam/getstarted:part6   ip-172-31-20-217.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-20-217.us-west-1.compute.internal   Running             Running 21 seconds ago                       
uh64ez6ahuew        getstartedlab_web.5   sam/getstarted:part6   ip-172-31-20-217.us-west-1.compute.internal   Running             Running 22 seconds ago   

在云提供商机器上开放服务端口

此时,您的应用程序将作为swarm部署在云提供程序服务器上,正如您刚刚运行的docker命令所证明的那样。 但是,您仍需要在云服务器上打开端口,以便:

  • 如果使用许多节点,则允许redis服务和Web服务之间的通信

  • 允许任何工作节点上的Web服务的入站流量,以便可以从Web浏览器访问Hello World和Visualizer。

  • 允许运行管理器的服务器上的入站SSH流量(这可能已在您的云提供商上设置)

这些是您需要为每个服务公开的端口:

Service | Type | Protocol | Port
–|–|–|–
web | HTTP | TCP | 80
visualizer | HTTP | TCP | 8080
redis | TCP | TCP | 6379

执行此操作的方法因您的云提供商而异。

我们使用Amazon Web Services(AWS)作为示例。

redis服务如何保留数据呢?

要使redis服务正常工作,您需要ssh进入运行管理器的云服务器,并在运行docker stack deploy之前在/home/docker/中创建data/目录。另一种选择是将docker-stack.yml中的数据路径更改为管理服务器上的预先存在的路径。此示例不包括此步骤,因此示例输出中的redis服务未启动。

迭代与清除

从这里开始,您可以使用在本教程的前几部分中学到所有知识。

通过更改docker-compose.yml文件来扩展应用程序,并使用docker stack deploy命令即时重新部署。

通过编辑代码,然后重建并推送新镜像来更改应用程序行为。 (为此,请按照您之前用于构建应用程序并发布镜像的相同步骤)。

你可以用docker stack rm移除堆栈。 例如:

docker stack rm getstartedlab

与您在本地Docker机器VM上运行swarm的情况不同,无论您是否关闭本地主机,您的swarm及其上部署的任何应用程序都将继续在云服务器上运行。

恭喜

您已经对整个Docker平台进行了一次全栈的,开发-部署(devops)之旅。

除了本文还有很多关于Docker平台的东西,但是你应该已经对容器、镜像、服务、swarm、拓展、负载均衡、卷积、定位等有了基本认识。

想要更深入的学习?以下是我们推荐的一些资源:
- 案例:我们的案例包括在容器中运行的流行软件的多个示例,以及一些讲解最佳实践的优秀实验室。
- 用户指南:用户指南中有几个示例可以比此处介绍的更深入地解释网络和存储。
- 管理员指南:介绍如何管理Docker生产环境。
- 培训:官方Docker课程,提供面对面教学和虚拟教室环境。
- 博客:最近介绍了Docker正在发生的事情。

——————————————————————————
行路不知花开处,蓦然回首芷兰香。