我一直在与自己争论如何思考和使用 Docker 容器。
从文献和示例看来,容器确实应该提供服务或堆栈的一部分。例如,一个容器可能运行 MySQL、Apache、redis 或其他任何东西。我可以理解为什么这很好,很干净,而且很有意义。
在我们的场景中,我们希望在同一台服务器上托管多个完全独立的 Web 应用程序(电子商务商店、wordpress 站点、静态网站、node.js 应用程序),并且我们希望使用 Docker。因此,对我来说,每个容器完全独立,整个堆栈本身就更有意义,例如我可能有几个正在运行的 wordpress 容器中的每一个都有自己的 LAMP 安装。
将one-container-one-service模型应用于这种场景似乎非常复杂——每个应用程序都会依赖于系统中的其他容器,而这些容器又会被其他事物所依赖。如果您需要特定服务的多个版本怎么办。
虽然这似乎是要走的路,但它似乎也可能非常低效?我不是 LXC 如何工作的专家,但即使一切都是容器化的,系统上确实有所有 apache2 工作人员和 mysqlds 运行,以及所有相关的开销 - 会不会出现性能问题?
有人有什么想法吗?
最佳答案
我更喜欢每个应用一个容器的方法。如果您将每个服务都放在一个图像/容器中,您将获得一些优势:
- 您可以轻松组合新堆栈,使用 Apache 而不是 Nginx。
- 您可以重复使用组件,例如我使用为每个应用程序部署相同的 Logstash 镜像来收集日志。
- 您可以使用 Docker Index(现在称为 Docker Hub)中的预定义服务。如果需要设置 Memcached 服务,只需拉取镜像即可。
- 您可以控制每项服务,例如停止它或更新它。如果你想更新你的应用,你只需要重建一张图片,并且只上传/下载一张图片。
由于 LXC 和 Docker 似乎非常高效,我不介意使用多个容器。这就是 Docker 的设计目的。而且我认为你会有一个合理的数量,比如说 <100 个容器。所以应该没问题。
关于Docker 容器 : services vs full applications,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24191492/