通过 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)