繁体   English   中英

Docker部署更新共享卷

[英]Docker deployment update shared volume

Docker生产中的一种新东西,我有一个设计问题。 用Docker部署PHP应用程序的最佳方法是什么,该应用程序包含主应用程序目录中的其他容器使用的数据和信息,这些数据和信息必须在构建过程中进行更新?

示例(简化Symfony类型的应用程序):

- application
    - app
    - src
    - vendor
    - conf
    - conf/vhost.conf
    - web/assets/*

让我们仅用2个服务简化一下

- php-fpm
- nginx

1 /第一次尝试是构建2张图像

  • php-fpm:与

添加。 / var / www / html / project /

卷/ var / www / html / project /

vendor(composer)安装在Dockerfile中

这样我就可以在Nginx上到达/ var / www / html / project /

volume_from php-fpm

=>然后是配置和资产等。

但是,如果我没记错,那不是一个好方法,因为在下一个版本中,我的图像不会更新VOLUME / var / www / html / project /(因为它是一个卷)=>然后我的代码将永不更新。

2 /然后我最终这样做了:

- providing the last code base in the image: COPY . /data/image/app
- creating a named volume: docroot
- mount docroot on php-fpm
- adding a rsync on the entrypoint to sync /data/image/app to docroot:/var/www/html/project ( with the good excludes that I needed)
- doing the vendors(composer) install in the entrypoint

=>仍在nginx上使用volume_from:php-fpm。

这很重要,因为我想要:

- the conf/vhost.conf
- the assets
- maybe other stuff

我可能需要添加将使用一些配置文件和/或资源等的SolR。

3 /我想还有另一种方法,可以专门添加我在每个图像上需要的内容。

我认为这增加了构建过程的复杂性,但也很有意义。

那么,您认为我错过了什么吗? 接近2 /或3 /,4?

非常感谢你!

您的问题实际上是关于静态文件资产的。 一些框架和项目将它们当作自己的组件来对待。 在php世界中,php-fpm应用服务器通常不处理静态文件。 它将留给像nginx这样的网络服务器组件。 就其本身而言,这不是问题。 实际上,这是一个好习惯。

它出现的唯一原因是您在php-fpm和nginx之间引入了隔离层。

如果考虑另一种非docker情况,即在php-fpm和nginx之间引入隔离,则会遇到相同的问题。 在此示例中,我将在数据中心的DMZ中运行我的nginx服务器,而php-fpm将充当数据中心中防火墙后面的应用程序服务器。 该nginx将如何提供该php项目的静态文件?

我提到静态资产几乎可以被认为是它们自己的组成部分。 在此两个节点的示例中,可以使用部署期间的单独步骤在DMZ中的nginx服务器上填充静态文件。 这与解决方案2不同,在解决方案2中,您运行rsync来填充php-fpm和nginx容器均可访问的卷。

另一个解决方案是使php-fpm处理这些静态资产。 当然,这不是最佳实践,因为php-fpm并不是为服务静态文件而构建的。 可以完成,但优化效果不佳。 可以通过使用nginx文件缓存来减轻这种性能影响。

您的#3解决方案也很可行。 您也可以让您的项目构建两个映像而不是一个。 第一个是添加了所有PHP代码的普通php映像。 第二个将基于nginx基本映像,并且仅添加项目所需的静态文件。

尽管这不是最佳实践,但在某些项目中,最好在同一容器中同时运行nginx和php-fpm。 如果您的nginx配置实际上只是提供静态文件并反向代理到php-fpm,那么您可以将该对进程视为一个逻辑服务。 您将需要运行supervisored,runit或类似的流程管理器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM