docker 入门6 - 部署 【翻译】

开始,第 6 部分:部署应用

先决条件

  • 安装 Docker。node

  • 获取第 3 部分先决条件中所述的 Docker Compose。web

  • 获取 Docker Machine,如第 4 部分先决条件中所述。redis

  • 阅读第 1 部分中的方向。docker

  • 了解如何在第 2 部分中建立容器。windows

  • 确保经过将friendlyhello镜像推送到注册表来发布您建立的friendlyhello镜像。咱们在这里那个使用共享镜像。浏览器

  • 确保镜像用做于已部署的容器。运行此命令,在信息中键入usernamerepo, 和 tag:docker run -p 80:80 username/repo:tag,而后访问http://localhost/服务器

  • 获取第 5 部分的 docker-compose.yml 的最终版本。 网络

介绍

您一直在为整个教程编辑相同的Compose文件。咱们有好消息,该Compose文件在生产环境中的工做方式与在您的计算机上同样好。在本节中,咱们将介绍运行 Dockerized 应用程序的一些选项。ssh

Docker Enterprise

Docker Enterprise 企业版的客户运行了稳定、商业支持的 Docker Engine版本,做为附加组件,他们获得了咱们一流的管理软件 ,Docker 数据中心。您可使用通用控制面板(Universal Control Plane)的界面管理应用程序的各个方面,使用 Docker 可信registry运行专用镜像Registry,与 LDAP 提供程序集成,使用 Docker 内容信任对生产环境镜像进行签名,以及许多其余特征。tcp

将您本身的服务器引入 Docker Enterprise并设置 Docker 数据中心实际上须要两个步骤:

  1. 从 Docker 中心获取服务器操做系统的 Docker 企业版。
  2. 按照说明在您本身的主机上安装 Docker 企业版。

注意:正在运行 Windows 容器?查看咱们的 Windows 服务器设置指南

完成全部设置并运行 Docker 企业版后,能够直接在 UI 中部署Compose文件。

以后,您能够看到它正在运行,而且能够更改您选择的应用程序的任何方面,甚至编辑Compose文件自己。

Docker Engine - Community

安装 Docker Engine --- Community

在您选择的平台上查找 Docker Engine---Community的安装说明。

建立您的swarm

运行 docker swarm init 在节点上建立一个swarm。

部署应用

运行 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
    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。

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

如下是您须要为每一个服务公开的端口:

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

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

咱们以亚马逊网络服务 (AWS) 为例。

用于保留数据的 redis 服务如何?

要使 redis 服务正常工做,您须要在运行 docker stack deploy以前,将 ssh 到运行manager的云服务器中,并在 /home/docker/ 中建立data/目录。另外一个选项是将 docker-stack.yml 中的数据路径更改成manager服务器上的预先存在的路径。此示例不包括此步骤,所以在示例输出中未启动 redis 服务。

迭代和清理

从这里,你能够作你学到的一切在本教程的前一部分。

  • 经过更改 docker-compose.yml 文件,使用 docker stack deploy命令动态从新部署应用来扩展应用。

  • 经过编辑代码更改应用行为,而后从新生成并推送新镜像。(为此,请按照以前为构建应用和发布镜像所执行的相同步骤进行操做)。

  • 您可使用 docker stack rm 拆解stack。例如:

     
    docker stack rm getstartedlab

     

与在本地 Docker machine VM 上运行swarm的状况不一样,不管是否关闭本地主机,您的swarm及其上部署的任何应用都会在云服务器上继续运行。

祝贺!

您对整个 Docker 平台进行了全堆栈,开发到部署的浏览。

Docker 平台的内容远不止此处介绍的内容,但您对容器、镜像、服务、swarm、stack、缩放、负载平衡、volume和placement constraints等基础知识有了很好的了解。

想深刻一点吗?如下是一些建议的资源:

  • 示例:咱们的示例包括多个在容器中运行的经常使用软件示例,以及一些教授最佳实践的良好实验室。

  • 用户指南:用户指南有几个示例,这些示例对网络和存储的解释比此处介绍的要深刻。

  • 管理员指南:介绍如何管理 Docker 实现的生产环境。

  • 培训:提供面对面指导和虚拟课堂环境的官方 Docker 课程。

  • 博客:介绍 Docker 最近发生的状况。

相关文章
相关标签/搜索