【发布时间】: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 daemon 和 ecs-init .因此,对于他们推荐的基础镜像:
Amazon ECS 优化的 AMI 预配置了这些 要求和建议。我们建议您使用亚马逊 为您的容器实例优化 ECS 的 Amazon Linux 2 AMI,除非 您的应用程序需要特定的操作系统或 Docker 该 AMI 中尚不可用的版本。
困惑点 1: 但是,我在官方文档中没有找到关于如何基于这些优化的 AMI 实际构建和运行 Docker 容器的示例……只有大约两个 Dockerfile 示例、here 和 here,它们都是从公共非 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