Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker Compose:将Docker-Compose.yml中的不同服务部署到不同的主机集_Docker_Kubernetes_Docker Compose_Amazon Ecs - Fatal编程技术网

Docker Compose:将Docker-Compose.yml中的不同服务部署到不同的主机集

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

假设我有一个包含3种不同服务(s1、s2、s3)的
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不支持的。