本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
准备 Docker 映像以部署到 Elastic Beanstalk
本节介绍如何准备 Docker 映像,以便使用运行 AL2 或 AL2023 的 Docker 平台分支部署到 Elastic Beanstalk。您所需的配置文件取决于您的映像是本地映像、远程映像,以及您是否使用 Docker Compose。
注意
有关启动 Docker 环境的过程示例,请参阅 QuickStart 为 Docker 主题。
主题
在 Elastic Beanstalk 中使用 Docker Compose 管理映像
您可以选择使用 Docker Compose 在一个 YAML 文件中管理各种服务。要了解有关 Docker Compose 的更多信息,请参阅 Docker 网站上的 Why use Compose?
-
创建
docker-compose.yml。如果使用 Docker Compose 来通过 Elastic Beanstalk 管理应用程序,则需要此文件。如果您的所有部署都来自公共存储库中的映像,则不需要其他配置文件。如果您的部署的源映像位于私有存储库中,则需要进行一些额外配置。有关更多信息,请参阅 Using images from a private repository。有关docker-compose.yml文件的更多信息,请参阅 Docker 网站上的 Compose 文件参考。 -
Dockerfile是可选项。如果您需要 Elastic Beanstalk 来构建和运行本地自定义映像,请创建一个。有关Dockerfile的更多信息,请参阅 Docker 网站上的 Dockerfile 参考。 -
您可能需要创建一个
.zip文件。如果您仅使用Dockerfile文件来部署应用程序,则无需创建一个。如果使用其他配置文件,则 .zip 文件必须包含Dockerfile、docker-compose.yml文件、您的应用程序文件和任何应用程序文件依赖项。Dockerfile和docker-compose.yml必须位于 .zip 存档的根级或顶级。如果您使用 EB CLI 部署应用程序,它将为您创建一个 .zip 文件。
要了解有关 Docker Compose 以及如何安装它的更多信息,请参阅 Docker 网站 Docker Compose 概述
在 Elastic Beanstalk 中不使用 Docker Compose 管理映像
如果您没有使用 Docker Compose 来管理 Docker 映像,则需要配置一个 Dockerfile 和/或 Dockerrun.aws.json 文件。
-
创建
Dockerfile以使 Elastic Beanstalk 在本地构建并运行自定义映像。 -
创建一个用于将 Docker 映像从托管存储库部署到 Elastic Beanstalk 的
Dockerrun.aws.json v1文件。 -
您可能需要创建一个
.zip文件。如果您只使用其中一个文件(Dockerfile或Dockerrun.aws.json),则无需创建 .zip 文件。如果您同时使用这两个文件,则需要一个 .zip 文件。.zip 文件必须同时包含Dockerfile和Dockerrun.aws.json,以及包含您的应用程序文件和所有应用程序文件依赖项的文件。如果您使用 EB CLI 部署应用程序,它将为您创建一个.zip文件。
Dockerrun.aws.json v1 配置文件
Dockerrun.aws.json 文件描述如何将远程 Docker 映像部署为 Elastic Beanstalk 应用程序。此 JSON 文件特定于 Elastic Beanstalk。如果应用程序在托管存储库中提供的映像上运行,您可以在 Dockerrun.aws.json v1 文件中指定该映像并忽略 Dockerfile。
Dockerrun.aws.json 版本
AWSEBDockerrunVersion 参数指示 Dockerrun.aws.json 文件的版本。
-
Docker AL2 平台和 AL2023 平台使用以下版本的文件。
Dockerrun.aws.json v3— 使用 Docker Compose 的环境。
Dockerrun.aws.json v1— 不使用 Docker Compose 的环境。
-
在 Amazon Linux 2 上运行的 ECS 和在 AL2023 上运行的 ECS 使用
Dockerrun.aws.json v2文件。已退役的ECS-The 多容器 Docker 平台亚马逊 Linux AMI (AL1) 也使用了相同的版本。
Dockerrun.aws.json v1 文件的有效键和值包括以下操作:
- AWSEBDockerrunVersion
-
(必需)如果没有使用 Docker Compose 来管理映像,请指定版本号
1。 - 身份验证
-
(仅对私有存储库必需)指定存储
.dockercfg文件的 Amazon S3 对象。请参阅本章后面的使用私有存储库中的映像中的 映像存储库的身份验证。
- 映像
-
指定现有 Docker 存储库上的 Docker 基本映像,您将从其构建 Docker 容器。以 Docker Hub 上的镜像或其他站点
<organization>/<image name>的格式指定名称密钥<site>/<organization name>/<image name>的值。在
Dockerrun.aws.json文件中指定一个映像后,您的 Elastic Beanstalk 环境中的每个实例都运行docker pull来运行该映像。可以选择包含 Update 键。默认值为true,指示 Elastic Beanstalk 检查存储库,提取映像的所有更新并覆盖任何缓存的映像。使用
Dockerfile时,请勿在Dockerrun.aws.json文件中指定 Image 键。当Dockerfile中所述的映像存在时,Elastic Beanstalk 始终构建并使用该映像。 - 端口
-
(指定 Image 键时必需)列出要在 Docker 容器上公开的端口。Elastic Beanstalk 使用该ContainerPort值将 Docker 容器连接到在主机上运行的反向代理。
您可以指定多个容器端口,但 Elastic Beanstalk 只使用第一个端口。它只使用此端口将您的容器连接到主机的反向代理并路由来自公有 Internet 的请求。如果您使用的是 a
Dockerfile,则第一个ContainerPort值应与Dockerfile's EXPOSE 列表中的第一个条目相匹配。或者,您可以在中指定端口列表HostPort。HostPort条目指定ContainerPort值映射到的主机端口。如果您未指定HostPort值,则默认为该ContainerPort值。
{ "Image": { "Name": "image-name" }, "Ports": [ { "ContainerPort":8080, "HostPort":8000} ] } - 卷
-
将卷从 EC2 实例映射到 Docker 容器。指定要映射的一个或多个卷数组。
{ "Volumes": [ { "HostDirectory": "/path/inside/host", "ContainerDirectory": "/path/inside/container" } ] ... - 日志记录
-
指定应用程序将日志写入到的容器内目录。当您请求结尾日志或捆绑日志时,Elastic Beanstalk 会将此目录中的所有日志上传到 Amazon S3。如果您将日志轮换到此目录中名为
rotated的文件夹,则还可以将 Elastic Beanstalk 配置为将轮换的日志上传到 Amazon S3 以进行永久存储。有关更多信息,请参阅查看您的 Elastic Beanstalk 环境中的 Amazon EC2 实例的日志。 - 命令
-
指定要在容器中运行的命令。如果您指定 Entrypoint,Command 将作为参数添加至 Entrypoint。有关更多信息,请参阅 Docker 文档中的 CMD
。 - Entrypoint
-
指定要在容器启动时运行的默认命令。有关更多信息,请参阅 Docker 文档中的 ENTRYPOINT
。
以下代码段是演示单容器的 Dockerrun.aws.json 文件的语法的一个示例。
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "janedoe/image",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "1234"
}
],
"Volumes": [
{
"HostDirectory": "/var/app/mydb",
"ContainerDirectory": "/etc/mysql"
}
],
"Logging": "/var/log/nginx",
"Entrypoint": "/app/bin/myapp",
"Command": "--argument"
}>您可以仅向 Elastic Beanstalk 提供 Dockerrun.aws.json 文件,也可以提供包含 .zip 和 Dockerrun.aws.json 文件的 Dockerfile 存档。在提供这两个文件时,Dockerfile 描述 Docker 映像,Dockerrun.aws.json 文件提供其他部署信息,如本节后面所述。
注意
这两个文件必须位于 .zip 存档的根级或顶级。请不要从包含这些文件的目录生成存档。而是导航到该目录并在其中生成存档。
在提供这两个文件时,请不要在 Dockerrun.aws.json 文件中指定映像。Elastic Beanstalk 生成和使用 Dockerfile 中描述的映像,并忽略 Dockerrun.aws.json 文件中指定的映像。
使用 Dockerfile 构建自定义映像
如果您尚未在存储库中托管现有映像,则需要创建 Dockerfile。
以下代码段是一个 Dockerfile 示例。如果您按照 QuickStart 为 Docker 中的说明进行操作,则可以按编写内容上传此 Dockerfile。在您使用此 Dockerfile 时,Elastic Beanstalk 运行游戏 2048。
有关您可以包含在 Dockerfile 中的指令的更多信息,请参阅 Docker 网站上的 Dockerfile 参考
FROM ubuntu:12.04
RUN apt-get update
RUN apt-get install -y nginx zip curl
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN curl -o /usr/share/nginx/www/master.zip -L https://codeload.github.com/gabrielecirulli/2048/zip/master
RUN cd /usr/share/nginx/www/ && unzip master.zip && mv 2048-master/* . && rm -rf 2048-master master.zip
EXPOSE 80
CMD ["/usr/sbin/nginx", "-c", "/etc/nginx/nginx.conf"]
注意
您可以从单个 Dockerfile 运行多阶段构建来生成较小尺寸的映像,同时显著降低复杂性。有关更多信息,请参阅 Docker 文档网站上的使用多阶段构建