Docker 容器 : services vs full applications

标签 docker

我一直在与自己争论如何思考和使用 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/

相关文章:

django - Celery task.delay在docker容器中被阻止

docker:使用 Docker Jenkins 容器使用 docker 命令时找不到

hadoop - 在docker上的Cloudera QuickStart中扩展HDFS内存

postgresql - 将 PostgreSQL Alpine 镜像从 12.3 升级到 12.6 后切换到 Debian 后出现 "Signal 11: Segmentation fault"错误

docker - 是否需要清除AKS/Kubernetes中的docker-logs

docker - 什么是本地 "docker test"命令?

docker - 更新因任务失败或提前终止而暂停。 OCI 运行时创建失败 : container_linux. go:2 ... [DOCKER]

maven - 当 docker-maven 插件尝试构建镜像时会发生什么?

ruby - 不能在 Alpine Linux 上要求 ruby​​ gsl

docker - 防止更改无根容器安装中的权限