2

我已经花费了大量时间来构建接下来要描述的那种部署设置。我浏览了大部分关于 ECS 的文档,并记录了一份详尽的学习资源列表。

但是,似乎我仍然错过了 AWS ECS 上的 Docker 这个难题的一些重要部分......

在开发中,我们使用 Docker Compose 将一组容器定义为本地全栈集群。它是在本地使用容器的非常方便的工具。

我们的目标是使用 Docker Compose 方法将此集群部署到 Amazon AWS ECS 中。

ECS 支持最高版本 3.0 的 Compose 文件格式。最值得注意的是,不支持使用本地文件作为构建上下文,因此必须引用图像。

我目前感到困惑的是:

官方文档指出,在 ECS 中运行的实例应安装并配置Amazon ECS 容器代理Docker daemonecs-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 容器的推荐方法是什么?

我可能在这里错过了什么......?

4

1 回答 1

3

在主机本身上运行的软件和在容器中运行的软件之间存在分歧。您正在阅读的段落是关于需要在主机EC2 系统上运行的软件。

搭建 ECS 集群时,需要提供一组 EC2 实例。AWS 建议您使用他们的 AMI 作为这些实例的基础,这是非常合理的做法。如果您想改用标准 Ubuntu AMI 之类的东西,则需要在这些实例上安装引用的软件位,然后它才能“成为”ECS 集群的一部分并开始运行容器。(要运行 Docker 容器,您需要在主机上安装 Docker。)

我认为在 ECS 上运行的容器没有特殊要求,也没有办法基于 AMI 构建 Docker 镜像。您应该能够启动您在本地使用的同一组图像(假设您实际上COPY是图像中的源代码,它们在没有操作员交互的情况下运行,等等)。

于 2019-05-03T20:46:21.690 回答