# 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.)*