Débutant30 min20 XP
Objectifs de cette leçon
- Comprendre les problèmes du développement traditionnel
- Identifier les avantages de la conteneurisation
- Connaître les cas d'usage de Docker
Pourquoi Docker existe ? 🐳
Le problème « ça marche sur ma machine »
Tu as déjà entendu cette phrase ? C'est le cauchemar de tout développeur. Voici ce qui se passe :
👨💻 Développeur A (macOS) → Fonctionne parfaitement 👨💻 Développeur B (Windows) → Erreur de dépendances 👨💻 Développeur C (Linux) → Version incompatible 🚀 Serveur de production → Plantage total
Pourquoi ? Chaque machine a :
- Une version différente de Python, Node, PHP…
- Des bibliothèques système différentes
- Des variables d'environnement différentes
- Un système d'exploitation différent
Les problèmes du développement traditionnel
1. Dépendances conflictuelles
Projet A a besoin de Python 3.8. Projet B a besoin de Python 3.11. Sur la même machine, c'est un cauchemar :
# Impossible d'installer les deux en même temps ! $ python3.8 --version # Projet A $ python3.11 --version # Projet B # → Conflit de versions
2. Environnements de test différents
| Étapes | Environnement | Problème |
|---|---|---|
| Développement | Machine du dev | Tout fonctionne ✅ |
| QA | Serveur de test | Mismatch de versions ❌ |
| Staging | Serveur staging | Configuration réseau différente ❌ |
| Production | Cloud | OS, firewall, DNS… ❌ |
3. Déploiement manuel
# Le déploiement traditionnel (cauchemar) ssh production-server git pull npm install npm run build cp -r dist/* /var/www/html/ sudo systemctl restart nginx # → Si une étape échoue, on recommence tout 😰
La solution : Docker
Docker résout tous ces problèmes en empaquetant l'application ET toutes ses dépendances dans une boîte isolée appelée conteneur.
┌──────────────────────────────────────────────┐ │ Conteneur Docker │ │ ┌──────────────────────────────────────────┐ │ │ │ App Node.js v18.17 │ │ │ │ + dépendances npm │ │ │ │ + variables d'environnement │ │ │ │ + configuration réseau │ │ │ └──────────────────────────────────────────┘ │ │ ┌──────────────────────────────────────────┐ │ │ │ Système de fichiers minimal (Ubuntu) │ │ │ └──────────────────────────────────────────┘ │ └──────────────────────────────────────────────┘ ↕ Noyau Linux partagé ┌──────────────────────────────────────────────┐ │ Hôte (votre serveur) │ │ Docker Engine + Dockerfile │ └──────────────────────────────────────────────┘
Les avantages concrets de Docker
| Avant Docker | Avec Docker |
|---|---|
| "Ça marche sur ma machine" | "Ça marche partout, toujours" |
| Installation manuelle sur chaque serveur | docker run et c'est parti |
| Versions de dépendances différentes | Chaque conteneur a ses propres versions |
| Déploiement de 2 heures | Déploiement en 30 secondes |
| Serveurs surdimensionnés | Utilisation optimale des ressources |
Docker vs les solutions existantes
Machines virtuelles (VMs)
VMware / VirtualBox : ┌─────────────┐ ┌─────────────┐ │ VM 1 │ │ VM 2 │ │ ┌─────────┐ │ │ ┌─────────┐ │ │ │ App │ │ │ │ App │ │ │ │ OS │ │ │ │ OS │ │ │ └─────────┘ │ │ └─────────┘ │ │ (4 Go) │ │ (4 Go) │ └─────────────┘ └─────────────┘ 8 Go RAM total
Conteneurs Docker
Docker : ┌─────────────┐ ┌─────────────┐ │ App 1 │ │ App 2 │ │ (200 Mo) │ │ (150 Mo) │ └─────────────┘ └─────────────┘ ~400 Mo RAM total
Résultat : Docker est 10 à 50 fois plus léger qu'une VM.
Ce que Docker n'est PAS
- ❌ Ce n'est pas une machine virtuelle
- ❌ Ce n'est pas un remplaçant de Git
- ❌ Ce n'est pas un outil de CI/CD (mais il s'intègre bien avec)
- ✅ C'est un outil d'empaquetage et de distribution
Résumé rapide
| Concept | Explication |
|---|---|
| Conteneur | Boîte isolée contenant une app + ses dépendances |
| Image | Modèle en lecture seule pour créer des conteneurs |
| Dockerfile | Recette pour construire une image |
| Docker Engine | Le moteur qui gère les conteneurs |
| Docker Hub | Registre public d'images (comme GitHub pour le code) |
Exercices 🎯
- Réflexion : Pourquoi un conteneur Docker est-il plus léger qu'une VM ?
- Comparaison : Listez 3 scénarios où Docker résout un vrai problème de développement.
- Concept : Quelle est la différence entre une image et un conteneur ?
Prochaine leçon : On va voir en détail la différence entre machines virtuelles et conteneurs.
Pourquoi Docker ?
Cliquez sur les développeurs
1/3 - Développement traditionnel
Chaque développeur a son propre environnement
A
Alice (Mac)
Node 20, Python 3.12, PostgreSQL 16
B
Bob (Windows)
Node 18, Python 3.11, MySQL 8
C
Charlie (Linux)
Node 22, Python 3.10, SQLite
Étape 1/3