🖼️ Anatomie de Docker
vs Conteneur From Scratch
Comment Docker orchestre-t-il les primitives du noyau Linux sous le capot ? Et comment le laboratoire manuel "From Scratch" permet-il de démystifier la conteneurisation ?
Comprendre qu'un conteneur n'est pas une machine virtuelle. C'est simplement un processus système isolé à l'aide des Namespaces, limité par les Cgroups et confiné dans un système de fichiers OverlayFS / SquashFS.
Du CLI jusqu'aux Primitives Kernel
L'empilement logiciel de Docker vs l'exécution directe en shell.
- Docker CLI (client `docker run`)
- dockerd (démon principal & API REST/gRPC)
- containerd (gestionnaire de cycle de vie des conteneurs)
- runc (exécuteur OCI de bas niveau)
- Linux Kernel (Kernel Syscalls API)
- Script Bash ou Binaire C/Go manuel
- Appel direct aux commandes noyau : `unshare`, `chroot`, `mount`, `ip netns`
- Pas de démon résident, aucun surcoût d'abstraction
- Exécution immédiate sur les primitives du noyau Linux
Images, SquashFS & OverlayFS
Comment isoler le système de fichiers racine (`rootfs`) ?
Empilement de couches en lecture seule (image tarball/squashfs) fusionnées avec une couche supérieure de conteneur en lecture-écriture (Copy-On-Write).
Extraction d'un système de fichiers Alpine/Ubuntu minimal dans un dossier local, puis pivotement de la racine via `chroot` ou `pivot_root`.
Les 6 Namespaces du Kernel Linux
L'isolation complète de la vue système.
Création transparente de tous les namespaces via la spécification OCI générée par Docker Engine.
- PID : Arborescence de processus isolée (PID 1)
- NET : Interfaces réseau & tables de routage propres
- MNT : Points de montage isolés
- UTS : Nom d'hôte (hostname) indépendant
- IPC : Mémoire partagée isolée
- USER : Mappage des UID/GID
Appel explicite de la commande systeme `unshare` pour instancier les namespaces un par un.
Le Système Réseau & Veth Pairs
Connecter un conteneur au réseau de l'hôte et à Internet.
Création automatique du pont `docker0`, attribution d'IP (IPAM), paires veth et règles iptables MASQUERADE.
Création manuelle de la paire de cartes virtuelles veth, du bridge et du NAT.
Control Groups (cgroups v1/v2)
Empêcher un conteneur de consommer toute la RAM ou le CPU du serveur.
Docker traduit automatiquement ces options en paramètres de cgroups `/sys/fs/cgroup/memory.max` et `/sys/fs/cgroup/cpu.max`.
Ajout direct du PID du processus conteneurisé dans le fichier de contrôle du cgroup.
Capabilities & Seccomp Filters
Pourquoi le root d'un conteneur n'est pas le root de la machine hôte.
- Capabilities Drop : Supprime 30+ capabilités dangereuses par défaut (ex: `CAP_SYS_ADMIN`, `CAP_SYS_RAWIO`).
- Profile Seccomp : Bloque plus de 44 appels système dangereux.
- AppArmor / SELinux : Profil de sécurité actif par défaut.
- Par défaut, un simple `chroot` lancé par root conserve TOUTES les privilèges du noyau (`CAP_SYS_ADMIN`).
- Il faut explicitement utiliser `capsh` ou `setpriv` pour abandonner les capabilités inutiles et appliquer un filtre seccomp.
Tableau Comparatif Brique par Brique
| Brique Fonctionnelle | Sous le Capot (Linux Kernel) | 🧪 From Scratch | Moteur Docker / containerd |
|---|---|---|---|
| Isolation Processus | PID & UTS Namespaces | unshare --pid --uts --fork |
Automatique via OCI runc |
| Système Fichiers | Mount Namespace & OverlayFS | chroot / pivot_root |
Images OCI & OverlayFS / SquashFS |
| Réseau & IP | NET Namespace & Veth/Bridge | ip netns & brctl manuel |
Driver bridge, IPAM & NAT docker0 |
| Limitations RAM/CPU | Control Groups (cgroups v2) | echo PID > /sys/fs/cgroup/... |
Flags --memory et --cpus |
| Sécurité | Capabilities & Seccomp | Héritage Root complet (attention !) | Dropping 30+ caps & Seccomp default |
Pourquoi utiliser Docker en Production ?
Le labo From Scratch donne la compréhension, Docker apporte l'échelle.
📦 Standardisation OCI
Le format d'image OCI est universel et portable sur tout serveur Linux sans réécriture de scripts shell.
🚀 Orchestration & Logs
Redémarrage automatique (`restart: always`), collecte centralisée des journaux et API de monitoring en direct.
🌐 Écosystème Multi-Hôtes
Passage immédiat à Swarm / Kubernetes pour répartir les conteneurs sur des dizaines de serveurs physiques.
Prêt pour l'Expérimentation ?
Mettez les mains dans le cambouis avec nos deux laboratoires dédiés.