VM vs conteneurs : comprendre la différence
Avant Docker, déployer une application signifiait souvent provisionner une machine virtuelle complète. Les conteneurs proposent une approche radicalement différente — plus légère, plus rapide, mais avec ses propres contraintes.
La machine virtuelle : isolation totale
Une VM émule un ordinateur complet (CPU, RAM, disque, réseau) sur un hyperviseur (VMware ESXi, Hyper-V, VirtualBox). Chaque VM embarque son propre système d'exploitation invité.
┌─────────────────────────────────────┐
│ VM 1 (Ubuntu) VM 2 (Windows) │
│ ┌───────────┐ ┌──────────────┐ │
│ │ App + OS │ │ App + OS │ │
│ └───────────┘ └──────────────┘ │
│ Hyperviseur (Type 1/2) │
│ Hardware │
└─────────────────────────────────────┘
Avantage : isolation totale, OS différents sur le même hôte. Inconvénient : démarrage en minutes, empreinte mémoire lourde (OS invité = 512 Mo à 4 Go).
Le conteneur : isolation légère
Un conteneur partage le noyau Linux de l'hôte (pas de second OS). Il utilise deux mécanismes noyau :
- namespaces : isolent les processus, le réseau, le système de fichiers (chaque conteneur "voit" son propre univers)
- cgroups : limitent les ressources CPU et RAM attribuées
graph TD
HW[Hardware]
OS[OS Linux hôte + noyau partagé]
DE[Docker Engine / containerd]
C1[Conteneur 1
App + libs]
C2[Conteneur 2
App + libs]
C3[Conteneur 3
App + libs]
HW --> OS --> DE
DE --> C1
DE --> C2
DE --> C3
Avantage : démarrage en secondes, empreinte mémoire faible (quelques Mo pour les libs applicatives uniquement). Inconvénient : tous les conteneurs partagent le même noyau Linux (pas de Windows dans un conteneur Linux).