在一个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多个进程使用supervisor
,Docker
理念是让每个容器的一个过程。
喜欢的东西:
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/可耻的启发)
的问题是,我们的DevOps希望只是一个单一的码头工人文件,并重新使用其现有的部署堆栈脚本只执行一次docker构建,然后docker运行。规则是一个单一的服务应该有一个单一的dockerfile。如果我必须像上面提到的那样运行多个容器,那么使用docker-compose(我的开发目标是...),但生产环境是另一回事。 – Andy
当我运行在一个容器两个PHP-FPM和nginx的,在fastcgi_pass将指向任何UNIX袜子文件或127.0.0.1:9000 – Andy
如果你真的只需要使用一个图像,你应该从'debian'或'启动alpine“,安装'nginx'和'php-fpm',并运行'supervisord'。 另一种可能性是使用不需要其他进程就可以使用PHP的'apache'。 – Blusky