📄 contenu.md 🔒 b0805881…a6cdd6df Se connecter pour télécharger ← Retour
# 7. Virtualisation et conteneurs

Cette section clarifie la distinction fondamentale entre virtualisation
matérielle et conteneurisation, en partant des primitives noyau déjà vues
en section 1 (namespaces, cgroups) jusqu'aux mécanismes d'isolation plus
anciens.

## chroot — l'ancêtre limité

`chroot` change la racine apparente (`/`) d'un processus vers un
sous-répertoire — le processus ne peut plus voir ni référencer de chemin
en dehors. C'est la première forme d'isolation Linux, mais **incomplète** :
un processus root à l'intérieur d'un chroot peut, dans certaines
conditions, en sortir (*chroot escape*), et rien n'isole le réseau, les
PID visibles, ni les ressources consommées — d'où la nécessité des
namespaces et cgroups pour une isolation réellement robuste.

## Conteneurs : composition de primitives noyau, pas une technologie unique

Un « conteneur » n'est pas un objet noyau en soi — c'est la **composition**
de plusieurs mécanismes déjà décrits en section 1 :

- Un **namespace MNT** pour une arborescence de fichiers propre (souvent
  une image en couches, avec `overlayfs` pour superposer une couche
  lecture-seule et une couche d'écriture éphémère).
- Des **namespaces PID/NET/UTS/IPC** pour l'isolation de vue.
- Un **cgroup** pour les limites de ressources.
- Éventuellement un **namespace USER** pour un fonctionnement sans
  privilèges root réels sur l'hôte (*rootless containers*).

Les outils d'espace utilisateur (moteurs de conteneurs) orchestrent cette
composition et ajoutent la gestion d'images, de réseaux virtuels et de
registres — mais l'isolation elle-même est **entièrement** fournie par le
noyau, pas par l'outil.

## Virtualisation matérielle — un noyau invité complet

Une **machine virtuelle** émule (avec extensions matérielles KVM sur les
CPU modernes) un jeu de matériel virtuel complet, sur lequel démarre un
noyau invité indépendant. Différence structurante avec un conteneur :

| | Conteneur | Machine virtuelle |
|---|---|---|
| Noyau | Partagé avec l'hôte | Propre à l'invité |
| Démarrage | Millisecondes | Secondes à dizaines de secondes |
| Isolation | Frontière logicielle (namespaces) | Frontière matérielle (hyperviseur) |
| Empreinte | Légère (processus + overlay) | Lourde (RAM/disque dédiés au noyau invité) |

La frontière d'isolation d'une VM (matérielle, via l'hyperviseur) est
considérée **structurellement plus forte** que celle d'un conteneur
(logicielle, via le noyau partagé) — une faille noyau exploitable
compromet potentiellement tous les conteneurs d'un même hôte, alors
qu'elle ne compromet pas automatiquement les VM voisines.

## KVM — l'hyperviseur intégré au noyau Linux

**KVM** (*Kernel-based Virtual Machine*) transforme le noyau Linux
lui-même en hyperviseur de type 1, en s'appuyant sur les extensions de
virtualisation matérielle du CPU (Intel VT-x / AMD-V). Un processus
d'espace utilisateur (l'émulateur, souvent QEMU) pilote le périphérique
`/dev/kvm` pour exécuter le code de la VM à vitesse quasi native, le noyau
n'intervenant que pour les instructions réellement privilégiées.

*(Schéma disponible : `schema.svg`, dans ce dossier.)*
3.1 Ko BLAKE3 : b0805881…a6cdd6df