
Docker : conteneuriser vos applications simplement
Qu'est-ce que Docker ?
Docker est une plateforme open source qui permet de créer, déployer et exécuter des applications dans des conteneurs. Un conteneur embarque tout ce dont une application a besoin pour fonctionner : code, dépendances, bibliothèques et configuration système.
Contrairement aux machines virtuelles, les conteneurs partagent le noyau du système hôte, ce qui les rend beaucoup plus légers et rapides à démarrer.
Installation
Linux (Ubuntu/Debian)
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
Déconnectez-vous puis reconnectez-vous pour appliquer les permissions.
macOS et Windows
Téléchargez et installez Docker Desktop depuis le site officiel.
Vérifier l'installation
docker --version
docker run hello-world
Concepts clés
- Image : un modèle en lecture seule contenant l'application et ses dépendances
- Conteneur : une instance en cours d'exécution d'une image
- Dockerfile : un fichier de recette pour construire une image
- Registry : un dépôt d'images (ex : Docker Hub)
- Volume : un espace de stockage persistant pour les données
Commandes essentielles
Gestion des conteneurs
# Lancer un conteneur
docker run -d --name mon-app -p 8080:80 nginx
# Lister les conteneurs en cours
docker ps
# Lister tous les conteneurs (y compris arrêtés)
docker ps -a
# Arrêter un conteneur
docker stop mon-app
# Redémarrer un conteneur
docker start mon-app
# Supprimer un conteneur
docker rm mon-app
# Voir les logs
docker logs mon-app
# Exécuter une commande dans un conteneur
docker exec -it mon-app bash
Gestion des images
# Télécharger une image
docker pull node:22-alpine
# Lister les images locales
docker images
# Supprimer une image
docker rmi node:22-alpine
# Construire une image depuis un Dockerfile
docker build -t mon-image:latest .
Écrire un Dockerfile
Voici un exemple de Dockerfile pour une application Node.js :
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
Bonnes pratiques pour le Dockerfile
- Utilisez des images légères (
alpine) pour réduire la taille - Exploitez le cache en copiant
package.jsonavant le code source - Utilisez
.dockerignorepour exclure les fichiers inutiles - Minimisez le nombre de couches en combinant les commandes
RUN - N'exécutez pas en root — créez un utilisateur dédié
Exemple de .dockerignore :
node_modules
.git
.env
*.md
Docker Compose
Docker Compose permet de définir et gérer des applications multi-conteneurs via un fichier YAML.
Exemple : application web + base de données
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgres://user:pass@db:5432/mydb
depends_on:
- db
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Commandes Docker Compose
# Démarrer les services
docker compose up -d
# Voir l'état des services
docker compose ps
# Voir les logs
docker compose logs -f
# Arrêter les services
docker compose down
# Reconstruire les images
docker compose build
# Arrêter et supprimer les volumes
docker compose down -v
Build multi-stage
Le build multi-stage permet de créer des images finales plus légères en séparant les étapes de build et d'exécution :
# Étape 1 : Build
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Étape 2 : Production
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Volumes et persistance
Les données dans un conteneur sont éphémères. Pour persister les données, utilisez des volumes :
# Créer un volume nommé
docker volume create mes-donnees
# Monter un volume dans un conteneur
docker run -d -v mes-donnees:/data mon-image
# Monter un dossier local (bind mount)
docker run -d -v $(pwd)/config:/app/config mon-image
# Lister les volumes
docker volume ls
# Supprimer les volumes inutilisés
docker volume prune
Réseau
Docker crée un réseau isolé pour chaque groupe de conteneurs :
# Créer un réseau
docker network create mon-reseau
# Lancer un conteneur sur ce réseau
docker run -d --network mon-reseau --name api mon-api
# Les conteneurs sur le même réseau se trouvent par nom
# Ex : depuis un autre conteneur, "api" résout vers l'IP du conteneur api
Commandes de nettoyage
# Supprimer les conteneurs arrêtés, images inutilisées, volumes orphelins
docker system prune -a
# Voir l'espace disque utilisé par Docker
docker system df
Conclusion
Docker simplifie le déploiement et garantit que votre application fonctionne de manière identique partout — en développement, en test et en production. Avec Docker Compose, vous pouvez orchestrer facilement des architectures multi-services. C'est un outil indispensable dans la boîte à outils de tout développeur moderne.
Articles similaires

Guide Complet : Comment Créer un Projet de Développement Structuré
Apprenez à créer un projet de développement bien structuré. Étapes, organisation, outils et bonnes pratiques pour démarrer sur de bonnes bases.
Similaires

Maîtriser Nginx : Installation, Configuration et Bonnes Pratiques
Découvrez comment installer et configurer Nginx. Guide complet sur les serveurs virtuels, la sécurité, le reverse proxy et l'optimisation des performances web.

fzf : le fuzzy finder qui booste votre productivité en terminal
Découvrez fzf, l'outil en ligne de commande pour rechercher fichiers, historique et bien plus grâce à la recherche floue interactive dans votre terminal.
Similaires
Propres