我们正在 Amazon Linux 1 上运行 Elastic Beanstalk 多容器 Docker 环境,该环境已被弃用,需要迁移到 Amazon Linux 2。
该文档提供了两种选择:
据我了解,他们推荐第一个选项,因为 ECS 平台与 AL1 上的当前平台更相似。
不过,我想知道这两个选项之间有什么实际区别。ECS 在其中扮演什么角色?与纯 Docker 相比,它有什么优势?
在 ECS 上,我们使用 Dockerrun.aws.json 进行部署,它是使用 container-transform 从 docker-compose.yml 生成的。这可行,但如果我们可以跳过该转换就更好了。使用第二种选择,没有 ECS,是否可以直接部署 docker-compose.yml 文件?
我们使用单个实例,没有负载均衡器(但希望为将来保留该选项)。
是否有人使用过任一选项完成过这种迁移,并且可以提供有关该过程的一些见解?
我去年问过这个问题,但没有人回答或点赞,所以被社区机器人删除了。我再次发布它,因为我现在必须进行迁移,而且我建议这样做。
与此同时,Amazon Linux 2023 已经发布,但问题基本保持不变(Docker 平台还是 ECS 平台?)。
答案1
我现在正在进行迁移,可以分享我迄今为止学到的知识。
随着 Amazon Linux 2023 的发布,他们还更新了文档。我发现以下内容与做出决定最相关:
Docker 平台分支
Elastic Beanstalk Docker 平台支持以下平台分支:运行 Amazon Linux 2 的 Docker 和运行 AL2023 的 Docker
Elastic Beanstalk 将 Docker 容器和源代码部署到 EC2 实例并对其进行管理。这些平台分支提供多容器支持。您可以使用 Docker Compose 工具简化应用程序配置、测试和部署。有关此平台分支的更多信息,请参阅使用 Docker 平台分支。
在 Amazon Linux 2 上运行的 ECS 和在 AL2023 上运行的 ECS
我们为需要从已停用的平台分支迁移到 AL2023/AL2 的客户提供此分支在 (Amazon Linux AMI) 上运行的多容器 Docker。最新的平台分支支持已停用的平台分支中的所有功能。无需更改源代码。有关更多信息,请参阅将 Amazon Linux 上运行的多容器 Docker 迁移到 Amazon Linux 2023 上的 ECS。如果您没有在基于 ECS 的平台分支上运行的 Elastic Beanstalk 环境,我们建议您使用平台分支 Docker Running on 64bit AL2023。这提供了一种更简单的方法并且需要更少的资源。
此平台分支使用 Amazon ECS 协调将多个 Docker 容器部署到 Elastic Beanstalk 环境中的 Amazon ECS 集群。ECS 集群包含托管 Docker 容器的 EC2 实例。为了完成此部署编排,Elastic Beanstalk 创建了一个 ECS 任务定义,其中还包括一个容器定义。环境中的每个实例都运行同一组容器,这些容器在 Dockerrun.aws.jsonv2 文件中定义。有关更多信息,请参阅使用 Amazon ECS 平台分支。
重点是我。总结一下:ECS 平台提供了更容易的迁移,但 Docker 平台更简单和使用更少的资源。
既然我们无论如何都要更新配置,那么迁移到 Docker 平台似乎是一个好主意,即使这需要做更多的工作,因为我更喜欢使用“更简单的方法”,“使用更少的资源”。直接使用 docker-compose 也比使用 ECS 任务更熟悉。
之前,我们曾经使用以下命令将 docker-compose 文件转换为 Dockerrun.aws.json容器变换。在Docker平台上,不再需要此步骤,我们可以直接部署docker compose
。
我必须docker-compose.yml
为每个容器向文件添加以下选项:
mem_limit
env_file: .env
restart: no
对于essential: false
容器Dockerrun.aws.json
部署工件中无需进行任何其他更改。现在我们将docker-compose.yml
与 捆绑在一起.ebextensions
,就像我们之前对 所做的那样Dockerrun.aws.json
。