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

比方说,我有一个docker-compose.yml文件,有三种不同的服务(s1,s2,s3)。 然后,如果我部署它们,比如在一个主机上的AWS ECS(举个例子)群集,所有的三个containers都会去那个主机。 如果我缩放群集2主机,那么第二个主机,然后第二个主机也将获得所有三个containers

理想情况下,我想为不同的services不同的 clusters ,以便它们可以独立扩展。 我不想让我的数据库容器与我的backend容器在同一个群集上,因为它们都有不同的扩展需求。

我将如何实现这种与docker构成的行为?

Kubernetes提供了这种抽象的概念,但是由于这不是docker的一部分,我想知道如何在docker中开发多服务应用程序,其中每个service (在docker-compose.yml中定义)可以独立调整。 *

对于ECS,您需要创build多个群集(即,如果您坚持通过撰写进行部署,则需要为每个基础架构创build一个群集),或者只需创build多个任务。 每个任务应该是你的堆栈中的一个层(即API或网站等)。 然后,您可以独立缩放图层。

ECS和K8S之间最大的区别在于,由于ECS使用主机端口映射,所以不能有两个不同的任务公开相同的端口并在同一主机上运行。

看看这个aws文章以及: http : //docs.aws.amazon.com/AmazonECS/latest/developerguide/application_architecture.html

让我们直接在这里得到术语:

docker-compose在单个主机上部署Docker containers

docker-swarm是用来在多个主机上部署containers的工具。

通常,一个cluster是一组主机(或节点 ),可以是一起工作的物理机器或虚拟机。

Pod不是一个集群:它是一组保证在单个节点上运行的容器,分组在一起并通过本地主机进行通信。

Kubernetes中 ,部署将根据复制策略,节点资源和关联性在所有可用nodes上安排容器,因此您不需要定义容器的位置:Kubernetes为您pipe理该容器。

然后你用两种方法进行缩放:

  • 通过简单地增加容器的复制因子来扩展容器实例的数量(或者也可以使用自定义的策略)
  • 通过添加新节点(物理或虚拟机)来扩展集群,从而为集群添加资源。