PHP avec nginx se fait généralement en utilisant php-fpm qui est un processus distinct.
Garder l'idée centrale de docker d'un processus (voir la fin de la réponse pour plus de détails sur ce point) par conteneur, il est logique d'avoir le processus nginx et le processus php-fpm dans des conteneurs séparés.
Comme la communication entre nginx et php-fpm se fait via fastcgi, le conteneur php-fpm peut également être sur un hôte séparé, ce qui permet d'utiliser un cluster de conteneurs php-fpm derrière nginx.
Après le mur de commentaires, voici un peu plus de contexte, la documentation de docker contient un paragraphe sur l'idée qu'un conteneur ne devrait avoir qu'une seule préoccupation .
L'idée principale d'un conteneur Linux ( lxc ) est d'exécuter un processus dans un espace de noms isolé au niveau du processeur et de la mémoire, docker ajoute en plus de cela une isolation au niveau du système de fichiers.
L'avantage est que la compromission d'un processus au sein de cet espace de noms ne permettra pas de lire la mémoire d'autres processus et en tant que telle devrait empêcher toute autre compromission sur l'hôte.
Tout en parlant de nginx et de php-fpm, ils fonctionnent en binôme mais chacun a sa propre préoccupation, nginx fera la partie HTTP, le routage, la validation des en-têtes, etc. et php-fpm fera l'interprétation du code et retournera la partie html à nginx . Bien qu'il soit habituel que les deux servent ensemble une seule demande, ce n'est pas obligatoire.
Selon le contexte, il peut être plus facile d'avoir un conteneur comprenant toute la pile d'une application, sur un poste de développeur par exemple. Mais idéalement pour une utilisation en production, essayez de garder le moins d'interaction à l'intérieur du conteneur, avoir des processus séparés dans le même conteneur avec supervord apporte sa part de problème en termes de processus zombie et de gestion des journaux (exemple d'histoire ici à des fins d'illustration uniquement).
Enfin, je vais citer la page d'accueil avec un peu d'emphase:
Même si «un processus par conteneur» est souvent une bonne règle de base, ce n'est pas une règle stricte et rapide. Utilisez votre meilleur jugement pour garder les conteneurs aussi propres et modulaires que possible .
Il n'y a pas de "règle miracle" qui s'applique à tout, c'est toujours un équilibre entre la complexité au sein du conteneur et la complexité orchestrant les conteneurs eux-mêmes.