将 GlassFish 应用程序部署到 Docker 平台:迁移到 Amazon Linux 2 的路径 - AWS Elastic Beanstalk
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 GlassFish 应用程序部署到 Docker 平台:迁移到 Amazon Linux 2 的路径

本教程的目标是为使用预配置 Docker GlassFish 平台(基于 Amazon Linux AMI)的客户提供迁移到 Amazon Linux 2 的路径。可以通过将 GlassFish 和您的应用程序代码部署到 Amazon Linux 2 Docker 映像,将 GlassFish 应用程序迁移到 Amazon Linux 2。

本教程指导您使用 AWS Elastic Beanstalk Docker 平台将基于 Java EE GlassFish 应用程序服务器的应用程序部署到 Elastic Beanstalk 环境中。

我们演示两种构建 Docker 映像的方法:

  • 简单 – 提供您的 GlassFish 应用程序源代码,并让 Elastic Beanstalk 构建和运行 Docker 映像以作为预置环境的一部分。这很容易设置,但代价是增加实例预置时间。

  • 高级 – 构建包含应用程序代码和依赖关系的自定义 Docker 映像,并将其提供给 Elastic Beanstalk 以在您的环境中使用。这种方法的参与度稍高一些,并减少了环境中实例的预置时间。

先决条件

本教程假设您对基本 Elastic Beanstalk 操作、使用 Elastic Beanstalk 命令行界面 (EB CLI) 和 Docker 有一定了解。要完成本教程,您需要在本地安装的有效 Docker。有关安装 Docker 的更多信息,请参阅 Docker 安装指南

如果尚不了解,请按照开始使用 Elastic Beanstalk 中的说明启动您的第一个 Elastic Beanstalk 环境。本教程使用 EB CLI,但您也可以使用 Elastic Beanstalk 控制台创建环境并上传应用程序。如需了解有关配置 Docker 环境的详细信息,请参阅 Docker 配置

简单示例:提供您的应用程序代码

这是一种部署 GlassFish 应用程序的简单方法。您可以将应用程序源代码与本教程中包含的 Dockerfile 一起提供。 Elastic Beanstalk 构建包含您的应用程序和 GlassFish 软件堆栈的 Docker 映像。然后,Elastic Beanstalk 在环境实例上运行映像。

此方法的一个问题是,无论 Elastic Beanstalk 何时为您的环境创建实例,都会在本地构建 Docker 映像。映像构建会增加实例预置时间。这种影响不限于初始环境创建过程 — 它也发生在扩展操作期间。

使用示例 GlassFish 应用程序启动环境

  1. 下载示例 docker-glassfish-al2-v1.zip,然后将 .zip 文件展开到开发环境的目录中。

    ~$ curl https://docs.amazonaws.cn/elasticbeanstalk/latest/dg/samples/docker-glassfish-al2-v1.zip --output docker-glassfish-al2-v1.zip ~$ mkdir glassfish-example ~$ cd glassfish-example ~/glassfish-example$ unzip ../docker-glassfish-al2-v1.zip

    您的目录结构应如下所示。

    ~/glassfish-example |-- Dockerfile |-- Dockerrun.aws.json |-- glassfish-start.sh |-- index.jsp |-- META-INF | |-- LICENSE.txt | |-- MANIFEST.MF | `-- NOTICE.txt |-- robots.txt `-- WEB-INF `-- web.xml

    以下文件是在环境中构建和运行 Docker 容器的关键:

    • Dockerfile – 提供 Docker 用于构建具有应用程序和所需依赖关系的映像的说明。

    • glassfish-start.sh – Docker 映像运行以启动应用程序的 Shell 脚本。

    • Dockerrun.aws.json – 提供日志记录密钥,以便在日志文件请求中包含 GlassFish 应用程序服务器日志。如果您对 GlassFish 日志不感兴趣,可以忽略此文件。

  2. 配置本地目录以部署到 Elastic Beanstalk。

    ~/glassfish-example$ eb init -p docker glassfish-example
  3. (可选)使用 eb local run 命令在本地生成并运行您的容器。

    ~/glassfish-example$ eb local run --port 8080
    注意

    要了解有关 eb local 命令的更多信息,请参阅 eb local。Windows 中不支持此命令。或者,您也可以使用 docker builddocker run 命令生成并运行您的容器。有关更多信息,请参阅 Docker 文档

  4. (可选)当您的容器正在运行时,可使用 eb local open 命令在 Web 浏览器中查看您的应用程序。也可以在 Web 浏览器中打开 http://localhost:8080/

    ~/glassfish-example$ eb local open
  5. 使用 eb create 命令创建环境并部署应用程序。

    ~/glassfish-example$ eb create glassfish-example-env
  6. 启动环境后,使用 eb open 命令在 Web 浏览器中查看它。

    ~/glassfish-example$ eb open

完成使用该示例后,终止环境并删除相关资源。

~/glassfish-example$ eb terminate --all

高级示例:提供预构建的 Docker 映像

这是部署 GlassFish 应用程序的更高级方法。基于第一个示例,您创建一个包含应用程序代码和 GlassFish 软件堆栈的 Docker 映像,然后将其推送到 Docker Hub。完成此一次性步骤后,您可以根据自定义映像启动 Elastic Beanstalk 环境。

当您启动环境并提供 Docker 映像时,环境中的实例会直接下载并使用此映像,而不需要构建 Docker 映像。因此,实例预置时间会减少。

注意

以下步骤将创建一个公开可用的 Docker 映像。

使用预构建的 GlassFish 应用程序 Docker 映像启动环境

  1. 下载并展开示例 docker-glassfish-al2-v1.zip,如前面的简单示例所示。如果您已完成该示例,则可以使用已有的目录。

  2. 构建一个 Docker 映像并将其推送到 Docker Hub。

    ~/glassfish-example$ docker build -t docker-username/beanstalk-glassfish-example:latest . ~/glassfish-example$ docker push docker-username/beanstalk-glassfish-example:latest
    注意

    在推送映像之前,您可能需要运行 docker login

  3. 创建其他目录。

    ~$ mkdir glassfish-prebuilt ~$ cd glassfish-prebuilt
  4. 将以下示例复制到名为 Dockerrun.aws.json 的文件中。

    ~/glassfish-prebuilt/Dockerrun.aws.json

    { "AWSEBDockerrunVersion": "1", "Image": { "Name": "docker-username/beanstalk-glassfish-example" }, "Ports": [ { "ContainerPort": 8080, "HostPort": 8080 } ], "Logging": "/usr/local/glassfish5/glassfish/domains/domain1/logs" }
  5. 配置本地目录以部署到 Elastic Beanstalk。

    ~/glassfish-prebuilt$ eb init -p docker glassfish-prebuilt$
  6. (可选)使用 eb local run 命令在本地运行容器。

    ~/glassfish-prebuilt$ eb local run --port 8080
  7. (可选)当您的容器正在运行时,可使用 eb local open 命令在 Web 浏览器中查看您的应用程序。也可以在 Web 浏览器中打开 http://localhost:8080/

    ~/glassfish-prebuilt$ eb local open
  8. 使用 eb create 命令创建环境并部署 Docker 映像。

    ~/glassfish-prebuilt$ eb create glassfish-prebuilt-env
  9. 启动环境后,使用 eb open 命令在 Web 浏览器中查看它。

    ~/glassfish-prebuilt$ eb open

完成使用该示例后,终止环境并删除相关资源。

~/glassfish-prebuilt$ eb terminate --all