PHP mit nginx wird normalerweise mit php-fpm ausgeführt, was ein separater Prozess ist.
Unter Beibehaltung der Kernidee des Andockens eines Prozesses (siehe Ende der Antwort für weitere Einzelheiten zu diesem Punkt) pro Container ist es sinnvoll, den Nginx-Prozess und den PHP-FPM-Prozess in getrennten Containern zu haben.
Da die Kommunikation zwischen nginx und php-fpm über fastcgi zustande kommt, kann sich der php-fpm-Container auch auf einem separaten Host befinden. Dies ermöglicht die Verwendung eines Clusters von php-fpm-Containern hinter nginx.
Nachdem der Kommentar hier ein wenig mehr Hintergrundinformationen enthält, enthält die Docker-Dokumentation einen Absatz über die Idee, dass ein Container nur ein Anliegen haben sollte .
Die Hauptidee eines Linux-Containers ( lxc ) besteht darin, einen Prozess in einem isolierten Namespace auf CPU- und Speicherebene auszuführen. Docker fügt zusätzlich eine Isolation auf Dateisystemebene hinzu.
Der Vorteil ist, dass die Komprimierung eines Prozesses in diesem Namespace das Lesen des Speichers anderer Prozesse nicht zulässt und daher eine weitere Komprimierung auf dem Host verhindern sollte.
Wenn von nginx und php-fpm die Rede ist, funktionieren sie paarweise, aber jede hat ihre eigenen Probleme, nginx erledigt den HTTP-Teil, das Routing, die Header-Validierung usw. und php-fpm erledigt die Code-Interpretation und gibt den HTML-Teil an nginx zurück . Es ist zwar üblich, dass beide zusammen eine einzige Anwendung bedienen, die jedoch nicht obligatorisch ist.
Je nach Kontext kann es einfacher sein, einen Container mit dem gesamten Stapel für eine Anwendung auf einer Entwickler-Workstation zu haben, zum Beispiel. Aber ideal für den produktiven Einsatz, versuchen , die weniger Interaktion innerhalb des Behälters zu halten, mit supervisord getrennten Prozesse im selben Behälter mit bringt seinen Anteil an der Problem in der Bezeichnung des Zombie - Prozess und Protokollhandling (exemple Geschichte hier dienen nur zur Illustration).
Zum Schluss zitiere ich die Docker-Seite mit einigen Schwerpunkten:
Während "ein Prozess pro Container" häufig eine gute Faustregel ist, ist es keine harte und schnelle Regel. Verwenden Sie nach bestem Wissen und Gewissen, um die Behälter so sauber und modular wie möglich zu halten .
Es gibt keine "Silver Bullet-Regel", die auf alles zutrifft, es ist immer ein Gleichgewicht zwischen der Komplexität innerhalb des Containers und der Komplexität, die die Container selbst orchestriert.