本文是一个基础指南的第 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 演示
观看演示
获取代码
ucdiceagent
和 ucddheagent
,并将它们连接到 UrbanCode Deploy 服务器。 ucdiceagent
上: $ pip install https://static-ice.ng.bluemix.net/icecli-3.0.zip -U
ucddheagent
上: DOCKER_HOST
环境变量设置为 Swarm 主机和端口。例如: tcp://<Docker Swarm host>:<Docker Swarm port>
。 要使 UrbanCode Deploy 能够正确地与 ICS 和 Docker 容器协同运行,必须在服务器上安装 Docker 和 ICS UrbanCode Deploy 插件。
您现在可以为应用程序配置 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 注册表中,但它们只能部署到本地服务中。
点击查看大图
关闭 [x]
Docker Importer
,因为它们都位于 Docker 注册表中,而且可以从该注册表中拉取它们。 Docker Registry是运行相关的 Docker 注册表的 FQDN。 Docker Image Name 是注册表内的镜像的名称。
点击查看大图
关闭 [x]
store/frontend
组件稍微不同。这种类型的组件必须配置与 ICS 相关的信息。这包括 Bluemix 用户 ID 和密码、空间、组织名称、容器在 ICS 注册表中使用的镜像名称,以及在 ICS 上启动容器时使用的容器名称。 点击查看大图
关闭 [x]
点击查看大图
关闭 [x]
备注:
store/frontend
组件被配置为在新版本出现时运行一个部署流程。还可以使用 UrbanCode Deploy Calendar 来计划这些流程。
在配置组件并可以使用它们之后,可以配置 UrbanCode Deploy 资源。
all
的顶级资源组。 all
下,可以创建更多的资源组,比如本例中的 store all on swarm
、 store all on-prem
和 store hybrid ics and on swarm
。 store all on swarm
资源组,该代理被配置为与 Docker Swarm 交互,然后将所有 4 个应用程序组件添加到该代理中。 store hybrid ics and on swarm
资源组,将 store/frontend
组件添加到与 ICS 交互的代理。 点击查看大图
关闭 [x]
Deploy
部署所有 4 个应用程序组件。 点击查看大图
关闭 [x]
Deploy store frontend only
仅部署前端组件。后一个流程很有用,因为这个组件会定期开发和重构。 点击查看大图
关闭 [x]
Hybrid Deploy to ICS and On-prem Swarm for Store Application
和 Deploy to On-prem Swarm
。 点击查看大图
关闭 [x]
store hybrid ics and on swarm
资源组与 Hybrid Deploy to ICS and On-prem Swarm for Store Application
环境有关联。 点击查看大图
关闭 [x]
store all on swarm
资源组被添加到 Deploy to On-prem Swarm
环境中。 点击查看大图
关闭 [x]
在 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 。
点击查看大图
关闭 [x]
ics
。对于内部部署环境,可将其设置为 docker
。这规定了与环境有关联的流程的准确执行路径,例如是从 Docker 注册表拉取并在本地运行,还是从 Docker 注册表拉取,标记并推送到 ICS,然后使用 ice-cli 工具在 ICS 上运行。 点击查看大图
关闭 [x]
前端组件的配置在每个环境中也稍有不同。
对于 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
在两种环境中,都为前端组件提供了 Secure Gateway 名称、该网关中的目标名称、Bluemix 用户 ID 和密码,以及要公开的端口。
可以通过部署整个应用程序或只部署前端组件,从每个环境中运行各个流程。根据具体的环境,将前端部署在 ICS 上或内部。
运行流程时,必须选择组件的版本以及部署组件的选项,即使它们的版本自上次部署以来没有发生变化。
您创建了两个 UrbanCode Deploy 环境:
要运行这些场景中的一个,可以首先运行以下共同步骤:
store_frontend
应用程序目录。 $ cd store_frontend/public/css
colorLight.css
或 colorDark.css
来更改 custom.css
。 $ git commit -a -m "changed store color"
点击查看大图
关闭 [x]
点击查看大图
关闭 [x]
点击查看大图
关闭 [x]
对于本示例,首先将所有容器部署到内部。
Deploy
流程。清除 Only Changed Versions 复选框,以便部署没有更新的后端容器。 点击查看大图
关闭 [x]
store/frontend
版本和 3 个后端容器。单击 OK 。 点击查看大图
关闭 [x]
点击查看大图
关闭 [x]
点击查看代码清单
关闭 [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
store_backend_was
容器的日志,确认它已完成初始化且服务器正在运行。 $ docker logs -f store_backend_was
http://<host>:3000
来确认它正在运行。 点击查看大图
关闭 [x]
现在所有容器都在内部部署的 swarm 中正常运行,接下来运行 Bluemix 中的 store_frontend
容器,将它连接到在内部运行的后端容器。
Deploy store frontend only
流程并单击 Submit 。 点击查看大图
关闭 [x]
点击查看大图
关闭 [x]
点击查看大图
关闭 [x]
store_frontend
容器已停止,使用新镜像启动了一个新 store_frontend
容器,并已将一个公共 IP 绑定到它。完成后,状态类似于下图。 点击查看大图
关闭 [x]
store_frontend
容器是否在使用您新构建的 Docker 镜像版本运行。记下您的 store_frontend
容器的公共 IP。 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 容器化!