Déployer une première application avec Docker Compose 🚀
Déploie ta première application multi-services avec Docker Compose grâce à un exemple concret NGINX + PHP. Structure ton projet, fais communiquer tes containers et comprends enfin comment Docker Compose fonctionne en pratique 🚀
Maintenant que Docker et Docker Compose sont installés, il est temps de passer à quelque chose de concret. Comprendre la théorie, c’est bien. Déployer une vraie application, c’est mieux.
Dans cet article, on va déployer une application très simple mais réaliste : un combo NGINX + PHP, avec un simple fichier index.php. L’objectif n’est pas de construire une usine à gaz, mais de comprendre comment plusieurs services Docker fonctionnent ensemble grâce à Docker Compose.
👉 Si ce n’est pas encore fait, je te conseille de lire d’abord :
Pourquoi NGINX + PHP ?
C’est un cas très courant :
- NGINX sert les requêtes HTTP
- PHP-FPM exécute le code PHP
- Les deux services communiquent entre eux
C’est simple, parlant, et très représentatif d’une stack web classique.
Structure du projet
On commence par organiser proprement le projet :
nginx-php/
├── docker-compose.yml
├── nginx/
│ └── default.conf
└── app/
└── index.php
Cette structure permet de bien séparer :
- la configuration NGINX
- le code applicatif
- la configuration Docker
Le fichier index.php
Dans le dossier app, crée un fichier index.php :
<?php
echo "Docker Compose fonctionne !";
phpinfo();
Rien de complexe ici. Ce fichier nous permet simplement de vérifier que PHP est bien exécuté via NGINX.
Configuration NGINX
Dans le dossier nginx, crée le fichier default.conf :
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass php:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Ici, NGINX ne fait qu’une chose : transmettre les fichiers PHP au service PHP-FPM.
Le docker-compose.yml
C’est le cœur du projet.
version: "3.9"
services:
nginx:
image: nginx:alpine
container_name: nginx
ports:
- "8080:80"
volumes:
- ./app:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
php:
image: php:8.3-fpm
container_name: php
volumes:
- ./app:/var/www/html
Quelques points importants :
- NGINX et PHP sont deux services distincts
- Ils partagent le même volume pour le code
depends_ongarantit que PHP démarre avant NGINX- La communication se fait via le nom du service (
php)
Lancer l’application
Depuis la racine du projet :
docker compose up -d
Vérifie que tout tourne :
docker compose ps
Puis ouvre ton navigateur sur :
http://IP_DU_SERVEUR:8080
Si tout est correct, tu devrais voir ton message et la page phpinfo() 🎉
Voir les logs
En cas de problème (ou juste par curiosité), les logs sont très utiles :
docker compose logs -f
Tu verras rapidement si l’erreur vient de NGINX ou de PHP.
Arrêter proprement le projet
Quand tu as terminé :
docker compose down
Les containers sont arrêtés, mais les fichiers restent en place. Tu peux relancer le projet quand tu veux.
Erreurs fréquentes
Quelques pièges classiques :
- oublier de monter le volume du code
- se tromper dans le nom du service PHP dans NGINX
- modifier un container au lieu du fichier
docker-compose.yml
👉 rappelle-toi : Docker Compose est la source de vérité.
Conclusion
Avec ce simple projet NGINX + PHP, tu viens de déployer une vraie application multi-services avec Docker Compose. Tu comprends maintenant comment les services communiquent, comment les volumes fonctionnent et comment structurer un projet proprement.
Dans le prochain article, on fera exactement la même chose… mais avec Portainer, pour voir comment gérer cette stack via une interface graphique sans perdre le contrôle 🚀