Docker a révolutionné le développement web en permettant d'empaqueter une application avec toutes ses dépendances dans un conteneur portable. Fini les problèmes du type « ça marche sur ma machine » : avec docker, l'environnement est identique partout.
Pourquoi utiliser Docker ?
Les avantages sont immédiats : isolation des environnements, reproductibilité garantie, déploiement simplifié et montée en charge facilitée. Chaque projet peut avoir ses propres versions de PHP, Node, MySQL sans conflits. L'onboarding d'un nouveau développeur se résume à un docker-compose up.
Pour les équipes, docker standardise les environnements de développement, de test et de production. Les images sont versionnées et les déploiements deviennent déterministes.
Concepts fondamentaux
Trois concepts clés : les images (templates en lecture seule), les conteneurs (instances en cours d'exécution d'une image), et les volumes (persistance des données). Une image est construite à partir d'un Dockerfile, un conteneur est créé à partir d'une image.
FROM php:8.3-fpm
WORKDIR /var/www/html
RUN docker-php-ext-install pdo pdo_mysql
COPY . .
RUN chown -R www-data:www-data /var/www/html
Ce Dockerfile crée une image PHP 8.3 avec PDO MySQL, copie votre code et configure les permissions.
Commandes essentielles Docker
docker build -t mon-app:latest . # Construire une image
docker run -p 8080:80 mon-app:latest # Lancer un conteneur
docker ps # Lister les conteneurs actifs
docker stop <id> # Arrêter un conteneur
docker logs <id> # Voir les logs
docker exec -it <id> bash # Entrer dans un conteneur
Maîtriser ces commandes de base suffit pour les cas d'usage quotidiens. Les options -d (detached) et -v (volume) sont les plus utilisées ensuite.
Docker Compose : orchestrer plusieurs services
Docker Compose permet de définir et gérer des applications multi-conteneurs avec un seul fichier YAML :
version: '3.8'
services:
app:
build: .
ports:
- "8080:80"
volumes:
- .:/var/www/html
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_DATABASE: myapp
MYSQL_ROOT_PASSWORD: secret
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
Un seul docker-compose up -d démarre l'application et la base de données, avec persistance des données via les volumes.
Volumes et persistance des données
Les volumes docker permettent de persister les données au-delà du cycle de vie d'un conteneur. Deux types principaux : les volumes nommés (gérés par docker) et les bind mounts (dossier de l'hôte monté dans le conteneur). En développement, les bind mounts permettent d'éditer le code localement avec rechargement automatique.
Optimiser ses images docker
Des images légères sont cruciales pour la vitesse de build et de déploiement. Utilisez des images de base minimales (alpine), regroupez les commandes RUN pour réduire les couches, et profitez du cache docker en plaçant les instructions qui changent rarement en premier.
Le multi-stage build permet de créer des images de production légères en séparant les étapes de build et d'exécution. Le hub.docker.com référence des millions d'images officielles et communautaires.
Docker en production
En production, docker s'associe à des orchestrateurs comme Kubernetes ou Docker Swarm pour la haute disponibilité. Pour des projets de taille modeste, un VPS avec docker-compose et un proxy Nginx suffit parfaitement.
Conclusion
Docker simplifie considérablement le cycle de développement et de déploiement. Commencez par dockeriser un projet existant avec un Dockerfile simple, puis passez à docker-compose pour les projets multi-services. La courbe d'apprentissage est rapide et les bénéfices sont immédiats.
Docker est le point d'entrée vers une culture DevOps moderne. Une fois les bases maîtrisées, Docker Compose orchestre plusieurs services localement en un seul docker-compose up. En production, Kubernetes prend le relais pour l'orchestration à grande échelle. Pensez aux multi-stage builds pour des images de production ultra-légères, et scannez vos images avec docker scout pour détecter les vulnérabilités connues. Les volumes et networks Docker offrent une isolation et une reproductibilité parfaite entre environnements. La documentation officielle Docker est parmi les meilleures de l'industrie open source, avec des tutoriels détaillés pour chaque niveau de compétence.