转载

使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

本文是一个基础指南的第 2 部分,该指南详细介绍如何使用 IBM™ UrbanCode 和 Docker Trusted Registry (DTR) 创建一个多容器 DevOps 环境。您可以在题为 通过 IBM 和 Docker 将容器部署到内部环境和混合云 的博文了解更多的信息。该文章介绍了如何开发多容器应用程序,并将它们部署到由 IBM Bluemix 和内部部署的 Docker Swarm 集群组成的混合云环境中。

在第 2 部分中,您将学习 UrbanCode Deploy 如何编排将混合应用程序部署到 Bluemix 和 Docker Swarm 的部署过程。

除了概述之外,第 1 部分 还介绍如何对 Bluemix 中的 IBM Containers、Docker Trusted Registry、Docker Swarm 和 IBM UrbanCode Build 执行必要的配置,以便使用 UrbanCode 部署 Docker 容器。在第 2 部分中,您将学习 IBM UrbanCode Deploy 如何编排将混合应用程序部署到 Bluemix 和 Docker Swarm 的部署过程。

阅读: IBM UrbanCode – Docker Trusted Registry 博客

观看: IBM UrbanCode – Docker Trusted Registry 演示

创建混合部署的准备工作

  • 一个示例多容器应用程序。可以在本文中使用 The Store 应用程序 。
  • Docker Trusted Registry (DTR)
  • Bluemix 中的IBM Containers
  • IBM UrbanCode Deploy
  • 用于 Docker 和 IBM Containers 的 UrbanCode Deploy 插件
  • IBM UrbanCode Build
  • Docker Swarm

观看演示

获取代码

第 1 步. 设置 IBM UrbanCode Deploy

  1. 安装 UrbanCode Deploy 服务器。
  2. 安装两个 UrbanCode Deploy 代理。将它们命名为 ucdiceagentucddheagent ,并将它们连接到 UrbanCode Deploy 服务器。
  3. ucdiceagent 上:
    1. 使用 ice-cli 工具在 Bluemix 中安装 IBM Containers。
      $ pip install https://static-ice.ng.bluemix.net/icecli-3.0.zip -U
    2. 安装 Cloud Foundry cf CLI 。
    3. 安装 Docker CS Engine。
    4. 安装 DTR certificates 。
  4. ucddheagent 上:
    1. 安装 Docker CS Engine。
    2. DOCKER_HOST 环境变量设置为 Swarm 主机和端口。例如:
      tcp://<Docker Swarm host>:<Docker Swarm port>
    3. 安装 DTR certificates 。
  5. UrbanCode Deploy 服务器和代理正常运行,且服务器能够在 Web UI URL 上正确响应后,在 UI 中导航到 Resources > Agents 链接,检查两个 UrbanCode Deploy 代理是否显示为在线且无错误。

第 2 步. 设置 UrbanCode Deploy Docker 插件

要使 UrbanCode Deploy 能够正确地与 ICS 和 Docker 容器协同运行,必须在服务器上安装 Docker 和 ICS UrbanCode Deploy 插件。

  1. 在 UrbanCode Deploy 服务器 UI 上导航到 Settings > Automation plug-ins 页面。
  2. 单击 Load Plugin 按钮。
  3. 下载 插件 。

第 3 步. 配置组件

您现在可以为应用程序配置 UrbanCode Deploy。首先需要了解组件的概念。对于本练习,UrbanCode Deploy 中的组件是组成 Store 应用程序的 4 个 Docker 容器镜像之一:

  • store/backend_was
  • store/db2_expc_nonroot
  • store/frontend
  • store/mysql

UrbanCode Deploy 组件是为每个镜像创建的。根据插件提供的组件模板,组件具有两种类型。

store/frontend 容器运行 Node.js 应用程序并提供 UI,是 Hybrid from Docker Registry 类型的组件,这意味着该容器镜像位于一个 Docker 注册表中。可以从该注册表中拉取容器镜像,然后将它部署到本地的内部部署服务中(比如 VM 或 Docker Swarm)或 ICS 上。

剩余的 3 个容器是 Docker 类型的组件。它们也位于一个 Docker 注册表中,但它们只能部署到本地服务中。

使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

点击查看大图

关闭 [x]

使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  1. 导航到每个组件的 Configuration > Basic Settings 对话框,并为它配置需要的设置。例如,在本例中, Source Configuration TypeDocker Importer ,因为它们都位于 Docker 注册表中,而且可以从该注册表中拉取它们。

    Docker Registry是运行相关的 Docker 注册表的 FQDN。 Docker Image Name 是注册表内的镜像的名称。

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  2. store/frontend 组件稍微不同。这种类型的组件必须配置与 ICS 相关的信息。这包括 Bluemix 用户 ID 和密码、空间、组织名称、容器在 ICS 注册表中使用的镜像名称,以及在 ICS 上启动容器时使用的容器名称。 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  3. UrbanCode Deploy 服务器现在应从 Docker 注册表拉取这些组件的最新版本。该服务器以可配置的间隔在注册表中轮询新镜像版本,所以拉取过程会自动执行。可以在组件的 Version 列看到这一点。 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    备注:

    store/frontend 组件被配置为在新版本出现时运行一个部署流程。还可以使用 UrbanCode Deploy Calendar 来计划这些流程。

第 4 步. 配置资源

在配置组件并可以使用它们之后,可以配置 UrbanCode Deploy 资源。

  1. Resources 选项卡下,单击 Create Top Level Group 并创建一个名为 all 的顶级资源组。
  2. all 下,可以创建更多的资源组,比如本例中的 store all on swarmstore all on-premstore hybrid ics and on swarm
  3. 将 UrbanCode Deploy 代理添加到这些资源组中,然后添加这些组件。将一个代理添加到 store all on swarm 资源组,该代理被配置为与 Docker Swarm 交互,然后将所有 4 个应用程序组件添加到该代理中。
  4. 将两个代理添加到 store hybrid ics and on swarm 资源组,将 store/frontend 组件添加到与 ICS 交互的代理。
  5. 将剩余的 3 个组件添加到与 Docker Swarm 交互的代理中。 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

第 5 步. 创建 UrbanCode Deploy 应用程序

  1. 接下来,创建一个名为 Store Application 的 UrbanCode Deploy 应用程序,并将所有 4 个组件添加到其中。
  2. 另外,添加两个流程,这两个流程通过 UrbanCode Deploy Process Designer 创建和配置。第一个流程 Deploy 部署所有 4 个应用程序组件。 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  3. 第二个流程 Deploy store frontend only 仅部署前端组件。后一个流程很有用,因为这个组件会定期开发和重构。 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

第 6 步. 创建环境

  1. 还需要在应用程序中创建环境。可以将 UrbanCode Deploy 环境视为一组资源和配置信息,用于指导某种特定类型的应用程序部署。在本例中,创建了两个环境 Hybrid Deploy to ICS and On-prem Swarm for Store ApplicationDeploy to On-prem Swarm使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  2. 每个环境都拥有关联的资源组和配置信息。 store hybrid ics and on swarm 资源组与 Hybrid Deploy to ICS and On-prem Swarm for Store Application 环境有关联。 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  3. store all on swarm 资源组被添加到 Deploy to On-prem Swarm 环境中。 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  4. 在每个环境的 Configuration 选项卡下,包括在部署时输入各种应用程序组件的 Docker 和 ICS 设置的字段。在两种环境中,配置 3 个内部部署容器的各种设置。设置包括 Docker 端口映射、容器链接指令、DB2 和 MySQL 身份验证信息等。这些是按组件划分的 Docker Environment Run Options

    Deploy to On-prem Swarm 环境中,前端组件也采用这种方式进行配置,比如配置为 Docker 组件。但是,在 Hybrid Deploy to ICS and On-prem Swarm for Store Application 内,前端组件不是通过 Docker Environment Run Options 接收其配置,而是通过 ICS Environment Run Options

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  5. 两个环境之间的关键区别在 Resource Type 属性值上。对于混合环境,可将其设置为 ics 。对于内部部署环境,可将其设置为 docker 。这规定了与环境有关联的流程的准确执行路径,例如是从 Docker 注册表拉取并在本地运行,还是从 Docker 注册表拉取,标记并推送到 ICS,然后使用 ice-cli 工具在 ICS 上运行。 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  6. 前端组件的配置在每个环境中也稍有不同。

    对于 ICS,该组件被配置为绑定到 Bluemix Cloud Foundry (CF) 应用程序,以便能够访问通过 CF 应用程序提供的 Bluemix Secure Gateway 的信息。这使得 store/frontend 容器能够与内部部署的系统上的剩余组件容器通信,尤其是 store/backend_was 容器。

    对于 Docker,为前端组件提供了一个本地环境文件,该文件包含在 ICS 上运行时能够以编程方式获取的相同的 VCAP 网关信息。此文件存储在运行 UrbanCode Deploy 服务器和代理的主机或 VM 上,可在以下位置通过 Docker 卷提供给 UrbanCode Deploy 容器:

    /opt/urbancode/ibm-ucdagent/var/etc/vcap_services.env
  7. 在两种环境中,都为前端组件提供了 Secure Gateway 名称、该网关中的目标名称、Bluemix 用户 ID 和密码,以及要公开的端口。

    可以通过部署整个应用程序或只部署前端组件,从每个环境中运行各个流程。根据具体的环境,将前端部署在 ICS 上或内部。

    运行流程时,必须选择组件的版本以及部署组件的选项,即使它们的版本自上次部署以来没有发生变化。

第 7 步. 部署应用程序

您创建了两个 UrbanCode Deploy 环境:

  • 内部部署环境 :将前端和 3 个后端容器部署到内部部署的 Swarm。
  • 混合环境 :将前端容器部署到 Bluemix 中的 IBM Containers,将 3 个后端容器部署到内部部署的 Swarm。

要运行这些场景中的一个,可以首先运行以下共同步骤:

  1. 转到 store_frontend 应用程序目录。
    $ cd store_frontend/public/css
  2. 复制 colorLight.csscolorDark.css 来更改 custom.css
  3. 运行 Git commit。
    $ git commit -a -m "changed store color"
  4. Git 提交后触发器在 UrbanCode Build 内启动应用程序构建。
  5. 转到 UrbanCode Build 门户并查看构建状态。完成构建后,您将拥有一个新的 Docker 镜像,比如 1.0. n ,其中 n 是递增的构建版本编号。 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  6. 在 UrbanCode Deploy 门户中的 Component: store/frontend 页面上,检查 Version 列,确保导入了新的 1.0.n 构建版本。 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  7. 在 UrbanCode Deploy 中,转到 Store Application 的环境,根据以下小节中的描述来部署内部部署环境或混合环境。

使用 UrbanCode Deployment 执行内部部署

对于本示例,首先将所有容器部署到内部。

  1. 登录到您的 UrbanCode Deploy 门户并转到 Store Application 环境。
  2. 运行 Store:Deploy to On-prem Swarm 环境。 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...
  3. 选择它的 Deploy 流程。清除 Only Changed Versions 复选框,以便部署没有更新的后端容器。 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  4. 选择最新的 store/frontend 版本和 3 个后端容器。单击 OK使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  5. 显示了部署的状态和完成情况,如下所示: 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  6. 检查 Swarm Manager 以查看容器是否正在运行。

    点击查看代码清单

    关闭 [x]

    sanjay@dhe:~/swarm$ docker -H 192.168.56.30:3375 ps CONTAINER ID        IMAGE                                               COMMAND                CREATED             STATUS              PORTS                                                                                      NAMES e96ef9f6affe        dhe.cork.ie.ibm.com/store/store_frontend:1.0.109    "/usr/bin/supervisor   4 minutes ago       Up 3 minutes        22/tcp, 192.168.56.30:3000->3000/tcp                                                       vagrant-ubuntu-trusty-64/store_frontend                                    c8fd9c7b3247        dhe.cork.ie.ibm.com/store/backend_was:latest        "/opt/startup.sh"      4 minutes ago       Up 4 minutes        8879/tcp, 192.168.56.30:9060->9060/tcp, 9043/tcp, 9443/tcp, 192.168.56.30:9080->9080/tcp   vagrant-ubuntu-trusty-64/store_backend_was                                 1bb80b195645        dhe.cork.ie.ibm.com/store/mysql:latest              "/opt/startup.sh"      4 minutes ago       Up 4 minutes        22/tcp, 192.168.56.30:3306->3306/tcp, 192.168.56.30:32768->3000/tcp                        vagrant-ubuntu-trusty-64/store_backend_was/mysql,vagrant-ubuntu-trusty-64/store_mysql cffb66d21789        dhe.cork.ie.ibm.com/store/db2_expc_nonroot:memfix   "/opt/startup.sh"      5 minutes ago       Up 4 minutes        192.168.56.30:5000->5000/tcp                                                               vagrant-ubuntu-trusty-64/store_backend_was/db2,vagrant-ubuntu-trusty-64/store_db2_expc_nonroot
  7. 检查 store_backend_was 容器的日志,确认它已完成初始化且服务器正在运行。
    $ docker logs -f store_backend_was
  8. 转到 Store 前端 URL http://<host>:3000 来确认它正在运行。 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

使用 UrbanCode Deploy 的混合部署

现在所有容器都在内部部署的 swarm 中正常运行,接下来运行 Bluemix 中的 store_frontend 容器,将它连接到在内部运行的后端容器。

  1. 登录到您的 UrbanCode Deploy 门户,转到 Store Application 环境。
  2. 运行 Store:Hybrid Deploy to ICS and On-prem Swarm 环境。 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...
  3. 选择 Deploy store frontend only 流程并单击 Submit使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  4. 将应用程序部署到混合环境需要一个批准步骤,所以指定的批准人员必须批准该提交。 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  5. 提交批准结果后,部署将继续进行。新的 Docker 镜像已推送到 Bluemix 中的 IBM Container,当前运行的 store_frontend 容器已停止,使用新镜像启动了一个新 store_frontend 容器,并已将一个公共 IP 绑定到它。完成后,状态类似于下图。 使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

    点击查看大图

    关闭 [x]

    使用 IBM UrbanCode 将 Docker 容器部署到混合云中: 使用 IBM UrbanCode 将 Docker 容器部署到混合...

  6. 现在转到您的 Bluemix 用户界面,检查一个 store_frontend 容器是否在使用您新构建的 Docker 镜像版本运行。记下您的 store_frontend 容器的公共 IP。
  7. 转到 Store 前端 URL http://<host>:3000 来确认它正在运行。这个前端容器通过 Bluemix Secure Gateway 服务连接到在内部部署的 Docker Swarm 集群中运行的 store_backend_was 容器,该集群已在之前的内部部署场景中启动。

结束语

在这个由两部分组成的文章系列的第 2 部分中,您了解了如何将一个多层、多容器应用程序快速部署到内部部署的 Docker Swarm 集群和场外的云环境(比如 Bluemix 中的 IBM Containers)中。您使用了 IBM UrbanCode Deploy 的企业特性,以及 IBM 支持的 Docker Trusted Registry 产品作为 Docker 镜像的受信任的存储库。

您学习了如何将 UrbanCode 产品与 Docker Trusted Registry 集成,以及编排和自动化在典型的 DevOps 管道中将多个容器部署到多个云环境中的部署过程。您还了解了如何使用 Bluemix Secure Gateway 服务,将在 Bluemxi 中的 IBM Containers 中运行的应用程序安全地连接到内部部署的基础架构,获得使用其他大量 Bluemix 服务的潜在可能。

请通过发表评论,为这篇包含两部分的文章提供反馈。我们的目的是帮助客户在其企业云环境中最充分地利用 Docker 容器化!

正文到此结束
Loading...