Architecture Docker
Docker n'est pas un programme monolithique. Il est composé de plusieurs éléments qui communiquent entre eux. Comprendre cette architecture aide à diagnostiquer les problèmes et à sécuriser le déploiement.
Les composants
graph LR
CLI[Docker CLI
client]
API[Docker API
REST]
D[Docker Daemon
dockerd]
C[containerd]
R[runc
OCI runtime]
IMG[Images
/var/lib/docker]
REG[Registry
Docker Hub / privé]
CLI -->|docker run| API
API --> D
D --> C
C --> R
R -->|crée| CNT[Conteneur]
D <-->|pull/push| REG
D --> IMG
- Docker CLI : le client en ligne de commande (
docker run,docker ps...). Envoie des requêtes à l'API. - Docker Daemon (dockerd) : le service principal. Gère les images, conteneurs, volumes, réseaux.
- containerd : runtime de conteneurs de haut niveau (géré par la CNCF, utilisé aussi par Kubernetes).
- runc : runtime de bas niveau qui crée réellement les conteneurs (namespaces/cgroups).
- Registry : dépôt d'images (Docker Hub = registre public, possibilité d'un registre privé).
Images vs conteneurs
Image = template en lecture seule (recette)
Conteneur = instance en cours d'exécution d'une image (plat cuisiné)
Une image est composée de layers (couches) en lecture seule. Quand un conteneur démarre, Docker ajoute une couche d'écriture par-dessus.
┌──────────────────┐ ← Couche R/W du conteneur (éphémère)
├──────────────────┤ ← Layer app (votre code)
├──────────────────┤ ← Layer Python 3.11
├──────────────────┤ ← Layer Ubuntu 22.04 base
└──────────────────┘ ← Layer scratch (vide)