从虚拟机到 Docker - 了解哪些容器运行在哪些主机上

From VMs to Docker - Understanding which containers go on what hosts

我目前在 AWS 上有一个应用程序 运行,使用 VPC 内的虚拟机 (EC2),如下所示。

我正在努力将所有这些转换为 Docker 以供生产使用 (Docker Swarm)。我知道我可以为每个组件制作容器和 Docker 文件,但是在部署方面,我的问题如下。

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

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

    或者我是否仍应将某些组件(即 ElasticSearch)拆分到它们自己的服务器上?

  3. 在什么情况下您希望拥有多个 Docker Swarm?是否最好假设以任何方式与此应用程序相关的任何事物都应该存在于这一群中?

按顺序回答您的问题

  1. 没有必要将所有容器都放在同一个 swarm 集群中,如果您 运行 多个集群在同一个 VPC 中,您可以拥有类似的网络功能。但是我建议 运行 它们在同一个集群中(除非有严格的监管要求或有任何其他强烈的需求)这样你就可以利用 docker 中的内部网络和链接功能来进一步保护你的容器.

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

  3. 您可以将单个群用于您的生产用例。可以使用多个 Swarm 集群的一个常见用例是将部署的不同阶段(测试、暂存等)分离到多个集群。

另请参阅 AWS EC2 container service,这是 AWS 中提供的完全托管 docker 容器服务。与 Swarm 相比,在 AWS 中管理容器会更容易,因为它与其他 AWS 服务(如 IAM、自动缩放、负载平衡等)紧密集成。