1. Virtualisation matérielle vs Virtualisation au niveau du noyau

Pour comprendre la légèreté des conteneurs, il convient de contraster leur fonctionnement avec celui d’une machine virtuelle classique :

+-----------------------------------+     +-----------------------------------+
|     MACHINE VIRTUELLE (VM)        |     |         CONTENEUR DOCKER          |
+-----------------------------------+     +-----------------------------------+
| Application Métier A              |     | Application A   | Application B   |
| Dépendances & Bibliothèques       |     | Dépendances A   | Dépendances B   |
| Système d'Exploitation Invité (OS)|     | (Pas d'OS invité dédié)           |
+-----------------------------------+     +-----------------------------------+
| Hyperviseur (Type 1 ou 2)         |     | Moteur de Conteneurs (containerd) |
+-----------------------------------+     +-----------------------------------+
| Système Hôte & Matériel Physique  |     | Noyau Linux Unique de l'Hôte      |
+-----------------------------------+     +-----------------------------------+

Alors qu’une VM charge un noyau complet en mémoire vive (occupant plusieurs gigaoctets et nécessitant des minutes pour démarrer), un conteneur n’est qu’un processus Linux standard isolé, s’exécutant directement sur le noyau de la machine hôte et démarrant en quelques millisecondes.

2. Les briques natives du noyau Linux

L’isolation d’un conteneur repose sur la combinaison de deux mécanismes du noyau Linux :

  • Namespaces (Espaces de noms) : Ils définissent ce qu’un processus peut voir :
    • PID : Le processus se voit attribuer le PID 1 dans son propre espace isolé.
    • NET : Interfaces réseau virtuelles, tables de routage et ports propres au conteneur.
    • MNT : Système de fichiers racine indépendant (chroot moderne).
    • IPC : Isolation des communications inter-processus et de la mémoire partagée.
    • UTS : Nom d’hôte (hostname) personnalisé.
    • USER : Mappage des identifiants (l’utilisateur peut être root dans le conteneur mais un simple utilisateur non privilégié sur l’hôte).
  • Control Groups (cgroups v2) : Ils définissent ce qu’un processus peut consommer, en imposant des plafonds stricts d’utilisation du processeur, de la mémoire vive et de la bande passante disque.

3. Commandes fondamentales du cycle de vie Docker

# Lancer un conteneur avec limites strictes de ressources
docker run -d --name web-swiss 
    --memory="512m" --cpus="1.0" 
    -p 8080:80 
    nginx:alpine

# Inspecter l'allocation et la consommation en direct
docker stats web-swiss

# Exécuter une session de débogage à l'intérieur du conteneur
docker exec -it web-swiss sh

Standard OCI : Docker s’appuie aujourd’hui sur les standards de l’Open Container Initiative (OCI) : le démon de bas niveau runc exécute les conteneurs, piloté par le runtime industriel containerd.