Environnement de développement PHP utilisant Docker

J’essaie actuellement de configurer un environnement de développement PHP en utilisant les conteneurs NGINX et PHP-FPM Docker.

Maintenant, je sais que cela peut être accompli soit en tant que conteneur unique exécutant les deux services, ou même en tant que configuration à plusieurs conteneurs où chaque service s’exécute dans son propre conteneur (basé sur mes recherches jusqu’à présent).

Mon problème peut être divisé en deux questions:

  1. Comment pourrait-on configurer plusieurs applications PHP différentes et les faire communiquer entre elles, en utilisant la solution à conteneurs multiples? Dois-je configurer un conteneur NGINX pour chaque composant PHP-FPM ou puis-je configurer un conteneur NGINX et l’utiliser avec plusieurs fichiers PHP-FPM différents?

  2. La solution de conteneur multiple est-elle une bonne solution pour un environnement de développement? Ou est-ce que j’aborde complètement ce problème?

Merci d’avance, tout conseil serait apprécié!

Puisque vous vous posez des questions sur l’environnement multi-conteneur, je pense que vous utilisez Docker Composer pour votre application. Répondre à votre question plus en détail.

1) Disons que nous avons trois conteneurs dans docker composent, un pour nginx, un conteneur fpm pour laravel et un autre conteneur fpm pour magento. alors, votre docker composera le fichier. L’extrait ci-dessous n’est qu’un exemple

nginx: image: nginx:latest ports: - "80:80" - "443:443" links: - "fpmlaravel" - "fpmmagento" fpmlaravel: image: php:latest volumes: - ./data/laravel/:/var/www/laravel links: - "nginx" fpmmagento: image: php:latest volumes: - ./data/magentoroot/:/var/www/magento links: - "nginx" 

Le fichier nginx vhost pour magento serait

 # PHP back end upstream backend { server fpmmagento:9000; } server { listen 80; server_name www.magento.dev magento.dev; root /var/www/magento; location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass backend; fastcgi_index index.php; include fastcgi_params; fastcgi_param HTTPS $fastcgi_https; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param MAGE_RUN_TYPE $mage_type; fastcgi_param MAGE_RUN_CODE $mage_code; } } 

Pour fpm, assurez-vous que l’image fpm écoute sur le port 9000.

2) Oui, il est possible d’avoir un conteneur nginx, qui achemine les différents backends fpm, en fonction de nginx vhosts. Mais en général, cela est considéré comme une mauvaise pratique, l’idée principale derrière docker étant de séparer vos applications.

Exécution de plusieurs processus dans un seul conteneur:

Ceci est généralement considéré comme une pratique courante, mais nous devons prendre en compte le fait que nginx et fpm doivent travailler ensemble. Vous pouvez utiliser des volumes partagés et les séparer, mais je préférerais plutôt voir les utilisateurs utiliser --init et autoriser les deux processus à supprimer la complexité.

Si vous souhaitez suivre l’itinéraire à plusieurs conteneurs, procédez comme suit:

  1. Ajouter un service (nginx) avec un seul fichier index.php , qui peut être vide
  2. Assurez-vous que nginx transmet toutes les requêtes *.php au conteneur php , en utilisant son nom de service
  3. Votre conteneur fpm , appelé php aura besoin de tout le code source, dans le même chemin que votre indx.php nginx .