Débutant35 min25 XP
Objectifs de cette leçon
- Distinguer VMs et conteneurs
- Comprendre l'isolation des processus
- Évaluer les avantages de performance des conteneurs
Machines virtuelles vs conteneurs 🖥️
Architecture des machines virtuelles
Une VM contient tout un système d'exploitation complet :
┌─────────────────────────────────────────────────┐ │ HYPERVISEUR │ │ (VMware, VirtualBox, Hyper-V, KVM) │ ├───────────────┬───────────────┬──────────────────┤ │ VM 1 │ VM 2 │ VM 3 │ │ ┌───────────┐ │ ┌───────────┐ │ ┌──────────────┐ │ │ │ App │ │ │ App │ │ │ App │ │ │ ├───────────┤ │ ├───────────┤ │ ├──────────────┤ │ │ │ Bins │ │ │ Bins │ │ │ Bins │ │ │ ├───────────┤ │ ├───────────┤ │ ├──────────────┤ │ │ │ Guest OS │ │ │ Guest OS │ │ │ Guest OS │ │ │ │ (Ubuntu) │ │ │ (CentOS) │ │ │ (Debian) │ │ │ └───────────┘ │ └───────────┘ │ └──────────────┘ │ │ ~4 Go │ ~2 Go │ ~3 Go │ └───────────────┴───────────────┴──────────────────┘ │ Host OS │ │ (Hyperviseur) │ └───────────────────────────────────────────────────┘
Problème : Chaque VM a son propre OS = gourmand en ressources.
Architecture des conteneurs Docker
┌─────────────────────────────────────────────────┐ │ DOCKER ENGINE │ ├───────────────┬───────────────┬──────────────────┤ │ Conteneur 1 │ Conteneur 2 │ Conteneur 3 │ │ ┌───────────┐ │ ┌───────────┐ │ ┌──────────────┐ │ │ │ App │ │ │ App │ │ │ App │ │ │ ├───────────┤ │ ├───────────┤ │ ├──────────────┤ │ │ │ Bins │ │ │ Bins │ │ │ Bins │ │ │ └───────────┘ │ └───────────┘ │ └──────────────┘ │ │ ~100 Mo │ ~80 Mo │ ~120 Mo │ └───────────────┴───────────────┴──────────────────┘ │ Noyau Linux partagé │ └───────────────────────────────────────────────────┘
Avantage : Pas d'OS invité = léger et rapide.
Comparaison détaillée
| Critère | Machine virtuelle | Conteneur Docker |
|---|---|---|
| Taille | 1 à 10 Go | 10 Mo à 500 Mo |
| Temps de démarrage | 30 sec à 5 min | < 1 seconde |
| Isolation | Niveau OS complet | Niveau processus |
| Performance | ~80% de l'hôte | ~98% de l'hôte |
| Portabilité | Limitée (format VM) | Totale (image Docker) |
| Ressources | Gourmande | Économe |
Comprendre l'isolation
VM : Isolation forte
Chaque VM a son propre noyau Linux. C'est comme avoir plusieurs ordinateurs virtuels :
VM 1 : noyau Linux 5.15 VM 2 : noyau Linux 6.2 → Deux noyaux différents, deux mémoires, deux CPU virtuels
Conteneur : Isolation légère
Tous les conteneurs partagent le même noyau de l'hôte :
Conteneur 1 : Ubuntu 22.04 (fichiers système) Conteneur 2 : Alpine Linux 3.18 (fichiers système) → Même noyau, processus isolés, namespaces séparés
Les namespaces Linux (isolation des conteneurs)
Docker utilise les namespaces pour isoler les processus :
| Namespace | Ce qu'il isole | Exemple |
|---|---|---|
| PID | ID des processus | Chaque conteneur voit son PID 1 |
| NET | Interface réseau | Chaque conteneur a sa propre IP |
| MNT | Système de fichiers | Chaque conteneur a sa racine |
| USER | Utilisateurs | root dans le conteneur ≠ root sur l'hôte |
| UTS | Hostname | Chaque conteneur a son nom |
Cas d'usage : quand utiliser quoi ?
Utilise une VM quand…
- Tu as besoin d'un OS différent (Windows sur Linux)
- Tu dois exécuter du code qui nécessite un noyau modifié
- Tu as besoin d'une isolation maximale (sécurité)
Utilise Docker quand…
- Tu veux déployer rapidement des applications
- Tu veux des environnements reproductibles
- Tu veux maximiser l'utilisation des ressources serveur
- Tu veux des environnements de développement identiques
Résumé
| VM | Docker |
|---|---|
| Lourd, lent, isolated | Léger, rapide, partagé |
| Gourmand en RAM | Économe en RAM |
| Déploiement long | Déploiement instantané |
| Bon pour les environnements complets | Bon pour les applications |
Exercices 🎯
- Architecture : Pourquoi les conteneurs sont-ils plus performants que les VMs ?
- Sécurité : Dans quel cas l'isolation d'une VM est-elle préférable à celle d'un conteneur ?
- Concept : Qu'est-ce qu'un namespace Linux et pourquoi Docker en a-t-il besoin ?
Prochaine leçon : Installation de Docker et premières commandes pratiques.
VM vs Conteneurs
Cliquez pour comparer🖥️ Matériel physique (serveur)
💿 OS Hôte (Linux)
🔲 Hyperviseur (VirtualBox / VMware)
VM 1 : Ubuntu
OS invité complet
Kernel dédié
Go de RAM
Kernel dédié
Go de RAM
VM 2 : Windows
OS invité complet
Kernel dédié
Go de RAM
Kernel dédié
Go de RAM
VM 3 : Fedora
OS invité complet
Kernel dédié
Go de RAM
Kernel dédié
Go de RAM
❌ Lourd : chaque VM embarque son propre OS et kernel
VM : plusieurs Go, démarrage en minutes Conteneur : quelques Mo, démarrage en secondes