通过 AWS ECS 在一个 EC2 实例中的多个 docker 容器

Posted

技术标签:

【中文标题】通过 AWS ECS 在一个 EC2 实例中的多个 docker 容器【英文标题】:Multiple docker containers in one EC2 instance through AWS ECS 【发布时间】:2016-03-02 04:05:59 【问题描述】:

是否可以通过AWS ECS(EC2 Container Service)在一个EC2实例中运行多个docker容器?

【问题讨论】:

@tugberk- 嗨,您能分享一些您是如何实现这一目标的信息吗?对我和其他人有帮助吗? 【参考方案1】:

是的。

AWS 的文档/产品详细信息从未公开并明确说明,但它谈到了将许多容器启动到集群中。一个集群可以是一个实例。

When configuring a container,您指定内存和 CPU 使用率。 ECS 使用它来“调度”(或“打包”)带有 Docker 容器的 EC2。

【讨论】:

你知道任何一步一步的教程来展示我们如何设置它吗?我还不明白它是如何工作的! start here.【参考方案2】:

在一个 ecs 任务中定义的所有容器都部署到同一个实例上。

即使集群有很多实例,一个任务中定义的所有容器都位于同一个 ec2 实例上。容器可以使用它们之间定义的链接相互访问。

这相当于 Kubernetes 中的一个 POD。

【讨论】:

【参考方案3】:

是的,为此编写具有多个容器定义的任务定义。

【讨论】:

谢谢。这样做了,只需修改任务并将多个容器添加到任务定义中。很简单,但由于某种原因不是很清楚 切线地,在我的本地环境中,我有一个用于客户端的容器和一个用于服务器的容器。客户端能够使用“localhost:3000/api/stuff”向服务器(在端口 3000 提供服务)发出 http 请求。这在我的 Mac 上有效,但在 AWS ECS 上,两个容器所在的位置和运行方式与我在本地环境中的运行方式相同,客户端不再访问服务器。 'localhost' 在这些 Linux EC2 中不是一个东西吗? @Nick 你有没有找到解决这个网络问题的方法?【参考方案4】:

没错。这是可能的。

为每个 docker 映像编写一个任务定义,并通过服务运行它以自动部署。在不同任务之间分配内存和 CPU 以运行不同的 docker 时,您还需要小心。

这里是the link供参考。

【讨论】:

【参考方案5】:

可以使用任务定义来实现。如果你熟悉 kubernetes,task 定义更像是 k8s 中的一个 pod。

任务定义 -> 创建新版本或创建新任务定义。

转到容器部分并添加要在任务中运行的所有容器。定义容器名称和图像 URL。

注意:为每个容器分配所需的内存/cpu。

现在,当您在任何 EC2/Fargate 资源中保存并运行任务时,任务定义中定义的所有容器都会一起运行。

【讨论】:

以上是关于通过 AWS ECS 在一个 EC2 实例中的多个 docker 容器的主要内容,如果未能解决你的问题,请参考以下文章

AWS - ECS - 如何在现有 ECS(带有 1 个 EC2)实例上重新部署更新的 Docker 映像?

AWS ECS 开发工具包。使用开发工具包为 ECS 集群注册新容器实例 (EC2)

AWS EC2 实例未加入 ECS 集群

AWS ECS 中的批处理系统与 AWS Batch 有何不同?

AWS EC2 ECS 在您的集群中未找到任何容器实例

AWS IAM 策略拒绝对自动扩展组或 ECS 集群内的任何 EC2 实例的权限