2017-09-20 57 views
0

我需要將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環境部署。

回答

0

您應該部署兩個容器,一個使用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

相關問題