Cycle de Vie & Architecture

Docker
Système & Réseau
Comprendre l’architecture daemon-client Docker et maîtriser les états de transition des conteneurs.

Un conteneur Docker n’est pas un serveur permanent : c’est un environnement éphémère conçu pour exécuter une tâche ou un service spécifique, puis s’arrêter proprement une fois sa mission accomplie.

Maîtriser le cycle de vie d’un conteneur et ses commandes CLI associées est la première étape indispensable avant d’aborder l’automatisation et l’orchestration.

🔄 Les États du Conteneur

Au cours de son existence, un conteneur passe par plusieurs états distincts pilotés par le Docker Daemon :

Machine à États du Cycle de Vie Docker
  1. Created (Créé) : Le conteneur a été instancié (docker create) mais son processus principal n’a pas encore démarré.
  2. Running (En cours d’exécution) : Le processus principal (PID 1) tourne activement dans le conteneur.
  3. Paused (En pause) : Les processus du conteneur sont suspendus en mémoire via les cgroups Linux.
  4. Stopped / Exited (Arrêté) : Le processus s’est terminé (succès code 0 ou erreur) ou a été stoppé (docker stop). Les données restent sur le disque tant que le conteneur n’est pas supprimé.
  5. Removed (Supprimé) : Le conteneur et sa couche de fichiers temporaires ont été effacés (docker rm).

🧪 Playground Interactif : Console de Commandes CLI

Expérimentez l’exécution des commandes en sélectionnant l’action à réaliser sur le conteneur virtuel mon-serveur :

Console Interactive CLI Docker

Choisissez une commande à exécuter :

Résultat du Terminal Docker

🛠️ Commandes Fondamentales du Cycle de Vie

4.1. Démarrer un Conteneur (docker run)

La commande docker run combine en réalité deux actions : docker create puis docker start.

# Lancer un serveur Web Nginx en arrière-plan (-d) avec un nom personnalisé
docker run -d -p 8080:80 --name mon-serveur nginx
Tip
  • -d (Detached) : Exécute le conteneur en arrière-plan et libère immédiatement votre terminal.
  • -p 8080:80 : Mappe le port 8080 de votre ordinateur (l’hôte) vers le port 80 interne du conteneur.
  • --name : Attribue un nom lisible au lieu de laisser Docker générer un nom aléatoire.

4.2. Observer les Conteneurs (docker ps)

# Lister uniquement les conteneurs ACTIFS (état Running)
docker ps

# Lister TOUS les conteneurs (actifs, arrêtés et échoués)
docker ps -a

4.3. Arrêter et Supprimer (docker stop & docker rm)

# Arrêt propre (envoie un signal SIGTERM puis SIGKILL après 10s)
docker stop mon-serveur

# Arrêt brut et immédiat (SIGKILL)
docker kill mon-serveur

# Supprimer un conteneur arrêté
docker rm mon-serveur

# Forcer l'arrêt ET la suppression en une seule commande
docker rm -f mon-serveur

🔎 Inspection et Diagnostic

Lorsqu’un conteneur ne se comporte pas comme prévu, vous passerez la majorité de votre temps avec ces trois outils d’inspection :

📜 1. Consulter les Logs

Récupère les sorties standards (stdout / stderr) émises par l’application :

docker logs mon-serveur
# Suivre en direct (-f)
docker logs -f mon-serveur
💻 2. Entrer dans le Conteneur

Ouvre un terminal interactif à l’intérieur du conteneur en cours d’exécution :

# -it : Terminal interactif
docker exec -it mon-serveur bash
🔍 3. Inspecter la Config

Affiche toutes les métadonnées JSON (IP, volumes montés, variables d’environnement) :

docker inspect mon-serveur

🧹 Gestion et Nettoyage des Images

Au fur et à mesure des builds et des téléchargements, les images occupent un espace disque considérable. Il est indispensable de savoir faire le ménage.

# Lister toutes les images présentes localement
docker images

# Télécharger une image depuis Docker Hub sans la lancer
docker pull nginx:latest

# Supprimer une image spécifique (par nom ou Image ID)
docker rmi nginx

# Purger toutes les images orphelines (dangling) non utilisées
docker image prune
⚠️ Dépendance image-conteneur

Docker refusera de supprimer une image (docker rmi) si au moins un conteneur (même arrêté) fait référence à cette image. Vous devez toujours supprimer les conteneurs arrêtés (docker rm) avant d’effacer leurs images.