2017-09-20 3 views
0

Ich muss php-fpm mit nginx in einer Dockerdatei für die Produktionsbereitstellung kombinieren.PHP-fpm mit nginx in einer Dockerdatei kombinieren

So ist es besser zu:

(1) Starten Sie den dockerfile mit PHP: 7.1.8-fpm und dann nginx Bildschicht oben drauf installieren?

(2) Oder empfehlen Sie, nginx image zu verwenden und dann php-fpm mit apt-get zu installieren?

PS: Ich habe keine Docker-Compose-Build-Option für die Produktionsbereitstellung. In meiner Entwicklungsumgebung verwende ich bereits docker-compose und erstelle Multi-Container-App einfach aus zwei Bildern. Unsere Organisationsentwickler unterstützen keine Docker-Compose-basierte Bereitstellung für die Prod-Umgebung.

Antwort

0

Sie sollten zwei Container bereitstellen, einen mit fpm, den anderen mit nginx, und Sie sollten sie verknüpfen. Auch wenn Sie supervisor verwenden können, um mehrere Prozesse innerhalb des gleichen Containers zu überwachen, ist Docker Philosophie, einen Prozess pro Container zu haben.

Etwas wie:

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 

Mit site.conf mit

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; 
    } 
} 

(Beschämenderweise von http://geekyplatypus.com/dockerise-your-php-application-with-nginx-and-php7-fpm/ inspiriert)

+0

Das Problem ist, dass unsere DevOps nur eine einzige Docker Datei will und ihre vorhandenen Bereitstellung wiederverwenden Stapelskript, das nur das Andockfenster einmal erstellt und dann Andockfenster ausführt. Die Regel besagt, dass ein einzelner Dienst eine einzige Dockerdatei haben sollte. Wenn ich die mehreren Container wie oben erwähnt ausführen muss, ist es einfacher, docker-compose zu verwenden (was ich für die Entwicklung habe ... aber Produktion env ist eine andere Sache). – Andy

+0

Wenn ich sowohl php-fpm als auch nginx in einem Container laufe, zeigt fastcgi_pass auf eine Unix-Sock-Datei oder 127.0.0.1:9000 – Andy

+1

Wenn Sie wirklich nur ein Bild verwenden müssen, sollten Sie mit 'debian' oder' anfangen alpine', installiere sowohl 'nginx' als auch' php-fpm' und starte 'supervisord'. Eine andere Möglichkeit ist die Verwendung von 'apache', die keinen anderen Prozess benötigt, um PHP zu verwenden. – Blusky

Verwandte Themen