使用Docker的PHP开发环境

时间:2017-05-10 13:39:24

标签: php nginx docker

我目前正在尝试使用NGINX和PHP-FPM Docker容器设置PHP开发环境。

现在我知道这可以作为运行两种服务的单个容器来完成,或者甚至可以作为多个容器设置来完成,其中每个服务在其自己的容器中运行(这是基于我目前为止的研究)。

我的问题可以分为两个问题:

  1. 如何使用多容器解决方案设置多个不同的 PHP应用并让它们相互通信? 我是否必须为每个PHP-FPM设置一个NGINX容器,或者我可以设置一个NGINX容器并将其与多个不同的PHP-FPM容器一起使用?

  2. 多容器解决方案是否适合开发环境?或者我接近这完全错了?

  3. 在此先感谢,任何提示都将不胜感激!

2 个答案:

答案 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而只允许这两个流程,以消除复杂性。

如果您想沿着多个集装箱路线行驶,请按以下步骤操作:

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