Docker Compose:将Docker-Compose.yml中的不同服务部署到不同的主机集
假设我有一个包含3种不同服务(s1、s2、s3)的Docker Compose:将Docker-Compose.yml中的不同服务部署到不同的主机集,docker,kubernetes,docker-compose,amazon-ecs,Docker,Kubernetes,Docker Compose,Amazon Ecs,假设我有一个包含3种不同服务(s1、s2、s3)的docker compose.yml文件。 然后,如果我将它们部署在具有一台主机的AWS ECS(仅举个例子)集群上,那么所有三个容器都将转到该主机。如果我扩展集群2主机,然后扩展第二台主机,那么第二台主机也将获得所有三个容器 理想情况下,对于不同的服务,我希望有不同的集群,这样它们就可以独立扩展。我不想让我的数据库容器与我的后端容器位于同一集群上,因为它们都有不同的扩展需求 我将如何使用docker compose实现这种行为 Kubernet
docker compose.yml
文件。
然后,如果我将它们部署在具有一台主机的AWS ECS(仅举个例子)集群上,那么所有三个容器都将转到该主机。如果我扩展集群2主机,然后扩展第二台主机,那么第二台主机也将获得所有三个容器
理想情况下,对于不同的服务
,我希望有不同的集群
,这样它们就可以独立扩展。我不想让我的数据库容器与我的后端容器位于同一集群上,因为它们都有不同的扩展需求
我将如何使用docker compose实现这种行为
Kubernetes提出了pods
的概念,这种概念提供了这种抽象,但由于它不是docker的一部分,我想知道*如何在docker中开发多服务应用程序,其中每个服务
(定义见docker compose.yml)都可以独立扩展* 对于ECS,您需要创建多个集群(即,如果您坚持通过compose进行部署,则为基础设施的每一部分创建一个集群),或者只创建多个任务。每个任务都应该是堆栈中的一个层(即api或web等)。然后可以单独缩放图层
您会发现ECS和K8S之间的最大区别在于,由于ECS使用主机端口映射,您不能让两个不同的任务公开同一端口并在同一主机上运行
也可以查看这篇aws文章:让我们在这里直接了解术语:
docker compose
在单个主机上部署docker容器
docker swarm
是用于在多台主机上部署容器的工具
集群
通常是一起工作的一组主机(或节点),可以是物理机或虚拟机
Pod
不是集群:它是一组保证在单个节点上运行、分组在一起并通过本地主机进行通信的容器
在Kubernetes中,部署将基于复制策略、节点资源和关联性在所有可用的节点上调度容器,因此您不需要定义容器的去向:Kubernetes为您管理容器
然后可以通过两种方式进行缩放:
- 通过简单地增加容器的复制因子来扩展容器实例的数量(或者您也可以对定义的策略使用自动扩展)
- 通过添加新节点(物理节点或虚拟机)扩展集群,从而向集群添加资源
“如果您坚持通过compose部署,那么每个基础设施都有一个集群”-但是如果我使用的是理解docker-compose.yml的ecs cli
,那么它只会为一个compose.yml文件创建一个集群。对,如果您是通过docker-compose部署,那么这就是您的限制。我建议您创建单独的任务,而不是通过compose部署来解决问题。是的,这似乎是正确的方法。另外,一个ECS任务可以有多个容器,这是docker compose不支持的。