Php Docker服务分离

Php Docker服务分离,php,nginx,docker,containers,docker-compose,Php,Nginx,Docker,Containers,Docker Compose,我不知道如何使用docker正确分离服务器上的服务。我有一个用NodeJS编写的应用程序和两个用PHP编写的应用程序。我使用NGINX作为web服务器/反向代理,使用MySQL作为数据库。我不太确定哪个docker容器应该处理哪个任务以及在哪里存储应用程序文件(js、php、css和jpg等静态内容) 我考虑了以下选项(使用MySQL容器)。每个矩形都是docker图像(除了“服务器”和“服务器FS”矩形) 选项1:一个NGINX容器,处理静态内容并将请求传递给PHP-FPM和NodeJS。应

我不知道如何使用docker正确分离服务器上的服务。我有一个用NodeJS编写的应用程序和两个用PHP编写的应用程序。我使用NGINX作为web服务器/反向代理,使用MySQL作为数据库。我不太确定哪个docker容器应该处理哪个任务以及在哪里存储应用程序文件(js、php、css和jpg等静态内容)


我考虑了以下选项(使用MySQL容器)。每个矩形都是docker图像(除了“服务器”和“服务器FS”矩形)

选项1:一个NGINX容器,处理静态内容并将请求传递给PHP-FPM和NodeJS。应用程序文件将装入docker映像

选项2:一个NGINX容器,充当捆绑不同服务的反向代理。应用程序本身更具可移植性,因为每个应用程序都处理自己的配置(如路由重写和处理静态内容)

选项3:一个NGINX容器作为反向代理,如选项2所示。对于每个PHP应用程序,NGINX Web服务器和PHP-FPM模块都包含在一个docker映像中

选项4:一个NGINX容器再次充当反向代理。应用程序文件捆绑在各自的docker映像中


如何将服务分离为docker映像,是否有最佳实践?由于应用程序文件包含在映像中,因此选项4似乎是最易于移植和部署的。选项1到3更易于在开发中使用,因为图像不需要每次文件更改时都重新生成。选项3对我来说似乎是最好的选择,但我也知道一个docker容器应该只包含一个服务(PHP-FPMNGINX)


是否有最佳实践,还是由每个人自己决定如何处理。我想了解您的经验。

如果您的目标是生产系统,我建议使用图1


它将允许您水平扩展您的服务(nodejs、php-fpm),并提供一些故障切换。这也是使用Swarm或Kubernetes之类的集群管理器进行架构的方式。在您的场景中,每个主机不应该需要超过一个nginx。

许多好的问题都会根据专家经验产生一定程度的意见,但对这个问题的回答往往几乎完全基于意见,而不是事实、参考资料或特定专业知识。这就是结束堆栈溢出问题的原因。我建议你找一个发展论坛(也许?)来概括一下。然后,当/如果您有特定的编码问题,请返回StackOverflow,我们将很乐意提供帮助。@JayBlanchard我不同意。这个问题用清晰的图表表达得很好。我相信这将有助于人们这样搜索。SO中的大多数问题已经属于“做这件事的最佳方式是什么”类型。答案通常基于经验。“做这件事的最佳方法是什么?”关于堆栈溢出的问题一直争论不休。当然,这类问题被认为是基于意见的答案,这是一个特殊的密切理由。在堆栈上,大多数问题的堆栈更具体,并考虑编码问题,而不是Hoto to。