Passer au contenu principal

Introduction (Docker)

Docker et la conteneurisation

Docker ne crée pas des machines virtuelles. Il isole des processus en utilisant les primitives du noyau Linux : namespaces pour l'isolation, cgroups pour les ressources, overlayfs pour le système de fichiers. Comprendre cette différence fondamentale évite la majorité des erreurs de conception.

Containers vs machines virtuelles

Une VM embarque un noyau complet et un OS invité. Un container partage le noyau de l'hôte et n'isole que l'espace utilisateur. Résultat : démarrage en millisecondes, overhead mémoire minimal, densité 10 à 20 fois supérieure sur le même hardware.

  • VM : isolation complète, noyau propre, démarrage en secondes, overhead ~512 Mo minimum
  • Container : isolation partielle (namespaces), noyau partagé, démarrage quasi-instantané, overhead quelques Mo

La contrepartie : un container compromis peut potentiellement affecter l'hôte via des failles noyau. La surface d'attaque est différente, pas nulle.

Architecture Docker

Docker repose sur une architecture client-serveur :

  • dockerd : le daemon, processus serveur qui gère les containers, images, volumes et réseaux
  • docker CLI : client qui communique avec dockerd via socket Unix (/var/run/docker.sock) ou TCP
  • containerd : runtime OCI sous-jacent, géré par dockerd
  • Registry : stockage et distribution des images (Docker Hub, GHCR, registries privés)

OCI et containerd

Docker a contribué à standardiser les containers via l'Open Container Initiative (OCI). Les specs OCI définissent le format d'image et le runtime. containerd est le runtime OCI de référence. Cette standardisation signifie que les images Docker fonctionnent avec Podman, Kubernetes, et n'importe quel runtime OCI compatible.

Cas d'usage

  • Environnements reproductibles : l'image contient tout, ça tourne partout pareil
  • Isolation applicative : plusieurs versions d'une dépendance sur le même hôte sans conflit
  • Déploiement simplifié : une image = un artefact déployable, pas de "ça marche sur ma machine"
  • Microservices : chaque service dans son container, scalable indépendamment
  • CI/CD : environnements de build reproductibles, tests isolés