我目前正在尝试使用NGINX和PHP-FPM Docker容器设置PHP开发环境。
现在我知道这可以作为运行两种服务的单个容器来完成,或者甚至可以作为多个容器设置来完成,其中每个服务在其自己的容器中运行(这是基于我目前为止的研究)。
我的问题可以分为两个问题:
如何使用多容器解决方案设置多个不同的 PHP应用并让它们相互通信? 我是否必须为每个PHP-FPM设置一个NGINX容器,或者我可以设置一个NGINX容器并将其与多个不同的PHP-FPM容器一起使用?
多容器解决方案是否适合开发环境?或者我接近这完全错了?
在此先感谢,任何提示都将不胜感激!
答案 0 :(得分:3)
因为,您在询问多容器环境,我相信您正在为您的应用程序使用Docker compose。更精心地回答你的问题。
1)假设我们在docker compose中有三个容器,一个用于nginx,一个用于laravel的fpm容器和另一个用于magento的fpm容器。那么你的docker compose文件看起来就像。以下代码段只是一个例子
nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
links:
- "fpmlaravel"
- "fpmmagento"
fpmlaravel:
image: php:latest
volumes:
- ./data/laravel/:/var/www/laravel
links:
- "nginx"
fpmmagento:
image: php:latest
volumes:
- ./data/magentoroot/:/var/www/magento
links:
- "nginx"
magento的nginx vhost文件是
# PHP back end
upstream backend {
server fpmmagento:9000;
}
server {
listen 80;
server_name www.magento.dev magento.dev;
root /var/www/magento;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass backend;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param HTTPS $fastcgi_https;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param MAGE_RUN_TYPE $mage_type;
fastcgi_param MAGE_RUN_CODE $mage_code;
}
}
对于fpm,请确保fpm图像正在侦听端口9000。
2)是的,可以有一个nginx容器,它基于nginx vhosts在不同的fpm后端之间路由。但是,一般来说它被认为是一种不好的做法,因为docker背后的主要思想是隔离你的应用程序。
答案 1 :(得分:0)
在单个容器中运行多个进程:
这通常被认为是背部练习,但我们必须考虑到nginx和fpm需要协同工作。您可以使用共享卷并将它们分开,但相反,我们会看到人们使用--init
而只允许这两个流程,以消除复杂性。
如果您想沿着多个集装箱路线行驶,请按以下步骤操作:
index.php
文件的服务(nginx),该文件可以为空*.php
个请求传递给php
容器,并使用它的服务名称fpm
容器名为php
,需要所有源代码,与nginx
indx.php