0 XP
?
Docker : de zéro à professionnel/Pourquoi Docker existe ?
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

ÉtapesEnvironnementProblème
DéveloppementMachine du devTout fonctionne ✅
QAServeur de testMismatch de versions ❌
StagingServeur stagingConfiguration réseau différente ❌
ProductionCloudOS, 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 DockerAvec Docker
"Ça marche sur ma machine""Ça marche partout, toujours"
Installation manuelle sur chaque serveurdocker run et c'est parti
Versions de dépendances différentesChaque conteneur a ses propres versions
Déploiement de 2 heuresDéploiement en 30 secondes
Serveurs surdimensionnésUtilisation 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

ConceptExplication
ConteneurBoîte isolée contenant une app + ses dépendances
ImageModèle en lecture seule pour créer des conteneurs
DockerfileRecette pour construire une image
Docker EngineLe moteur qui gère les conteneurs
Docker HubRegistre public d'images (comme GitHub pour le code)

Exercices 🎯

  1. Réflexion : Pourquoi un conteneur Docker est-il plus léger qu'une VM ?
  2. Comparaison : Listez 3 scénarios où Docker résout un vrai problème de développement.
  3. 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
⚠️ Version différente
C
Charlie (Linux)
Node 22, Python 3.10, SQLite
⚠️ Base différente
Étape 1/3