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

标签 docker docker-swarm

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

  • Main LB
  • 为主要API
  • 运行 LEMP堆栈的2至4个EC2实例

  • 运行的EC2实例,用于管理面板
  • 的ReactJS应用程序
  • EC2实例运行 Jenkins
  • 2个运行 LogStash的EC2实例
  • 1个运行 Kibana ElasticSearch
  • 的EC2实例

    我正在将所有这些都转换为Docker以用于生产用途(Docker Swarm)。我知道我可以为每个组件创建容器和Dockerfile,但是在部署时,我的问题如下。
  • 到目前为止,所有这些组件都可以在本地相互联网,因为它们都存在于同一VPC中。我想他们将继续这样做。但是它们都应该存在于同一个Docker Swarm中吗?
  • 我非常习惯于每个组件都位于其自己的小型服务器上,但是现在,每个组件都将位于其自己的容器中。那么,是否要在实例之间运行一些更大的服务器和几个容器(根据需要)呢?换句话说,其中的某些组件最终可能会驻留在同一服务器上,但这是使用容器时的预期行为吗?
    还是应该将某些组件(例如ElasticSearch)分解到自己的服务器上?
  • 在什么情况下您想拥有多个Docker Swarms?最好假设这群人中应该存在与该应用程序相关的任何东西吗?
  • 最佳答案

    按顺序回答您的问题

  • 不必将所有容器都放在同一个群集集群中,并且如果在同一VPC中运行多个群集,则可以具有类似的联网功能。但是我建议在同一群集中运行它们(除非有严格的法规要求或有其他强烈需求),以便您可以在docker中利用内部网络并链接功能以进一步保护容器。
  • 当您基于粒度将当前服务以docker方式扩展到多个容器时,您可以独立扩展,处理容错能力并维护各个部署的容器生命周期。由于ElasticSearch通常会收到很多请求,因此将其分离到自己的容器中是合乎逻辑的。是否在同一主机中运行容器也不是什么大问题。实际上,Swarm会处理容器在不同主机上的放置,以便在主机发生故障时,Swarm会根据配置在不同主机上配置另一个容器实例,这对于容错非常重要。
  • 您可以在生产用例中使用单个群集。可以使用多个Swarm集群的一个常见用例是将部署的不同阶段(测试,分段等)分离到多个集群。

  • 还要查看AWS EC2 container service,这是AWS中可用的完全托管的Docker容器服务。与Swarm相比,与Swarm相比,在AWS中管理容器要容易得多,因为它与IAM,Autoscaling,Load Balancing等其他AWS服务紧密集成。

    关于docker - 从VM到Docker-了解哪些容器在哪些主机上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46136014/

    相关文章:

    带有 Traefik 的 Docker Swarm Windows Worker 返回网关超时

    docker - 无法在 Compose : ERROR: Network declared as external, 中使用现有网络但找不到

    docker swarm 列出服务的依赖项

    docker - 使用Ha Proxy负载均衡docker swarm

    docker - 如何在 Dockerfile 上运行两个命令?

    docker - 将挂载docker与特定用户和权限绑定(bind)

    docker - 多个 RUN 指令与单个 CMD 执行 Dockerfile 中的设置脚本以初始化容器

    docker - docker守护进程未在 Vagrant 的vm(centos/ubuntu)上运行

    Docker 群模式路由网格无法按预期工作

    docker - 格式化kubectl输出