
Le cycle de vie d'un conteneur : créer, démarrer, arrêter, supprimer
Maîtrisez les différentes étapes du cycle de vie d'un conteneur Docker, des commandes de création et démarrage à celles d'arrêt et de suppression. Gérez efficacement vos instances.
Comprendre les étapes de vie d'un conteneur
Un conteneur Docker, comme tout processus ou service, possède un cycle de vie défini. Comprendre les différentes étapes par lesquelles un conteneur passe et les commandes associées est fondamental pour gérer efficacement vos applications conteneurisées. Ce cycle de vie englobe principalement la création, le démarrage, l'arrêt et la suppression de l'instance.
Chaque état représente une phase distincte dans l'existence du conteneur, depuis sa conception initiale basée sur une image jusqu'à sa disparition définitive du système hôte. Maîtriser ces transitions vous permettra de contrôler précisément le comportement de vos applications, de dépanner les problèmes et d'optimiser l'utilisation des ressources.
Nous allons passer en revue les commandes Docker essentielles qui correspondent à chaque phase majeure du cycle de vie, en expliquant ce qui se passe sous le capot à chaque étape.
De la naissance à l'activité : création et démarrage
La première étape potentielle est la création. La commande `docker create [IMAGE]` prépare tout le nécessaire pour lancer un conteneur à partir d'une image spécifiée. Elle met en place le système de fichiers (couches de l'image + nouvelle couche inscriptible), configure le réseau et prépare l'environnement d'exécution, mais ne démarre pas le processus principal du conteneur. Le conteneur existe alors dans un état "créé" (Created). Cette commande est moins utilisée directement mais est implicite dans `docker run`.
Vient ensuite le démarrage. Si un conteneur est à l'état "créé" ou "arrêté" (Exited), vous pouvez le démarrer avec la commande `docker start [CONTENEUR_ID_OU_NOM]`. Cette commande lance le processus principal défini dans l'image (par l'instruction `CMD` ou `ENTRYPOINT` du Dockerfile). Le conteneur passe alors à l'état "en cours d'exécution" (Up).
La commande la plus courante, `docker run [IMAGE]`, combine en fait ces deux étapes : elle crée un nouveau conteneur à partir de l'image spécifiée, puis le démarre immédiatement. C'est souvent le point d'entrée pour lancer une nouvelle instance. Par exemple :
docker run nginx crée et démarre un conteneur basé sur l'image officielle Nginx. Le conteneur s'exécute jusqu'à ce que son processus principal se termine ou qu'il soit explicitement arrêté.Mise en pause et fin de vie : arrêt et suppression
Pour arrêter un conteneur en cours d'exécution, vous utilisez principalement la commande `docker stop [CONTENEUR_ID_OU_NOM]`. Par défaut, cette commande envoie un signal `SIGTERM` au processus principal du conteneur, lui demandant de s'arrêter proprement. Docker attend ensuite un certain délai (10 secondes par défaut) ; si le processus n'est pas terminé, il envoie un signal `SIGKILL` pour le forcer à s'arrêter. Le conteneur passe alors à l'état "arrêté" (Exited).
Dans certains cas, si un conteneur ne répond pas ou doit être arrêté immédiatement, vous pouvez utiliser `docker kill [CONTENEUR_ID_OU_NOM]`. Cette commande envoie directement le signal `SIGKILL` au processus principal, provoquant un arrêt brutal. Il est généralement préférable d'utiliser `docker stop` pour permettre à l'application de sauvegarder son état si nécessaire.
Une fois qu'un conteneur est arrêté (état "Exited"), il existe toujours sur le système et occupe de l'espace disque (principalement sa couche inscriptible). Pour le supprimer définitivement, vous devez utiliser la commande `docker rm [CONTENEUR_ID_OU_NOM]`. Attention : cette action est irréversible et supprime la couche inscriptible du conteneur. Toutes les données écrites dans cette couche qui n'ont pas été sauvegardées via des volumes seront perdues. On ne peut supprimer qu'un conteneur arrêté. Pour supprimer un conteneur en cours d'exécution en une seule fois (arrêt forcé puis suppression), on peut utiliser `docker rm -f [CONTENEUR_ID_OU_NOM]`, mais c'est généralement déconseillé en production.
Il existe aussi des états intermédiaires moins fréquents comme "Paused" (obtenu avec `docker pause`, qui suspend tous les processus dans le conteneur via cgroups) et "Restarting". L'état principal après exécution ou arrêt est "Exited", souvent accompagné d'un code de sortie (0 pour succès, autre chose pour une erreur).
Visualiser et gérer l'état des conteneurs
Pour savoir dans quel état se trouvent vos conteneurs, la commande `docker ps` est votre meilleure alliée. Par défaut, `docker ps` n'affiche que les conteneurs actuellement en cours d'exécution (état "Up").
Pour voir tous les conteneurs, y compris ceux qui sont arrêtés (état "Created" ou "Exited"), utilisez l'option `-a` :
docker ps -a Cette commande affiche des informations utiles comme l'ID du conteneur, l'image utilisée, la commande exécutée, le moment de la création, l'état actuel et les ports mappés.Maîtriser ce cycle de vie (`create` -> `start` -> `stop` -> `rm`, ou plus directement `run` -> `stop` -> `rm`) et les commandes associées (`docker ps`, `docker start`, `docker stop`, `docker rm`) est essentiel pour toute personne travaillant avec Docker. Cela vous permet de lancer, d'inspecter, de contrôler et de nettoyer proprement les instances de vos applications.