Exercice 03 : Créer et gérer des conteneurs
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Lancer un conteneur en arrière-plan avec
-det lui donner un nom avec--name - ✅ Lancer un conteneur interactif avec
-itet le supprimer automatiquement avec--rm - ✅ Lister les conteneurs actifs et tous les conteneurs avec
docker psetdocker ps -a - ✅ Arrêter, démarrer et redémarrer un conteneur avec
stop,start,restart - ✅ Supprimer des conteneurs avec
docker rmetdocker container prune
Durée estimée : 20 minutes
Difficulté : ⭐⭐☆☆☆ (Débutant)
Prérequis :
- Exercices 01 et 02 complétés
- Image
nginx:1.25-alpineprésente localement
📖 Contexte
Un conteneur est une instance en cours d'exécution d'une image. Contrairement à une image (statique), un conteneur a un état : il peut être en cours d'exécution (running), arrêté (exited), ou en pause. Maîtriser le cycle de vie des conteneurs - création, démarrage, arrêt, suppression - est la compétence la plus utilisée au quotidien avec Docker.
📋 Énoncé
Créez plusieurs conteneurs avec différentes options, explorez leurs états, gérez leur cycle de vie, puis nettoyez l'environnement.
🧭 Déroulement de l'exercice
Tâche 1 : Lancer un conteneur en mode détaché
Lancez un conteneur Nginx nommé mon-nginx en arrière-plan (mode détaché), à partir de l'image nginx:1.25-alpine.
Indice : L'option
-d(detach) lance le conteneur en arrière-plan et retourne son ID. L'option--namelui donne un nom lisible à la place d'un ID aléatoire.
Vérification : docker ps doit lister mon-nginx avec le statut Up.
Tâche 2 : Lancer un conteneur interactif
Lancez un conteneur Alpine en mode interactif avec un shell sh. Le conteneur doit se supprimer automatiquement à la sortie. Tapez echo "Je suis dans un conteneur" puis quittez avec exit.
Indice :
-itcombine-i(stdin ouvert) et-t(pseudo-TTY).--rmsupprime le conteneur dès qu'il s'arrête. La commande à exécuter dans le conteneur se place à la fin :docker run -it --rm alpine sh.
Vérification : Après exit, docker ps -a | grep alpine ne doit rien retourner (le conteneur a été supprimé automatiquement).
Tâche 3 : Lister tous les conteneurs
Listez d'abord les conteneurs actifs, puis tous les conteneurs (y compris arrêtés). Observez la différence entre les deux commandes.
Indice : Sans option,
docker psn'affiche que les conteneurs en cours. Le flag-a(all) affiche aussi les conteneurs arrêtés.
Vérification : docker ps doit montrer mon-nginx en statut Up. docker ps -a doit aussi lister le conteneur hello-world de l'exercice 01 avec le statut Exited.
Tâche 4 : Arrêter et redémarrer un conteneur
Arrêtez le conteneur mon-nginx, vérifiez son statut, puis redémarrez-le.
Indice :
docker stop <nom>envoie un signal SIGTERM au conteneur (graceful shutdown).docker start <nom>le redémarre.docker restart <nom>fait les deux en une commande.
Vérification : Après docker stop, docker ps -a | grep mon-nginx doit afficher Exited. Après docker start, il doit repasser à Up.
Tâche 5 : Supprimer les conteneurs
Arrêtez mon-nginx, puis supprimez-le. Ensuite, supprimez tous les conteneurs arrêtés restants en une seule commande.
Indice :
docker rm <nom>supprime un conteneur arrêté. Pour supprimer un conteneur en cours, ajoutez-f(force).docker container prunesupprime tous les conteneurs arrêtés d'un coup.
Vérification : docker ps -a doit être vide (ou ne contenir aucun conteneur avec statut Exited).
🗂️ Mini-Projet : Cycle de vie complet
Reproduisez ce scénario dans l'ordre :
# 1. Lancer en arrière-plan
docker run -d --name mon-nginx nginx:1.25-alpine
# 2. Lancer en interactif (et sortir)
docker run -it --rm alpine sh
# Dans le conteneur : echo "Bonjour depuis Alpine !" puis exit
# 3. Vérifier les états
docker ps
docker ps -a
# 4. Arrêter et redémarrer
docker stop mon-nginx
docker start mon-nginx
docker restart mon-nginx
# 5. Nettoyer
docker stop mon-nginx
docker rm mon-nginx
docker container prune -fCheckpoints de validation :
docker ps | grep mon-nginxafficheUpaprèsdocker run -ddocker run -it --rm alpine shouvre un shell interactif dans le conteneurdocker ps -aliste plus de conteneurs quedocker psdocker stop mon-nginxsuivi dedocker ps -aafficheExiteddocker ps -aest vide aprèsdocker container prune -f