从虚拟机到Docker – 了解哪些容器放在哪些主机上

我现在有一个在AWS上使用VM(EC2)运行的应用程序,如下所示。

  • 主要LB
    • 为主API运行2到4个EC2实例运行LEMP堆栈
  • 运行ReactJS Apppipe理面板的EC2实例
  • 运行Jenkins的 EC2实例
  • 运行LogStash的 2个EC2实例
  • 1个运行KibanaElasticSearch的 EC2实例

我正在将所有这些转换为Docker for Production-use(Docker Swarm)。 我知道我可以为每个组件创build容器和Docker文件,但是在部署时,我的问题如下。

  1. 到目前为止,所有这些组件都可以在本地进行networking互联,因为它们都存在于相同的VPC中。 所以他们会继续,我想。 但是,他们是否都存在于同一个Docker Swarm中呢?

  2. 我非常习惯于每个组件都在自己的小型服务器上,但现在,每个组件都将在它自己的容器中。 那么是否有一个更大的服务器,以及几个容器(根据需要)在实例上运行? 换句话说,这些组件中的某些组件最终可能位于相同的服务器上,但这是使用容器时的预期行为。

    还是应该把某些组件(即ElasticSearch)分解成它们自己的服务器?

  3. 在什么情况下你想拥有多个Docker Swarms? 是否最好假定任何与这个应用程序相关的东西都应该存在于这个群体中?

按顺序回答你的问题

  1. 如果您在同一个VPC中运行多个群集,则不需要将所有容器保留在同一个群集中,并且可以具有类似的networkingfunction。 不过,我会build议在同一集群中运行它们(除非有严格的法规要求或其他任何强烈的需求),以便您可以利用docker和链接function中的内部networking来进一步保护您的容器。

  2. 当您将当前服务docker化到多个容器时,可以根据粒度进行独立扩展,处理容错以及维护各个部署的容器生命周期。 由于ElasticSearch通常会收到很多请求,因此将其分离到自己的容器是合乎逻辑的。 在同一主机中运行容器也不是什么问题。 事实上,Swarm将处理容器放置到不同的主机,这样,如果主机发生故障,Swarm会根据configuration在另一个主机上configuration另一个容器实例,这对容错非常重要。

  3. 你可以使用一个单一的群体为你的用例生产。 一个可以使用多个Swarm集群的常见用例是将不同的部署阶段(testing,登台等)分离到多个集群。

另请参阅AWS EC2容器服务 ,它是AWS中提供的完全托pipe的容器服务。 与Swarm相比,在AWS中pipe理容器更容易,因为它与IAM,Autoscaling,Load Balancing等其他AWS服务紧密集成。