Docker containers
| Fiche express | |
|---|---|
| Type | Instance en cours d'exécution d'une image Docker |
| Chaîne d'exécution | Docker CLI → dockerd → containerd → runc |
| Standard | OCI (Open Container Initiative) |
| Isolation | Namespaces (PID, réseau, mount, IPC, UTS) + Cgroups (CPU, mémoire, I/O) |
| Voir aussi | Docker · Docker images · Docker network · Docker namespaces · Docker capabilities |
Un conteneur Docker est une instance en cours d'exécution d'une image : un ou plusieurs processus isolés du reste du système par des Namespaces et limités par des Cgroups. Cette page couvre la chaîne d'exécution et les commandes de manipulation du cycle de vie d'un conteneur ; pour le format d'image et son historique de couches, voir Docker images, pour le réseau et le stockage voir Docker network et Docker volumes.
Prérequis d'usage courant : ajouter l'utilisateur courant au groupe docker pour piloter le démon sans sudo systématique (implique un accès équivalent à root sur l'hôte, à traiter comme tel du point de vue sécurité) :
sudo usermod -aG docker $USER
Chaîne d'exécution (runtime)
Quand un conteneur est démarré, la commande traverse plusieurs couches avant que le conteneur n'existe réellement :
- Docker CLI — commande
dockercôté utilisateur. - dockerd — démon Docker, gère images/réseaux/volumes et délègue l'exécution.
- containerd — runtime de haut niveau, démarre les conteneurs, gère les réseaux/ponts au niveau conteneur.
- runc — runtime OCI de bas niveau, crée effectivement le conteneur en assemblant les primitives noyau :
- Cgroups — limitation des ressources (CPU, mémoire, réseau, priorités).
- Namespaces — isolation (PID, réseau, mount, IPC, UTS — Unix Time Sharing).
L'ensemble suit la spécification OCI (Open Container Initiative, voir le format d'image OCI), ce qui permet à d'autres outils (Podman, Kubernetes via containerd...) d'exécuter les mêmes images et conteneurs sans dépendre du Docker Engine complet.
Cycle de vie d'un conteneur
# créer et démarrer un conteneur simple
docker run busybox echo "hello world!"
# en tâche de fond (-d), avec un nom explicite
docker run --name cont_name -d httpd
docker run -d --name c1 nginx:latest
# interactif, supprimé automatiquement à l'arrêt (--rm)
docker run -it --name c1 --rm nginx:latest
# avec un hostname et un DNS explicites
docker run -it --name c1 --rm --hostname host1 --dns 8.8.8.8 nginx:latest
Actions sur un conteneur déjà créé :
docker start cont_name
docker stop c1
docker rm c1
docker rm -f c1 # forcer la suppression d'un conteneur en cours d'exécution
docker exec -it cont_name bash # ouvrir un shell dans un conteneur actif
Nettoyage en masse de tous les conteneurs (y compris arrêtés) :
docker ps -qa
docker rm -f $(docker ps -qa)
Journalisation
Le pilote de logs et sa taille maximale se règlent au lancement du conteneur (ou globalement dans /etc/docker/daemon.json, voir Docker install CE) :
docker run --log-driver json-file --log-opt max-size=50m nginx
Options courantes
| Option | Effet |
|---|---|
| on-failure|always|unless-stopped | Politique de redémarrage automatique du conteneur |
--rm |
Supprime automatiquement le conteneur à l'arrêt |
--memory 500M |
Limite dure (hard limit) de mémoire — le conteneur ne peut pas dépasser cette valeur |
--memory-reservation 256M |
Limite souple (soft limit) — n'intervient que si l'hôte détecte une contention mémoire |