AWS在ECS中将ECS优化的AMI与Docker容器结合使用

时间:2019-05-03 20:33:21

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

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

但是,似乎在AWS ECS上使用Docker时,我仍然缺少这个难题的重要部分...

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

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

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

我目前困惑的地方:

在ECS中运行的实例的official doc states应该已安装 Amazon ECS容器代理 Docker守护程序 ecs-init 和配置。因此,对于基础图像,他们建议:

  

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

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

我发现了一些资源,例如heresource)和here,展示了如何使用Packer及其EC2 AMI Builder (EBS backed)来基于以下内容构建自定义AMI这些ECS优化的AMI。

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

混淆点2:但是,我似乎无法在我的dockerfile或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:使用Amazon ECS优化的Amazon Linux 2 AMI在ECS中构建和运行Docker容器的推荐方法是什么?

我在这里可能想念什么...?

1 个答案:

答案 0 :(得分:1)

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

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

我认为在ECS上运行的容器上没有特殊要求,并且没有一种方法可以基于AMI构建Docker映像。您应该能够启动与在本地使用的同一组图像(假设实际上将COPY源代码插入图像中,它们在没有操作员交互的情况下运行,)。 / p>