Man*_*eUK 5 php symfony docker docker-compose
我希望使用Docker-Compose在Docker上实现symfony应用程序。我至少要有以下容器:
目前,我们也有使用上述设置的开发环境。
Symfony应用程序存储在本地(主机),然后在PHP-FPM容器上使用一个卷,以便它可以读取该应用程序-效果很好。我们bash进入php-fpm容器,运行composer / app / console命令。
我们还手动运行使用器(Symfony命令),这些使用器消耗来自Rabbitmq服务器的消息。
我在生产中有哪些选择?
1)我可以创建一个运行应用程序的容器,然后允许其他容器使用它吗?我看到php-fpm容器需要访问应用程序代码-但我也想创建一个容器来运行使用者-将要运行的服务名称传递给该容器-意味着我可以拥有一个映像可以灵活启动以处理来自任何队列的消息。此选项中的日志/缓存会怎样?
2)应用程序是否存储在需要的每个图像中?这是我最不喜欢的选项,因为要更新应用程序,我需要构建每个图像
3)我还没有探索过的东西?
我想允许对应用程序进行轻松更新-也许是脚本编写的,但是我也想最大程度地减少停机时间-我可以使用haproxy或类似的方法来完成-其他人在生产中运行多容器symfony应用程序是否有任何经验?
我为每项服务运行一个容器。请记住,Docker 原则之一是“关注点分离”。
不过,您可能在同一个容器上有 Nginx + PHP-FPM。
要启动所有服务(在开发或生产环境中),您可以使用 docker-compose 和神奇的“SYMFONY_ENV=dev”环境变量来启动所有内容。我建议在单独的容器中启动消费者,但可能使用不同的项目/日志/缓存路径。考虑到生产中的消费者如果使用共享 CPU/内存/磁盘运行,可能会影响在线性能。
我目前正在研究部署/部署后 web 应用程序的替代方案,次优解决方案现在是一个简单的入口点 bash 脚本(传递给“docker run -d myimage php_entrypoint.sh”):
它的结果是这样的:
#$OPTIMIZE is an ENV-propagated or a calulated variable
su -c "php composer.phar install $OPTIMIZE" webmgr
cp -f web/HTACCESS_${SYMFONY_ENV} web/.htaccess
/usr/bin/supervisord -c /etc/supervisord/supervisord.conf
Run Code Online (Sandbox Code Playgroud)
我使用 Supervisord 的原因是我必须复制/挂载我需要运行的 [program:] 部分,从而维护一个对 php-fpm 和 CLI/consumer 工作都有好处的 php 映像。我还可以重新启动 php 应用服务器而不杀死容器。此外,supervisord 在管理“守护进程”方面非常聪明。
更新
webapp 以卷的形式挂载,docker-compose.yml 位于项目根目录中,其中包含 docker 镜像配置和 symfony 项目。这是 docker-compose.yml 的摘录
webapp_fpm:
image: ...
volumes:
- ./symfony:/var/www/html
- ./docker-conf/supervisord:/etc/supervisord
- /var/log/appname/symfony:/var/log/symfony
entrypoint: "/bin/bash php_entrypoint.sh"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1883 次 |
| 最近记录: |