我已经花费了大量时间来构建接下来要描述的那种部署设置。我浏览了大部分关于 ECS 的文档,并记录了一份详尽的学习资源列表。
但是,似乎我仍然错过了 AWS ECS 上的 Docker 这个难题的一些重要部分......
在开发中,我们使用 Docker Compose 将一组容器定义为本地全栈集群。它是在本地使用容器的非常方便的工具。
我们的目标是使用 Docker Compose 方法将此集群部署到 Amazon AWS ECS 中。
ECS 支持最高版本 3.0 的 Compose 文件格式。最值得注意的是,不支持使用本地文件作为构建上下文,因此必须引用图像。
我目前感到困惑的是:
官方文档指出,在 ECS 中运行的实例应安装并配置Amazon ECS 容器代理、Docker daemon和ecs-init 。因此,对于他们推荐的基本图像:
Amazon ECS 优化的 AMI 预配置了这些要求和建议。我们建议您将 Amazon ECS 优化的 Amazon Linux 2 AMI 用于您的容器实例,除非您的应用程序需要特定操作系统或该 AMI 中尚不可用的 Docker 版本。
混淆点1:但是,我在官方文档中没有找到关于如何基于这些优化的 AMI 实际构建和运行 Docker 容器的示例……这里和这里只有两个 Dockerfile 示例,它们都是从公共非 AMI 映像?
我找到了一些资源,比如这里(来源)和此处,它们展示了如何使用 Packer 及其EC2 AMI Builder(EBS 支持)来构建基于这些 ECS 优化 AMI 的自定义 AMI。
我自己设置了这个过程,做了一些小的修改,它正在工作。我在 AWS EC2 AMI 下显示了我自己的自定义图像。
混淆点 2:但是,我似乎无法在我的 dockerfiles 或 docker compose 文件中引用这些 AMI 图像,因为它们没有存储在 ECR 中......我是否正确(或配置错误)?
Packer 确实有一个支持 ECR的 docker push 后处理器。但它不适用于 EC2 AMI Builder:
Post-processor failed: Unknown artifact type: mitchellh.amazonebs
Can only import from docker-import and docker-tag artifacts.
当然,我实际上不需要将基本 AMI 存储在 ECR 中……但我需要能够将其用作映像来构建我的自定义服务 Docker 映像,并将这些发布映像存储在 ECR 中。然后在 docker compose 文件中引用这些图像。
我知道转向其他自动化工具,如 Ansible、Terraform 或 AWS Code* 服务可能会让我超越这一点。但是我一直在尝试遵循官方文档并从各种来源收集信息,同时尝试将设置保持在最低限度,并且还没有完全理解我面临的问题。
困惑点 3:在 ECS 中使用 Amazon ECS 优化的 Amazon Linux 2 AMI 构建和运行 Docker 容器的推荐方法是什么?
我可能在这里错过了什么......?