Elastic Beanstalk 上预配置的 Docker GlassFish 容器 - AWS Elastic Beanstalk

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Elastic Beanstalk 上预配置的 Docker GlassFish 容器

注意

2022 年 7 月 18 日,Elastic Beanstalk 将所有基于亚马逊 Linux () 的平台分支的状态设置为停用。AMI AL1有关迁移到当前且完全受支持的 Amazon Linux 2023 平台分支的更多信息,请参阅 将 Elastic Beanstalk Linux 应用程序迁移到 Amazon Linux 2023 或 Amazon Linux 2

不再支持在亚马逊 Linux AMI (AL1) 上运行的预配置 Docker GlassFish 平台分支。要将您的 GlassFish 应用程序迁移到支持的亚马逊 Linux 2023 平台,请将您的应用程序代码部署 GlassFish 到亚马逊 Linux 2023 Docker 镜像。有关更多信息,请参阅以下主题:将 GlassFish 应用程序部署到 Docker 平台:2023 年亚马逊 Linux 的迁移之路

本部分介绍如何在本地开发示例应用程序,然后使用预配置的 Docker 容器将应用程序部署到 Elastic Beanstalk。

设置本地开发环境

在本演练中,我们使用了一个 GlassFish 示例应用程序。

设置环境
  1. 为示例应用程序创建新文件夹。

    ~$ mkdir eb-preconf-example ~$ cd eb-preconf-example
  2. 将示例应用程序代码下载到新文件夹。

    ~$ wget https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/samples/docker-glassfish-v1.zip ~$ unzip docker-glassfish-v1.zip ~$ rm docker-glassfish-v1.zip

在本地开发和测试

开发示例 GlassFish 应用程序
  1. Dockerfile 添加到应用程序的根目录文件夹。在文件中,指定用于运行本地预配置的 AWS Elastic Beanstalk Docker 容器的 Docker 基础镜像。稍后你将把你的应用程序部署到 Elastic Beanstal GlassFish k 预配置的 Docker 平台版本。选择此平台版本使用的 Docker 基本映像。要了解此平台版本的当前 Docker 镜像的更多信息,请参阅 AWS Elastic Beanstalk 平台指南中的 AWS Elastic Beanstalk 支持的平台页面的预配置 Docker 部分。

    例 ~/E/b-preconf-exampleDockerfile
    # For Glassfish 5.0 Java 8 FROM amazon/aws-eb-glassfish:5.0-al-onbuild-2.11.1

    有关使用 Dockerfile 的更多信息,请参阅准备你的 Docker 镜像以部署到 Elastic Beanstalk

  2. 构建 Docker 映像。

    ~/eb-preconf-example$ docker build -t my-app-image .
  3. 从该映像运行 Docker 容器。

    注意

    必须包含 -p 标记才能将容器中的端口 8080 映射到 localhost 端口 3000。Elastic Beanstalk Docker 容器始终在容器上的端口 8080 上公开应用程序。-it 标志将映像作为交互式进程运行。当容器存在时,--rm 标志将清理容器文件系统。您可以选择包含 -d 标志以将映像作为守护程序运行。

    $ docker run -it --rm -p 3000:8080 my-app-image
  4. 要查看示例应用程序,请在 Web 浏览器中键URL入以下内容。

    http://localhost:3000
    在 Web 浏览器中显示的 GlassFish 示例应用程序

部署到 Elastic Beanstalk

在测试应用程序后,可随时将其部署到 Elastic Beanstalk。

将应用程序部署到 Elastic Beanstalk
  1. 在应用程序的根文件夹中,将 Dockerfile 重命名为 Dockerfile.local。Elastic Beanstalk 需要执行此步骤,才能Dockerfile使用包含正确说明的 Elastic Beanstalk 在 Elastic Beanstalk 环境中的每个亚马逊实例上构建自定义 Docker 镜像。EC2

    注意

    如果您的 Dockerfile 包含修改平台版本的基础 Docker 映像的指令,则无需执行此步骤。如果您的 Dockerfile 仅包含用来指定从中构建容器的基本映像的 Dockerfile 行,则完全无需使用 FROM。在这种情况下,Dockerfile 是冗余的。

  2. 创建应用程序源包。

    ~/eb-preconf-example$ zip myapp.zip -r *
  3. 使用以下预配置链接打开 Elastic Beanstalk 控制台:console.aws.amazon.com/elasticbeanstalk/home#/?newApplication applicationName=教程& = environmentType LoadBalanced

  4. 对于 Platform (平台),在 Preconfigured – Docker (预配置 – Docker) 下,选择 Glassfish

  5. 对于 Application code (应用程序节点),选择 Upload your code (上传您的节点),然后选择 Upload (上传)

  6. 选择 Local file (本地文件),再选择 Browse (浏览),然后打开您刚刚创建的应用程序源包。

  7. 选择上传

  8. 选择复查并启动

  9. 查看可用设置并选择 Create app (创建应用程序)

  10. 创建环境后,您可以查看已部署的应用程序。选择显示URL在控制台仪表板顶部的环境。

将 GlassFish 应用程序部署到 Docker 平台:2023 年亚马逊 Linux 的迁移之路

本教程的目标是为使用预配置的 Docker GlassFish 平台(基于亚马逊 LinuxAMI)的客户提供向亚马逊 Linux 2023 的迁移路径。您可以通过部署 GlassFish 将 GlassFish 应用程序迁移到亚马逊 Linux 2023,将应用程序代码迁移到亚马逊 Linux 2023 Docker 镜像。

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

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

  • 简单 — 提供您的 GlassFish 应用程序源代码,让 Elastic Beanstalk 在配置环境的过程中构建和运行 Docker 映像。这很容易设置,但代价是增加实例预置时间。

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

先决条件

本教程假设你对 Elastic Beanstalk 的基本操作、Elastic Beanstalk 命令行接口 (EB) 和 Docker 有所了解。CLI如果尚不了解,请按照Elastic Beanstalk 入门中的说明操作以启动您的第一个 Elastic Beanstalk 环境。本教程使用 EB CLI,但您也可以使用 Elastic Beanstalk 控制台创建环境和上传应用程序。

要完成本教程,您需要做以下 Docker 组件:

  • 在本地安装有效的 Docker。有关更多信息,请参阅 Docker 文档网站上的获取 Docker

  • 访问 Docker Hub。您需要创建一个 Docker ID 才能访问 Docker Hub。有关更多信息,请参阅 Docker 文档网站上的共享应用程序

要了解有关在 Elastic Beanstalk 平台上配置 Docker 环境的更多信息,请参阅同一章中的准备你的 Docker 镜像以部署到 Elastic Beanstalk

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

这是部署 GlassFish 应用程序的简便方法。提供您的应用程序源代码以及本教程中包含的 Dockerfile。Elastic Beanstalk 会生成一个 Docker 镜像,其中包含你的应用程序和软件堆栈。 GlassFish 然后,Elastic Beanstalk 在环境实例上运行该映像。

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

使用示例 GlassFish 应用程序启动环境
  1. 下载示例 docker-glassfish-al2-v1.zip,然后将 .zip 文件展开到开发环境的目录中。

    ~$ curl https://docs.aws.amazon.com/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 映像。

  • 您将使用本地安装的 Docker 中的 Docker 命令以及 Docker Hub 凭据。有关更多信息,请参阅本主题前面的 “先决条件” 部分。

使用预构建的 GlassFish 应用程序 Docker 镜像启动环境
  1. 下载并展开示例 docker-glassfish-al2-v1.zip,如前面的简单示例所示。如果您已完成该示例,则可以使用已有的目录。

  2. 构建一个 Docker 映像并将其推送到 Docker Hub。输入你的 Docker ID docker-id 登录 Docker Hub。

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

    在推送映像之前,您可能需要运行 docker login。如果您运行不带参数的命令,系统将提示您输入 Docker Hub 凭据。

  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