在一个dockerfile中将PHP-fpm与nginx结合起来

问题描述:

我需要将php-fpm与nginx结合在一个dockerfile中进行生产部署。在一个dockerfile中将PHP-fpm与nginx结合起来

因此,它是更好地:

(1)使用PHP启动dockerfile:7.1.8-FPM,然后在它上面安装nginx的图像层? (2)或者你推荐使用nginx映像,然后使用apt-get安装php-fpm?

PS:我没有用于生产部署的docker-compose构建选项。在我的开发环境中,我已经使用docker-compose并从两个图像轻松构建多容器应用程序。我们的组织devops不支持基于docker-compose的prod环境部署。

您应该部署两个容器,一个使用fpm,另一个使用nginx,并且应该链接它们。即使 可以以相同的容器内monitore多个进程使用supervisorDocker理念是让每个容器的一个过程。

喜欢的东西:

docker run --name php -v ./code:/code php:7-fpm 
docker run --name nginx -v ./code:/code -v site.conf:/etc/nginx/conf.d/site.conf --link php nginx:latest 

随着site.conf

server { 
    index index.php index.html; 
    server_name php-docker.local; 
    error_log /var/log/nginx/error.log; 
    access_log /var/log/nginx/access.log; 
    root /code; 

    location ~ \.php$ { 
     try_files $uri =404; 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass php:9000; 
     fastcgi_index index.php; 
     include fastcgi_params; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     fastcgi_param PATH_INFO $fastcgi_path_info; 
    } 
} 

(由http://geekyplatypus.com/dockerise-your-php-application-with-nginx-and-php7-fpm/可耻的启发)

+0

的问题是,我们的DevOps希望只是一个单一的码头工人文件,并重新使用其现有的部署堆栈脚本只执行一次docker构建,然后docker运行。规则是一个单一的服务应该有一个单一的dockerfile。如果我必须像上面提到的那样运行多个容器,那么使用docker-compose(我的开发目标是...),但生产环境是另一回事。 – Andy

+0

当我运行在一个容器两个PHP-FPM和nginx的,在fastcgi_pass将指向任何UNIX袜子文件或127.0.0.1:9000 – Andy

+1

如果你真的只需要使用一个图像,你应该从'debian'或'启动alpine“,安装'nginx'和'php-fpm',并运行'supervisord'。 另一种可能性是使用不需要其他进程就可以使用PHP的'apache'。 – Blusky