【问题标题】:From VMs to Docker - Understanding which containers go on what hosts从 VM 到 Docker - 了解哪些容器在哪些主机上运行
【发布时间】:2017-09-09 23:32:29
【问题描述】:

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

  • 主负载均衡器
    • 2 到 4 个 EC2 实例为主 API 运行 LEMP 堆栈
  • EC2 实例为管理面板运行 ReactJS 应用
  • EC2 实例运行 Jenkins
  • 2 个 EC2 实例运行 LogStash
  • 1 个 EC2 实例运行 KibanaElasticSearch

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

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

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

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

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

【问题讨论】:

  • 这些都是值得考虑的好事情,但实际上大多数都是意见问题,因此在这里并不是真正的主题。

标签: docker docker-swarm


【解决方案1】:

按顺序回答您的问题

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

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

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

还可以查看AWS EC2 container service,它是 AWS 中提供的完全托管的 docker 容器服务。与 Swarm 相比,在 AWS 中管理容器会更容易,因为它与 IAM、Autoscaling、负载平衡等其他 AWS 服务紧密集成。

【讨论】:

    猜你喜欢
    • 2016-05-15
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    • 2017-09-27
    相关资源
    最近更新 更多