Pourquoi votre projet PHP mérite Docker
\n\nAvez-vous déjà passé une demi-journée à expliquer à un nouveau développeur comment configurer l'environnement ? Ou avez-vous déjà été confronté à une situation où le code fonctionne sur votre localhost, mais échoue sur le serveur ? Cela vous parle ? Alors cet article est pour vous.
Docker n'est pas qu'un simple buzzword à la mode. C'est un outil qui transforme l'expression « ça marche chez moi » en « ça marche chez tout le monde ». Pour un développeur PHP, la conteneurisation est un super-pouvoir : vous empaquetez l'application, le serveur web et la base de données dans des conteneurs légers qui se comportent de manière identique sur n'importe quelle machine.
\n\nDans ce guide, nous n'allons pas lire de théorie ennuyeuse. Nous passons directement à l'action : nous écrirons un Dockerfile pour PHP, configurerons la combinaison Nginx + PHP-FPM + MySQL via Docker Compose et déploierons une application réelle. Et hop, votre projet est prêt pour le déploiement !
\n\nQu'est-ce que la conteneurisation et pourquoi un développeur PHP en a-t-il besoin ?
\n\nImaginez que vous déménagez dans un nouvel appartement. Au lieu de devoir remonter les meubles à chaque fois (installer PHP, configurer Apache, ajouter des modules), vous prenez simplement une boîte prête à l'emploi avec votre environnement. Docker, ce sont ces boîtes. On les appelle des conteneurs.
\n\nC'est particulièrement pertinent pour PHP. Les versions de PHP changent, différentes extensions sont nécessaires (gd, mysqli, redis), et en production, tout doit être stable. La conteneurisation résout trois problèmes majeurs :
\n- \n
- Reproductibilité — l'environnement est identique pour tout le monde : développeur, testeur, serveur. \n
- Isolation — les projets n'entrent pas en conflit (votre ancien site ne se cassera plus jamais à cause d'une mise à jour de PHP). \n
- Simplicité de déploiement — lancement avec une seule commande
docker-compose up. \n
Préparation du Dockerfile pour l'application PHP
\n\nCommençons par l'essentiel : la création de l'image pour notre projet PHP. Supposons que nous ayons une application simple en PHP 8.2 utilisant PDO pour interagir avec MySQL. Voici à quoi ressemble un Dockerfile minimal :
# Utilisation de l'image officielle PHP 8.2 avec FPM\nFROM php:8.2-fpm-alpine\n\n# Installation des paquets système nécessaires\nRUN apk add --no-cache \\\n nginx \\\n supervisor \\\n libpq-dev \\\n && docker-php-ext-install pdo pdo_mysql\n\n# Copie des fichiers de configuration (nous les créerons plus tard)\nCOPY ./docker/nginx.conf /etc/nginx/nginx.conf\nCOPY ./docker/supervisord.conf /etc/supervisord.conf\n\n# Copie du code de l'application\nCOPY . /var/www/html\n\n# Droits d'écriture pour les logs et le cache\nRUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache\n\n# Ouverture des ports\nEXPOSE 80\n\n# Lancement de supervisor (il gérera nginx et php-fpm)\nCMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]\n\nQu'est-ce qui est important ici ? Nous utilisons la version alpine — elle pèse beaucoup moins. Nous installons uniquement les extensions nécessaires via docker-php-ext-install. Et oui, nous utilisons supervisor pour faire tourner à la fois Nginx et PHP-FPM à l'intérieur d'un seul conteneur. C'est pratique pour les petits projets.
Création du fichier de configuration Nginx
\n\nNous devons maintenant configurer le serveur web. Créez le fichier docker/nginx.conf :
worker_processes auto;\nevents {\n worker_connections 1024;\n}\n\nhttp {\n include /etc/nginx/mime.types;\n default_type application/octet-stream;\n\n server {\n listen 80;\n server_name _;\n root /var/www/html/public;\n index index.php index.html;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location ~ \\.php$ {\n fastcgi_pass 127.0.0.1:9000;\n fastcgi_index index.php;\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n include fastcgi_params;\n }\n }\n}\n\nNotez que PHP-FPM écoute sur le port 9000 à l'intérieur du cont