【问题标题】:AWS Using ECS-Optimized AMI with Docker Containers in ECSAWS 在 ECS 中使用 ECS 优化的 AMI 和 Docker 容器
【发布时间】:2019-05-04 04:46:21
【问题描述】:

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

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

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

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

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

我目前的困惑:

official doc states ECS 中运行的实例应安装和配置 Amazon ECS 容器代理Docker daemonecs-init .因此,对于他们推荐的基础镜像:

Amazon ECS 优化的 AMI 预配置了这些 要求和建议。我们建议您使用亚马逊 为您的容器实例优化 ECS 的 Amazon Linux 2 AMI,除非 您的应用程序需要特定的操作系统或 Docker 该 AMI 中尚不可用的版本。

困惑点 1: 但是,我在官方文档中没有找到关于如何基于这些优化的 AMI 实际构建和运行 Docker 容器的示例……只有大约两个 Dockerfile 示例、herehere,它们都是从公共非 AMI 映像构建的?

我找到了一些资源,例如 here (source) 和 here,它们展示了如何使用 Packer 及其 EC2 AMI Builder (EBS backed) 来构建基于这些 ECS 优化 AMI 的自定义 AMI。

我自己设置了这个过程,并进行了一些小的修改,并且它正在运行。我在 AWS EC2 AMI 下显示了我自己的自定义图像。

困惑点 2: 但是,我似乎无法在我的 dockerfiles 或 docker compose 文件中引用这些 AMI 映像,因为它们没有存储在 ECR 中……我是否正确(或配置错误) ?

Packer 确实有一个post-processor for docker push,它支持 ECR。但它不适用于 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 容器的推荐方法是什么?

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

【问题讨论】:

    标签: docker docker-compose amazon-ecs amazon-ami amazon-ecr


    【解决方案1】:

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

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

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

    【讨论】:

    • 我曾假设每个容器定义的 compose 文件都有一个专用的 EC2 实例,并且在扩展时 ECS 会启动新实例...假设我的 compose 文件有一个数据库服务器容器服务于扩展一组后端容器实例。那么各个容器是如何分布在 EC2 实例上的呢?
    • ECS 不会自行启动实例(您可以通过自动扩展组运行实例)。 ECS 自行管理容器在实例上的放置。一个主要目标是您可以在一个实例上运行多个容器,而无需手动放置它们。
    • 谢谢大卫,我浏览了很多文章、文档页面、视频和课程。然而,这一点并没有在任何地方清楚地体现出来……或者我只是有一个过于坚定的假设。我刚刚找到了另一个video course on Udemy,它对此事很清楚,并且还涵盖了以 CLI 为中心的观点。
    猜你喜欢
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 2020-11-15
    • 2020-10-31
    • 2023-02-09
    • 2016-07-03
    相关资源
    最近更新 更多