Diapositive 1 / 10

🖼️ 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 ?

🎯 Objectif Pédagogique :

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.

Diapositive 2 / 10 · L'Architecture Globale

Du CLI jusqu'aux Primitives Kernel

L'empilement logiciel de Docker vs l'exécution directe en shell.

🐳 Docker (Industrialisé)
  • 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)
🛠️ From Scratch (Laboratoire)
  • 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
Diapositive 3 / 10 · Système de Fichiers

Images, SquashFS & OverlayFS

Comment isoler le système de fichiers racine (`rootfs`) ?

🐳 Docker & OverlayFS / SquashFS

Empilement de couches en lecture seule (image tarball/squashfs) fusionnées avec une couche supérieure de conteneur en lecture-écriture (Copy-On-Write).

lowerdir=/var/lib/docker/overlay2/layer1:layer2 upperdir=/var/lib/docker/overlay2/container-rw workdir=/var/lib/docker/overlay2/work mount -t overlay overlay -o lowerdir=...,upperdir=... /merged
🛠️ From Scratch & Rootfs/chroot

Extraction d'un système de fichiers Alpine/Ubuntu minimal dans un dossier local, puis pivotement de la racine via `chroot` ou `pivot_root`.

mkdir -p /tmp/my-rootfs tar -xf alpine-minirotfs.tar.gz -C /tmp/my-rootfs mount -t proc proc /tmp/my-rootfs/proc chroot /tmp/my-rootfs /bin/sh
Diapositive 4 / 10 · Isolation Processus

Les 6 Namespaces du Kernel Linux

L'isolation complète de la vue système.

🐳 Docker (Automatisé par runc)

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
🛠️ From Scratch (unshare)

Appel explicite de la commande systeme `unshare` pour instancier les namespaces un par un.

unshare --mount \ --uts \ --ipc \ --net \ --pid \ --fork \ chroot /tmp/my-rootfs /bin/sh
Diapositive 5 / 10 · Réseau Virtuel

Le Système Réseau & Veth Pairs

Connecter un conteneur au réseau de l'hôte et à Internet.

🐳 Docker (libnetwork & docker0)

Création automatique du pont `docker0`, attribution d'IP (IPAM), paires veth et règles iptables MASQUERADE.

docker run -p 8080:80 nginx # Docker configure automatiquement : # 1. Pont docker0 (172.17.0.1/16) # 2. Veth pair liée au namespace net du conteneur # 3. Transfert de port iptables : -A PREROUTING -p tcp --dport 8080 -j DNAT
🛠️ From Scratch (ip netns & brctl)

Création manuelle de la paire de cartes virtuelles veth, du bridge et du NAT.

ip link add br0 type bridge ip link add veth-host type veth peer name veth-guest ip link set veth-guest netns <PID> ip addr add 192.168.1.1/24 dev br0 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
Diapositive 6 / 10 · Limitations des Ressources

Control Groups (cgroups v1/v2)

Empêcher un conteneur de consommer toute la RAM ou le CPU du serveur.

🐳 Docker (Flags de ressource)
docker run -m 512m --cpus="1.5" --pids-limit=100 nginx

Docker traduit automatiquement ces options en paramètres de cgroups `/sys/fs/cgroup/memory.max` et `/sys/fs/cgroup/cpu.max`.

🛠️ From Scratch (Système de fichiers cgroup)
mkdir /sys/fs/cgroup/mon-conteneur echo "536870912" > /sys/fs/cgroup/mon-conteneur/memory.max echo "<PID_DU_CONTENEUR>" > /sys/fs/cgroup/mon-conteneur/cgroup.procs

Ajout direct du PID du processus conteneurisé dans le fichier de contrôle du cgroup.

Diapositive 7 / 10 · Sécurité & Confinement

Capabilities & Seccomp Filters

Pourquoi le root d'un conteneur n'est pas le root de la machine hôte.

🐳 Docker (Confinement Sécurisé)
  • 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.
🛠️ From Scratch (Attention aux privilèges !)
  • 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.
Diapositive 8 / 10 · Matrice Synthétique

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
Diapositive 9 / 10 · Conclusion Théorique

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.

Diapositive 10 / 10 · Passage à la Pratique

Prêt pour l'Expérimentation ?

Mettez les mains dans le cambouis avec nos deux laboratoires dédiés.

🧪  From Scratch

🧪 Conteneur From Scratch →

Construisez vous-même votre propre moteur de conteneur en bash avec `unshare` et `chroot` !

ÉPISODE 2

🐳 Épisode Docker (Restauration 5s) →

Découvrez comment La Table Ronde & Cornucopia ont adopté Docker suite au premier piratage.

Diapo 1 / 10