使用Docker搭建PHP开发环境

3
我正在尝试使用NGINX和PHP-FPM Docker容器来设置PHP开发环境。
目前我知道可以通过单个容器运行两个服务或者多个容器运行不同的服务来实现这一目标(根据我的研究结果)。
我的问题可以分为两个部分:
1.如果使用多个容器解决方案,如何设置多个不同的PHP应用程序并使它们相互通信? 我需要为每个PHP-FPM容器设置一个NGINX容器吗?还是可以设置一个NGINX容器并与多个不同的PHP-FPM容器一起使用?
2.对于开发环境来说,多个容器解决方案是否是一个好的选择?或者我完全错了?
提前感谢您的帮助,任何提示都将不胜感激!
2个回答

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"

nginx虚拟主机文件用于Magento的示例内容如下:
# 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虚拟主机路由到不同的fpm后端。但是,通常认为这是一种不好的做法,因为docker的主要思想是隔离您的应用程序。


v1 语法已被视为过时,不再应该被鼓励使用。我建议更新你的示例 :+1 - Rawkode
非常感谢您详细的回复和代码示例,我稍后会尝试一下并告诉您结果。 - guychouk
1
非常成功,感谢您提供的所有有用信息! - guychouk

0

在单个容器中运行多个进程:

这通常被认为是不好的做法,但我们必须考虑到nginx和fpm需要一起工作。您可以使用共享卷并将它们分开,但我更希望看到人们使用--init,只允许两个进程,以减少复杂性。

如果您想要使用多个容器,请按照以下步骤操作:

  1. 添加一个服务(nginx),其中包含一个单独的index.php文件,该文件可以为空
  2. 确保nginx将所有*.php请求传递给php容器,使用其服务名称
  3. 您的fpm容器,称为php,将需要所有源代码,位于与nginxindx.php相同的路径中

谢谢您的回复,虽然我不太明白您是否认为这是不好的做法以及原因。此外,您所描述的设置相当基本,有点忽略了我问题中的“多应用程序”设置。尽管如此,您提供的信息确实很有用,我会尽快继续研究它。 - guychouk
这是一个不好的做法,除非你准备应对僵尸问题。在fpm/nginx使用情况下,删除任何复杂性是可以接受的。祝你好运。 - Rawkode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接