转载

在 PureApplication System 中使用 Docker,第 2 部分: 采用某种模式定制 Docker 镜像并使用 Dock...

简介

本系列的第 1 部分 介绍了如何创建和保护私有 Docker 注册表,然后使用注册表镜像部署 IBM PureApplication System 中的模式。第 2 部分(本文)将演示如何扩展 WebSphere Liberty 容器,以及如何将 Docker Compose 模板转换成一种模式。

如果您需要为 Docker 镜像指定更多的数据,或扩展它的配置,那么您可以添加一个应用程序存档。在本教程中,您将学习如何使用三种方法来定制一个 Docker 镜像:

  • 使用脚本包将一个 WAR 或 EAR 文件上传到 WebSphere Liberty 容器的 dropins 目录
  • 用应用程序扩展 Liberty 镜像,并将它推送到一个 Docker 注册表
  • 将应用程序存档放入一个数据卷容器,并与 Liberty 容器共享该卷

部署一个基础 Liberty 容器

所有情景都假设在 PureApplication System 中提供了一个基础 Liberty 容器。请使用以下步骤创建容器:

  1. 创建一种模式。
    • 单击 Patterns > Virtual System Patterns ,导航到 Patterns 页面。
    • 单击 Create New 并为 Name 字段指定一个值。
    • 在 Pattern Editor 页面中,添加一个镜像组件和一个 Docker Container 软件组件。
  2. 单击 Docker Container 并编辑其属性,如下所示:
    • Image 的值指定为 wasdev/websphere-liberty:latest
    • 添加环境变量 LICENSE= accept
  3. 保存和部署模式。

场景 A:使用脚本包上传 Liberty 容器的一个存档

在该场景中,您可以创建一个脚本包,其中包含一个应用程序存档,然后启动一个 Liberty Docker 容器,从脚本包读取存档。您不需要创建一个 Docker 镜像,只需要创建一个脚本包。WAR 文件和 Liberty 容器彼此是松散耦合的,但与 PureApplication System 紧密耦合。

第 1 步:创建一个脚本包

在此步骤中,将创建一个包含应用程序存档的脚本包。该应用程序存档必须在 Liberty 容器文件夹 opt/ibm/wlp/usr/servers/defaultServer/dropins 中。

  1. 创建一个脚本包项目。图 1 显示了一个示例项目。

    图 1. Rational Application Developer 中的脚本包的视图

    在 PureApplication System 中使用 Docker,第 2 部分: 采用某种模式定制 Docker 镜像并使用 Dock...
  2. 编辑 cbscript.json 文件,如图 2 所示。指定名称、位置的值,以及要运行的命令。在本例中, Name 字段的值是 UploadApplicationLocation 字段是 /tmp/UploadApplication ,而 Command 字段是 /tmp/UploadApplication/run.sh 。dest 键的默认值是 /tmp/myapp

    图 2. 编辑 cbscript.json 文件。

    在 PureApplication System 中使用 Docker,第 2 部分: 采用某种模式定制 Docker 镜像并使用 Dock...
  3. 编辑 run.sh 文件,将 WAR 文件复制到它的目标位置。$dest 是在脚本包的 vbscript.json 文件中定义的参数。

    图 3. run.sh 中的示例代码

    在 PureApplication System 中使用 Docker,第 2 部分: 采用某种模式定制 Docker 镜像并使用 Dock...
  4. 将脚本包上传到 PureApplication System。

第 2 步:创建模式

在这一步中,将创建一种模式,其中包含镜像组件、软件组件和脚本包。

  1. 创建一种模式。
    • 单击 Patterns > Virtual System Patterns ,导航到 Patterns 页面。
    • 单击 Create New 并在 Name 字段中为该模式指定一个名称。
    • 在 Pattern Editor 页面中,添加一个镜像组件(OS 节点)、一个 Docker Containers 软件组件,以及一个脚本包 UploadApplicationToLiberty 。图 4 显示了已完成的模式。

    图 4. 扩展 Liberty 容器的已完成模式

    在 PureApplication System 中使用 Docker,第 2 部分: 采用某种模式定制 Docker 镜像并使用 Dock...
  2. 选中 Liberty 软件组件并编辑其属性:
    • Image 的值指定为 wasdev/websphere-liberty:latest
    • 添加环境变量 LICENSE= accept
    • 将卷 /tmp/myapp 添加到目录 /opt/ibm/wlp/usr/servers/defaultServer/dropins 中。

    图 5. 扩展 Liberty 容器的容器属性

    在 PureApplication System 中使用 Docker,第 2 部分: 采用某种模式定制 Docker 镜像并使用 Dock...
  3. 编辑脚本包。将 dest 字段设置为 /tmp/myapp ,如图 6 所示。

    图 6. 脚本包属性

    在 PureApplication System 中使用 Docker,第 2 部分: 采用某种模式定制 Docker 镜像并使用 Dock...

第 3 步:保存和部署模式

部署模式,然后在 http://< ip_addr >:9080/ServletApp 访问应用程序。

场景 B:用应用程序扩展 Liberty 镜像,并将它推送到 Docker 注册表

在该场景中,通过扩展默认的 Liberty 镜像,给它增加一个 WAR 文件,然后将其推送到注册表,创建一个新的 Docker 镜像。WAR 文件和 Liberty 容器紧密耦合,但可以在任何 Docker 环境中使用。

  1. 创建一个 Dockerfile,如清单 1 所示。将您的应用程序的 WAR 文件放在与 Dockerfile 相同的文件夹中。在本例中, ADD 命令将 myApp.war 文件添加到 Docker 镜像。

    清单 1. 场景 B 的示例 Dockerfile

    FROM wasdev/websphere-liberty ADD myApp.war /opt/ibm/wlp/usr/servers/defaultServer/dropins/ENV LICENSE accept
  2. 构建 Dockerfile 并将 Docker 镜像推送到您的注册表。
    docker build -t app-image docker tag app-image <registry>/sample/app-image:8.5 docker push <registry>/sample/app-image:8.5
  3. 创建一个使用新镜像的模式。图 7 显示了已完成的镜像。

    图 7. 使用新镜像的 Liberty 模式

    在 PureApplication System 中使用 Docker,第 2 部分: 采用某种模式定制 Docker 镜像并使用 Dock...
  4. 保存并部署该模式。

场景 C:将一个存档放在与 Liberty 容器共享其卷的数据卷容器中

将一个应用程序存档放在一个单独的数据卷容器中,使它能够与其他容器共享一个存档。在该场景中,创建一个新的 Docker 镜像,但不需要扩展 Liberty 镜像。WAR 文件和 Liberty 容器是松散耦合的,但可以在任何 Docker 环境中使用。

  1. 创建一个包含应用程序 WAR 文件的数据镜像。清单 2 显示了一个示例 Dockerfile。将 ServletApp.war 文件复制到包含 Dockerfile 的文件夹。

    清单 2. 场景 C 的示例 Dockerfile

    From busybox:latest ADD ServletApp.war /opt/ibm/wlp/usr/servers/defaultServer/dropins/ServletApp.war VOLUME ["/opt/ibm/wlp/usr/servers/defaultServer/dropins"]
  2. 构建镜像并将它推送到 Docker 注册表。
    docker build -t app-data-image docker tag app-data-image <registry>/sample/app-data-image:ServletApp docker push app-data-image <registry>/sample/app-data-image:ServletApp
  3. 创建模式。将数据镜像和 Liberty 镜像放在同一个 OS 节点上。图 8 显示了包含新镜像的完整模式。

    图 8. 用新镜像扩展模式

    在 PureApplication System 中使用 Docker,第 2 部分: 采用某种模式定制 Docker 镜像并使用 Dock...
  4. 编辑模式。在 Liberty 容器的属性窗格中,展开 Advanced options 并编辑 Data Volume Container(s) 字段,输入数据容器的名称,如图 9 所示。在本例中,名称是 Data Container。

    图 9. 编辑 Data Volume Container(s) 字段

    在 PureApplication System 中使用 Docker,第 2 部分: 采用某种模式定制 Docker 镜像并使用 Dock...
  5. 保存并部署该模式。

将 Docker Compose 模板文件转换为虚拟系统模式

Docker Compose(前身为 Fig)是一个命令行界面 (CLI),用于开发和运行在多个容器中的 Docker 应用程序。您可以使用一个 Compose 文件来定义应用程序并配置其服务。然后,使用一个命令,根据您的配置创建所有服务并启动它们。Compose 适用于开发和测试环境,还适用于小型生产部署。

第 1 步:创建一个 Docker Compose 模板文件

在 .yml 文件中的 YAML 规则中描述 Docker Compose 模板。YAML 是一个数据序列化语言。清单 3 显示了一个 WordPress 应用程序的示例文件 docker-compose.yml。Docker Compose 不支持下载镜像。因此,您必须手动将镜像复制到 PureApplication System 中的私有 Docker 注册表。

清单 3. WordPress 的示例 Docker Compose 文件

mysql:   image: orchardup/mysql:latest   ports:  - "3306:3306"   environment:  MYSQL_DATABASE:wordpressd web:   image: fig_test/wordpress:3.8   ports:  - "8000:8000"   links:  - db:mysql

第 2 步:将模板转换为模式

PureApplication 提供一个 CLI 将现有的 Docker Compose 模板文件转换为一个虚拟系统模式。语法是:

bin/pure -h <server> -u <user> -p <password> -f ./samples/FigToPattern.py -–file <template file> --name <patternname>

pure 命令将模板文件转换为具有指定名称的模式,并在 PureApplication System 中安装这个模式。FigToPattern.py 是转换工具。以下示例命令将模板转换为模式。命令的输出被发送到 appmodel.json 文件。

bin/pure -h 9.123.123.12 -u myUserID -p myPassword -f ./samples/FigToPattern.py / -–file /tmp/fig-web.yml -–name "Fig Sample Pattern"

第 3 步:在 Pattern Builder 中修改虚拟系统模式的属性

由 Docker Compose 生成的模式没有指定使用哪个基础 OS 镜像来进行虚拟机部署。它使用了在 Cloud > Default Deploy Settings 中选定的默认镜像,如图 10 所示。如果没有默认镜像,请在 Pattern Builder 中打开模式并选择一个镜像。在部署模式之前,还必须为虚拟机节点设置 password 字段。

图 10. 为部署一种模式而修改默认设置

在 PureApplication System 中使用 Docker,第 2 部分: 采用某种模式定制 Docker 镜像并使用 Dock...
原文  http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1603_zhang2-trs/1603_feng.html?ca=drs-
正文到此结束
Loading...