docker化的PHP应用程序体系结构最佳实践
我很新的做Docker。 在我的开发环境中,我和Docker玩了很多,但是我试图只部署一次真正的应用程序。
我已经阅读了大量的文件,并观看了一些video,但仍然有很多问题。 我明白,Docker只是一个可以以多种不同方式使用的工具,但现在我正在试图find开发和部署Web应用程序的最佳方法。
我将使用真正的PHP应用程序案例,使我的问题更加具体和实用。 为了简单起见,我们假设我正在构build一个非常简单的PHP应用程序,所以我需要:
- Web服务器(nginx)
- PHP解释器(php-fpm或hhvm)
- SESSION的持久存储
我能find的最好的例子/教程是这个一年前的post 。 迪伦提出了这种结构:
他对整个PHP项目文件和日志以及docker-compose
使用Data Only容器来运行具有适当链接的所有这些图像。 在开发环境我将挂载一个主机目录作为数据量和生产我将文件直接复制到数据只有图像和部署。
这是可以理解的。 我希望通过nginx
和php-fpm
共享数据。 nginx
需要访问静态文件(.img,.css,.js …), php-fpm
需要访问PHP文件。 而且这两个服务是分开的,所以可以独立更新/更改。
只有数据的容器通过--volumes-from
选项共享一个链接到nginx
和php-fpm
的data volume
。
但据我所知,Data Only容器和-v
标志有问题。 官方的Docker文档说data volume
是专门指定的目录来保存数据! 据说
即使容器本身被删除,数据量仍然存在。
所以这个解决scheme非常适合我不想像会话文件,数据库存储,日志等那样松动的数据。但是对于我的代码文件来说,不是吗? 我想改变我的代码文件。 我想部署更改,而不重buildnginx
和php-fpm
图像。
另一个问题是,当我尝试这种方法时,我不能部署代码更改,直到我停止所有正在运行的容器,删除它们及其图像并完全重build它们。 只是重build和部署数据只有图像什么都没做!
当数据直接存储在Interpreter容器中时,我已经看到了一些其他的实现,但是这不是一个选项,因为我需要nginx
来访问这些文件。
问题是在哪里放置我的项目代码文件以及如何为这种应用程序部署更改的最佳做法是什么?
谢谢。
对,不要为你的代码使用数据量。 docker-compose
指出重新使用旧卷(所以你不会丢失数据),所以你总是被老代码困住。
使用COPY
指令将nginx Dockerfile
的静态资源和应用程序(phpfpm) Dockerfile
的COPY
添加到代码中。 在开发中,您可以使用主机卷,以便您不必重新启动容器即可查看代码更改(假设Web服务器支持提取更改)。