2015-10-07 50 views
0

我很新的做Docker。我在我的开发环境中与Docker玩了很多,但我试图部署真正的应用程序只有一次。Dockerized PHP应用程序体系结构最佳实践

我已经阅读了大量的文档,并观看了视频的打盹,但仍然有很多问题。 我明白,Docker只是一个可以以多种不同方式使用的工具,但现在我试图找到开发和部署Web应用程序的最佳方式。

我将使用真正的PHP应用案例来使我的问题更加具体和实用。 为了简单起见,我们假设我建立一个非常简单的PHP应用程序,所以我需要:

  1. Web服务器(nginx的)
  2. PHP解释器(PHP-FPM或HHVM)
  3. 持久性存储对于会话

我能找到的最好的示例/教程是this one year old post。迪伦提出了这样的结构: Dockerized PHP App

他使用唯一的数据容器整个PHP项目文件和日志和docker-compose运行与正确的链接所有这些图像。在开发环境中,我将挂载一个主机目录作为数据卷,为了生产,我会将文件直接复制到仅数据映像并进行部署。

这是可以理解的。我确实希望在nginxphp-fpm之间共享数据。 nginx需要访问静态文件(.img,.css,.js ...)和php-fpm需要访问PHP文件。两种服务都是分开的,因此可以独立更新/更改。

数据只有容器共享一个data volume链接到nginxphp-fpm通过--volumes-from选项。

但据我所知 - Data Only容器和-v标志存在问题。 Official Docker Documentationdata volume是专门指定的目录来保存数据!据说,

即使容器本身被删除,数据量仍然存在。

所以这个解决方案非常适合数据,我不想像会话文件,数据库存储,日志等那样丢失数据。但是不是我的代码文件,对吧?我想改变我的代码文件。我想部署更改而不重建nginxphp-fpm图像。

另一个问题是,当我尝试这种方法时,我无法部署代码更改,直到我停止所有正在运行的容器,删除它们及其图像并完全重建它们。只重建和部署Data Only图像什么都不做!

我已经看到一些其他的实现,当数据直接存储在Interpreter容器中时,但它不是一个选项,因为我需要nginx才能访问这些文件。

问题是什么是在哪里放置我的项目代码文件以及如何部署这种类型的应用程序更改最佳做法?

谢谢。

+0

我已经添加了一些更详细的说明,让我知道如果这有助于 – dnephin

回答

2

对,不要为您的代码使用数据量。 docker-compose指出重新使用旧卷(所以你不会丢失数据),所以你总是会被旧代码困住。

使用COPY指令添加静态资源,在nginx的Dockerfile,并在应用程序(phpfpm)一个COPYDockerfile添加代码。在开发中,您可以使用主机卷,以便您不必重新启动容器即可查看代码更改(假设Web服务器支持提取更改)。

+0

谢谢!这很有道理,虽然有点不方便... – oleynikd

相关问题