

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

# 在 Elastic Beanstalk 中使用 ECS 托管 Docker 平台分支
<a name="create_deploy_docker_ecs"></a>

本主题提供有关适用于 Amazon Linux 2 和 Amazon Linux 2023 的 Elastic Beanstalk ECS 托管 Docker 平台分支的信息。本主题还提供特定于 Docker ECS 托管平台的配置信息。

**已开启从多容器 Docker 迁移 AL1**  
[2022 年 7 月 18 日，](https://docs.amazonaws.cn/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)**Elastic Beanstalk 将所有基于亚马逊 Linux AMI AL1 () 的平台分支的状态设置为停用。**尽管本章节提供此已停用平台的配置信息，但我们强烈建议您迁移到最新的受支持的平台分支。如果您目前正在使用在平台分支*上运行的停用多容器 Docker，则可以迁移到在 AL1*平台分支*上 AL2023运行的最新 ECS*。最新的平台分支支持已停产平台分支的所有功能。源代码无需更改。有关更多信息，请参阅 [在亚马逊 Linux 2023 上将你的 Elastic Beanstalk 应用程序从 ECS 托管的多容器 Docker AL1 迁移到 ECS](migrate-to-ec2-AL2-platform.md)。

## ECS 托管 Docker 平台概述
<a name="create_deploy_docker_ecs_platform"></a>

Elastic Beanstalk 使用 Amazon Elastic Container Service (Amazon ECS) 来协调 ECS 托管式 Docker 环境中的容器部署。Amazon ECS 提供工具来管理运行 Docker 容器的实例的集群。Elastic Beanstalk 处理 Amazon ECS 任务，包括集群创建、任务定义和执行。环境中的每个实例都运行相同的容器组，如 `Dockerrun.aws.json` v2 文件所定义。为了充分利用 Docker，Elastic Beanstalk 允许您创建 Amazon EC2 实例可在其中并排运行多个 Docker 容器的环境。

下图显示了一个示例 Elastic Beanstalk 环境，该环境配置有三个在 Auto Scaling 组中的每个 Amazon EC2 实例上运行的 Docker 容器：

![\[Elastic Beanstalk environment with load balancer, auto scaling group, and containerized tasks.\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/aeb-multicontainer-docker-example.png)


## 由 Elastic Beanstalk 创建的 Amazon ECS 资源
<a name="create_deploy_docker_ecs_resources"></a>

当您使用 ECS 托管的 Docker 平台创建环境时，Elastic Beanstalk 会在构建环境的同时自动创建并配置多个 Amazon Elastic Container Service 资源。在此过程中，它会在每个 Amazon EC2 实例上创建所需的容器。
+ **Amazon ECS 集群** – Amazon ECS 中的容器实例被组成集群。与 Elastic Beanstalk 一起使用时，始终为每个 ECS 托管式 Docker 环境创建一个集群。ECS 集群还包含自动扩缩组容量提供程序和其他资源。
+ **Amazon ECS 任务定义** – Elastic Beanstalk 使用您项目中的 `Dockerrun.aws.json` v2 生成用于在环境中配置容器实例的 Amazon ECS 任务定义。
+ **Amazon ECS 任务** – Elastic Beanstalk 与 Amazon ECS 进行通信以在环境中的每个实例上运行一个任务，从而协调容器部署。在可扩展的环境中，只要将一个实例添加到集群中，Elastic Beanstalk 就会启动一个新任务。
+ **Amazon ECS 容器代理** – 代理在环境中实例上的 Docker 容器中运行。该代理轮询 Amazon ECS 服务并等待任务运行。
+ **Amazon ECS 数据卷**：除了您在 `Dockerrun.aws.json` v2 中定义的卷之外，Elastic Beanstalk 在任务定义中插入卷定义，以方便日志收集。

  Elastic Beanstalk 在 `/var/log/containers/containername` 处的容器实例上创建日志卷（为每个容器创建一个日志卷）。这些卷将命名为 `awseb-logs-containername` 并提供给要挂载的容器。请参阅 [容器定义格式](create_deploy_docker_v2config.md#create_deploy_docker_v2config_dockerrun_format) 以了解有关如何装载容器的详细信息。

有关 Amazon ECS 资源的更多信息，请参阅《[Amazon Elastic Container Service 开发人员指南](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/Welcome.html)》。

## `Dockerrun.aws.json` v2 文件
<a name="create_deploy_docker_ecs_dockerrun"></a>

容器实例需要一个名为 `Dockerrun.aws.json` 的配置文件。*容器实例*是指在 Elastic Beanstalk 环境中运行 ECS 托管 Docker 的 Amazon EC2 实例。此文件特定于 Elastic Beanstalk，可以单独使用，也可以与[源包](applications-sourcebundle.md)中的源代码和内容结合使用，以在 Docker 平台上创建环境。

**注意**  
`Dockerrun.aws.json` 版本 2 格式增加了对每个 Amazon EC2 实例对应多个容器的支持，并且只能与 ECS 托管的 Docker 平台一起使用。该格式与支持非 ECS 管理的 Docker 平台分支的其他配置文件版本有很大不同。

 有关更新的格式和示例文件的详细信息，请参阅 [`Dockerrun.aws.json` v2](create_deploy_docker_v2config.md#create_deploy_docker_v2config_dockerrun)。

## Docker 映像
<a name="create_deploy_docker_ecs_images"></a>

 适用于 Elastic Beanstalk 的 ECS 托管 Docker 平台要求在创建 Elastic Beanstalk 环境之前预先构建映像并将其存储在公有或私有在线映像存储库中。

**注意**  
Elastic Beanstalk 上的 ECS 托管式 Docker 平台不支持使用 `Dockerfile` 在部署期间构建自定义映像。在创建 Elastic Beanstalk 环境之前，先构建映像并将其部署到在线存储库中。

在 `Dockerrun.aws.json` v2 中按名称指定映像。

要将 Elastic Beanstalk 配置为向私有存储库进行身份验证，请在 `authentication` v2 文件中包含 `Dockerrun.aws.json` 参数。

## 失败的容器部署
<a name="create_deploy_docker_ecs_rollback"></a>

 如果 Amazon ECS 任务失败，您的 Elastic Beanstalk 环境中的一个或多个容器将不会启动。由于 Amazon ECS 任务失败，Elastic Beanstalk 不会回滚多容器环境。如果容器在您的环境中无法启动，请从 Elastic Beanstalk 控制台中重新部署当前版本或以前的正常工作版本。

**部署现有版本**

1. 在您环境的区域中打开 Elastic Beanstalk 控制台。

1. 单击应用程序名称右侧的**操作**，然后单击**查看应用程序版本**。

1. 选择应用程序的版本，然后单击**部署**。

## 针对 Elastic Beanstalk 扩展基于 ECS 的 Docker 平台
<a name="create_deploy_docker_ecs_extending_linux"></a>

Elastic Beanstalk 提供可扩展性功能，因此您可以将自己的命令、脚本、软件和配置应用于应用程序部署。*ECS AL2 AL2023* 和平台分支的部署工作流程与其他基于 Linux 的平台略有不同。有关更多信息，请参阅 [在 Amazon Linux 2 及更高版本上运行的 ECS 的实例部署工作流ECS 开启 AL2 及以后的实例部署工作流程](platforms-linux-extend.workflow.ecs-al2.md)。