我应该为我的web应用使用单独的Docker容器吗?

我应该为我的web应用使用单独的Docker容器吗?,docker,architecture,Docker,Architecture,我需要为复杂的web应用程序使用单独的Docker容器,还是可以将所有必需的服务放在一个容器中? 有谁能解释一下,当我能够在一个容器中安装和启动所有内容时,为什么我应该将我的应用程序划分为多个容器(例如php fpmcontainer、mysqlcontainer、mongocontainer)?一些人会告诉你,每个容器只应该运行一个进程。其他人会说每个容器有一个应用程序。这些建议都是基于公平原则的 我不认为微服务是所有情况下的正确解决方案,所以我不会因为这个原因而盲目地遵循这些建议。如果在一个

我需要为复杂的web应用程序使用单独的Docker容器,还是可以将所有必需的服务放在一个容器中?
有谁能解释一下,当我能够在一个容器中安装和启动所有内容时,为什么我应该将我的应用程序划分为多个容器(例如
php fpm
container、
mysql
container、
mongo
container)?

一些人会告诉你,每个容器只应该运行一个进程。其他人会说每个容器有一个应用程序。这些建议都是基于公平原则的

我不认为微服务是所有情况下的正确解决方案,所以我不会因为这个原因而盲目地遵循这些建议。如果在一个容器中为您的案例设置多个进程是有意义的,那么就这样做。(关于这一点,见和)

但是,还有另一个分开容器的原因:在大多数情况下,你需要做的工作更少

在桌面上,有大量随时可用的Docker图像。只要拉你需要的

接下来您要做的是:

  • 读取docker图像的文档(要设置的环境变量等)
  • 创建一个文件以简化对这些容器的操作

将web应用程序划分为多个容器时,部署应用程序时不需要重新启动所有服务。与传统一样,在更新web层时不会重新启动mysql服务器


此外,如果要扩展应用程序,将应用程序划分为单独的容器会更容易。然后,您可以扩展应用程序中解决瓶颈所需的部分。

最好将您的Web应用程序放在一个容器中,将数据库等支持服务放在一个单独的容器中。如果需要执行滚动更新或重新启动,则可以在应用程序节点执行单独的重新启动时保持数据库联机,这样就不会出现停机。如果你有像Redis之类的缓存,出于同样的原因,这也很有用。它还允许您更轻松地添加节点,以松散耦合的方式进行扩展。它还允许您以更适合特定用途的方式管理容器。对于您描述的应用程序类型,我很少看到在单个容器上运行所有服务的参数。

使用Docker时需要考虑的是它内部的工作方式。Docker使用您在Dockerfile中的
CMD
(和
ENTRYPOINT
(稍微复杂一点)指令中指定的命令替换PID 1。PID 1通常是init系统所在的位置(sysvinit、runit、systemd等等)。容器的生存和消亡取决于从那里开始的任何进程。当进程终止时,容器也将终止。容器中该进程的Stdout和stderr是在主机上键入
docker logs myContainer
时得到的。顺便说一句,这就是为什么您需要跳转来启动服务和运行cronjobs(通常由您的init系统完成的事情)。这对于理解以某种方式做事的动机非常重要

现在,你想做什么就做什么。关于“正确”的方法有很多意见,但你可以抛开这些,做你想做的事。因此,您可以了解如何在一个容器中运行所有这些服务。但现在您已经知道docker是如何用您在DockerFile中的
CMD
(和
ENTRYPOINT
)中指定的任何命令来替换PID 1的,您可能会认为谨慎的做法是尝试让应用程序在各自的容器中运行,并让它们通过。(更新--2017年4月27日:容器链接已被弃用,取而代之的是常规ole,后者更为健壮,其思想是您只需将单独的应用程序容器连接到同一网络,以便它们可以相互通信)


如果你需要一点帮助来决定,我可以根据我自己的经验告诉你,当你将你的应用程序分离到单独的容器中,然后将它们链接在一起时,它会变得更干净,更易于维护。刚才我正在从HHVM构建Wordpress安装,我正在一个容器中安装Nginx和HHVM/php fpm,Wordpress安装在一个容器中,MariaDB安装在另一个容器中。在将来,这将使我能够在MariaDB数据前直接插入Wordpress的替代安装,几乎没有任何麻烦。对每个应用程序进行容器化是值得的。祝你好运

这取决于应用程序的愿景和路线图。将应用程序的所有组件放在一个层(在本例中为docker容器)就像将所有鸡蛋放在一个篮子中

每当应用程序需要安全性、性能相关问题时,将这三个组件分离到各自的容器中是一个理想的解决方案。不用说,这种跨容器的劳动分工会产生一定的成本,这与将这些容器连接在一起以实现通信和安全等相关