我们有一个使用PHP(具体来说是Laravel)编写的应用程序,应该为生产环境进行docker化。但是将应用程序源代码与Web服务器和PHP-FPM容器共享存在问题。
Nginx和PHP-FPM都应该能够访问应用程序源代码,因此以下是网上建议的解决方法:
- 为Nginx和PHP-FPM分别设置两个独立的容器,并将源代码挂载到主机上并创建卷。然后将此卷分配给这些容器。这种解决方案不理想,因为每当应用程序代码更改时,整个堆栈都应该重新构建并且创建的卷应该被清除。此外,这些任务应该在所有服务器上执行,可能会浪费很多时间。
在同一个容器中同时运行PHP-FPM和Nginx,并使用
supervisor
或entrypoint
脚本保持它们的进程运行。在这个解决方案中,当源代码更改时,我们只需要构建一次映像,希望不需要清除共享卷,所以这似乎是一个好的解决方案。但是,这种解决方案的主要问题是违反了容器化背后的思想。Docker在其文档中表示:每个容器应该只负责一个关注点(或运行进程)。
但是在这里,我们有两个运行进程!
有没有其他解决方案可在生产环境中运行?需要说明的是,我们将在不久的将来使用Swarm或Kubernetes。
谢谢。