我正在研究使用 Linux 作为服务器平台从 DigitalOcean 等云托管提供商提供生产应用程序的最有效方法。 DigitalOcean 提供虚拟机 - 称为 Droplet。常识是,最好的方法是按照提供的 VM(droplet)中的方式部署应用程序。 Docker 容器肯定会带来开销,从而导致已部署应用程序的响应速度变慢。我不知道云托管提供商对虚拟机内运行的 Docker 容器进行了任何优化。
考虑到虚拟机可以使用与 Docker 容器相同的脚本进行配置,那么在生产中使用 Docker 是否有意义?
答案1
Docker 生态系统有一套非常好的工具,用于根据 Dockerfile 中的规范从头开始(重新)构建 Docker 容器。
如果开销对您的应用程序并不重要,或者应用程序设计可通过并行化进行扩展,那么使用虚拟机内的容器可能仍然有意义,因为容器提供了开发和维护的便利性。如果您需要更高的性能,只需添加更多并行节点......
但你是对的,因为它可能不是适合每个人的正确解决方案:如果你已经拥有用于随意自动构建正确类型的新虚拟机的基础设施并且对此感到满意,那么你可能已经拥有相同的便利以不同的方式。或者,如果您不需要并行运行多个实例,那么便利性优势可能不会那么大。
从本质上讲,目标是让生产更新变得轻而易举:“只需停止虚拟机/容器,扔掉旧的,在其位置部署这个新的虚拟机映像/容器,然后重新启动。对任意多个虚拟机/容器重复此操作您并行运行同一个应用程序。”
如有必要,使用 Docker 容器等事实上的标准可以让您轻松地从一个服务提供商迁移到另一个服务提供商。通过设计和优化的开发基础架构可以轻松生成 DigitalOcean Droplet,如果您要从 DigitalOcean 迁移,您可能必须重建部分开发自动化。
另一方面,如果单节点性能是应用程序的关键因素,那么正确的答案可能根本不是云,而可能是某种形式的传统托管甚至本地服务器。它还可能表明该应用程序是传统单服务器设计对云世界的仓促适应,需要一些进一步的设计工作才能真正很好地适应云生态系统,以便尽可能利用可扩展性和多节点并行性。
答案2
我最近刚刚开始使用容器和码头工人。它更好,因为您可以在任何地方运行容器,它们是轻量级架构,并且可以比虚拟机更快地启动。您可以从 docker hub 获取许多镜像来构建基础设施。例如,如果您需要带有 wordpres 或 LAMP 的 Web 服务器,您只需在 docker hub 中安装公共映像即可
接下来你就可以了解美丽的 kubernetes 世界。
我希望这个答案有用。