我们有一个 PHP(特别是 Laravel)应用程序,应该针对生产环境进行 docker 化。但是与 Web Server 和 PHP-FPM 容器共享应用程序源代码存在问题。
Nginx 和 PHP-FPM 都应该可以访问应用程序源代码,所以这里是网络上建议的解决方法:
为 Nginx 和 PHP-FPM 提供两个独立的容器,并将源代码安装在主机上并创建一个卷。然后,将此卷分配给这些容器。这个解决方案是不需要的,因为每次应用程序代码更改时,都应该重新构建整个堆栈并且应该刷新创建的卷。此外,这些任务应该在我们所有的服务器上执行,这可能会浪费很多时间。
将 PHP-FPM 和 Nginx 放在同一个容器上,并保持它们的进程使用supervisor脚本entrypoint运行。在这个解决方案中,当源代码发生变化时,我们构建一次镜像,希望没有共享卷被刷新,所以这似乎是一个很好的解决方法。但是,这个解决方案的主要问题是它违反了容器化背后的理念。Docker在其文档中说:
每个容器应该有一个关注点(或正在运行的进程)。
但是在这里,我们有两个正在运行的进程!
是否有其他可能适用于生产环境的解决方案?不得不提一下,我们将在不久的将来使用Swarm或Kubernetes 。
手掌心
森栏