使用Docker的PHP开发环境
我目前正在尝试使用NGINX和PHP-FPM Docker容器设置一个PHP开发环境 现在我知道,这可以作为运行两个服务的单个容器来实现,甚至可以作为多容器设置来实现,其中每个服务都运行在自己的容器中(这是基于我目前的研究) 我的问题可以分为两个问题:使用Docker的PHP开发环境,php,nginx,docker,Php,Nginx,Docker,我目前正在尝试使用NGINX和PHP-FPM Docker容器设置一个PHP开发环境 现在我知道,这可以作为运行两个服务的单个容器来实现,甚至可以作为多容器设置来实现,其中每个服务都运行在自己的容器中(这是基于我目前的研究) 我的问题可以分为两个问题: 如何使用多容器解决方案设置多个不同的PHP应用程序,并让它们彼此通信? 我是否必须为每个PHP-FPM设置一个NGINX容器,或者我是否可以设置一个NGINX容器并将其与多个不同的PHP-FPM容器一起使用 对于开发环境来说,多容器解决方案是好的
提前感谢,任何提示都将不胜感激 在单个容器中运行多个进程: 这通常被认为是反向实践,但我们必须考虑到nginx和fpm需要协同工作。您可以使用共享卷并将它们分开,但我宁愿看到人们使用
--init
,只允许这两个过程,以消除复杂性
如果您希望沿着多集装箱路线,我将执行以下操作:
index.php
文件的服务(nginx),该文件可以为空*.php
请求传递到php
容器php
的fpm
容器将需要所有源代码,与nginx
的indx.php
路径相同因为您询问的是多容器环境,所以我相信您的应用程序使用的是Docker compose。更详细地回答你的问题 1) 假设docker compose中有三个容器,一个用于nginx,一个用于laravel的fpm容器,另一个用于magento的fpm容器。然后您将看到docker编写的文件。下面的代码片段只是一个示例
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 vhost在不同的fpm后端之间路由。但是,一般来说,这被认为是一种不好的做法,因为docker背后的主要思想是隔离应用程序。v1语法被认为是不推荐的,不应该再鼓励使用了。我建议更新您的示例:+1非常感谢您的详细回答和代码示例,今天晚些时候我将对此进行一次尝试,并让您知道它是如何进行的。非常有用,谢谢您提供的所有有用信息!谢谢你的回复,虽然我不太明白你是不是说这是一个坏习惯,以及为什么。此外,您描述的设置非常基本,有点忽略了我问题的另一部分,即“多应用程序”设置。尽管如此,你提供的信息确实很有用,我会尽快继续调查。这是一种不好的做法,除非你为僵尸做好准备。在fpm/nginx用例中,可以消除任何复杂性。祝你好运