Introduction
La commande Docker Compose Down est un outil essentiel dans la gestion des conteneurs Docker. Ce laboratoire vous guidera dans l'utilisation efficace de docker-compose down pour arrêter et nettoyer correctement vos conteneurs, réseaux, volumes et images Docker. En maîtrisant cette commande, vous serez en mesure de maintenir un environnement Docker propre et d'optimiser votre flux de travail de développement.
Installation de Docker Compose et création d'un projet exemple
Dans cette étape, nous nous assurerons que Docker Compose est correctement installé et nous créerons un projet Docker Compose exemple sur lequel travailler.
Vérification de l'installation de Docker Compose
Vérifions d'abord si Docker Compose a été installé avec succès lors de la configuration :
docker-compose version
Vous devriez voir une sortie similaire à celle-ci (les détails exacts de la version peuvent différer) :
docker-compose version 1.29.2, build unknown
Création d'un fichier Docker Compose simple
Maintenant, créons un fichier Docker Compose simple que nous utiliserons tout au long de ce laboratoire. Nous allons créer un fichier nommé docker-compose.yml dans le répertoire actuel avec un service web de base basé sur Nginx.
Utilisez l'éditeur nano pour créer le fichier :
cd ~/project/docker-compose-demo
nano docker-compose.yml
Copiez et collez le contenu suivant dans l'éditeur :
version: "3"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- web_data:/usr/share/nginx/html
db:
image: redis:latest
volumes:
- db_data:/data
volumes:
web_data:
db_data:
Enregistrez le fichier en appuyant sur Ctrl+O, puis Enter, et quittez avec Ctrl+X.
Ce fichier Docker Compose définit :
- Un service web utilisant l'image Nginx
- Un service de base de données utilisant Redis
- Deux volumes nommés pour le stockage persistant des données
Démarrage des services Docker Compose
Démarrons les services définis dans notre fichier Docker Compose :
docker-compose up -d
L'option -d exécute les conteneurs en mode détaché (en arrière-plan). Vous devriez voir une sortie similaire à :
Creating network "docker-compose-demo_default" with the default driver
Creating volume "docker-compose-demo_web_data" with default driver
Creating volume "docker-compose-demo_db_data" with default driver
Creating docker-compose-demo_web_1 ... done
Creating docker-compose-demo_db_1 ... done
Vérification des conteneurs en cours d'exécution
Vérifions que nos conteneurs sont bien en cours d'exécution :
docker-compose ps
Vous devriez voir une sortie indiquant que les deux services sont actifs :
Name Command State Ports
-----------------------------------------------------------------------------------
docker-compose-demo_db_1 docker-entrypoint.sh redis ... Up 6379/tcp
docker-compose-demo_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8080->80/tcp
Vous pouvez également vérifier que le serveur web Nginx est accessible en utilisant curl :
curl http://localhost:8080
Vous devriez voir le code HTML de la page d'accueil par défaut de Nginx.
Maintenant que nos services sont opérationnels, nous sommes prêts à découvrir la commande docker-compose down dans l'étape suivante.
Comprendre et utiliser Docker Compose Down
Dans cette étape, maintenant que nos services Docker Compose sont en cours d'exécution, nous allons apprendre à utiliser la commande docker-compose down efficacement.
Qu'est-ce que Docker Compose Down ?
La commande docker-compose down est utilisée pour arrêter et supprimer les conteneurs, réseaux, volumes et images créés par docker-compose up. Cette commande est essentielle pour nettoyer les ressources lorsque vous n'en avez plus besoin ou lorsque vous souhaitez réinitialiser votre environnement.
Utilisation de base de Docker Compose Down
La forme la plus simple de la commande est :
docker-compose down
Exécutons cette commande et observons ce qui se passe :
cd ~/project/docker-compose-demo
docker-compose down
Vous devriez voir une sortie similaire à :
Stopping docker-compose-demo_web_1 ... done
Stopping docker-compose-demo_db_1 ... done
Removing docker-compose-demo_web_1 ... done
Removing docker-compose-demo_db_1 ... done
Removing network docker-compose-demo_default
Notez que la commande :
- Arrête tous les conteneurs en cours d'exécution définis dans votre fichier Docker Compose
- Supprime tous les conteneurs
- Supprime le réseau créé par Docker Compose
Cependant, elle ne supprime pas les volumes par défaut. C'est un point important à comprendre : les volumes persistent au-delà du cycle de vie des conteneurs pour préserver vos données.
Vérification de la suppression des ressources
Confirmons que les conteneurs et le réseau ont bien été supprimés :
docker-compose ps
Vous devriez voir une liste vide, indiquant qu'il n'y a plus de conteneurs en cours d'exécution pour ce projet Docker Compose.
Vérifions si les volumes existent toujours :
docker volume ls | grep docker-compose-demo
Vous devriez voir que les volumes existent toujours :
local docker-compose-demo_db_data
local docker-compose-demo_web_data
Ce comportement par défaut est important car il préserve vos données lors des redémarrages des conteneurs. Si vous souhaitiez également supprimer ces volumes, vous devriez utiliser des options supplémentaires, que nous aborderons à l'étape suivante.
Redémarrage des services
Redémarrons nos services car nous en aurons besoin pour l'étape suivante :
docker-compose up -d
Vous devriez voir :
Creating network "docker-compose-demo_default" with the default driver
Creating docker-compose-demo_web_1 ... done
Creating docker-compose-demo_db_1 ... done
Notez que Docker Compose n'a pas eu besoin de recréer les volumes puisqu'ils existent déjà.
Vous comprenez maintenant l'utilisation de base de docker-compose down. Dans l'étape suivante, nous explorerons des options plus avancées pour contrôler précisément quelles ressources sont supprimées.
Utiliser Docker Compose Down avec des options avancées
La commande docker-compose down de base est utile, mais Docker Compose fournit des options supplémentaires pour vous donner plus de contrôle sur les ressources supprimées. Dans cette étape, nous explorerons ces options.
Suppression des volumes
Comme nous l'avons observé à l'étape précédente, docker-compose down ne supprime pas les volumes par défaut. Il s'agit d'une mesure de sécurité pour éviter toute perte de données accidentelle. Cependant, il arrive que vous souhaitiez également supprimer les volumes, par exemple lors d'un nettoyage complet ou pour réinitialiser les données de votre application.
Pour supprimer les volumes en même temps que les conteneurs et les réseaux, utilisez l'option --volumes :
docker-compose down --volumes
Essayons :
cd ~/project/docker-compose-demo
docker-compose down --volumes
Vous devriez voir une sortie similaire à :
Stopping docker-compose-demo_web_1 ... done
Stopping docker-compose-demo_db_1 ... done
Removing docker-compose-demo_web_1 ... done
Removing docker-compose-demo_db_1 ... done
Removing network docker-compose-demo_default
Removing volume docker-compose-demo_web_data
Removing volume docker-compose-demo_db_data
Notez que cette fois, les volumes sont également supprimés.
Vérifions que les volumes ont bien été supprimés :
docker volume ls | grep docker-compose-demo
Vous ne devriez voir aucune sortie, confirmant que les volumes ont été supprimés.
Suppression des images
Une autre option utile consiste à supprimer les images lors de l'arrêt de votre environnement Docker Compose. Cela peut être fait avec l'option --rmi, qui accepte différentes valeurs :
--rmi all: Supprime toutes les images utilisées par n'importe quel service--rmi local: Supprime uniquement les images qui n'ont pas de tag personnalisé
Redémarrons nos services, puis utilisons l'option --rmi :
docker-compose up -d
Attendez que les services démarrent, puis arrêtez-les avec l'option --rmi :
docker-compose down --rmi local
Vous devriez voir une sortie similaire à :
Stopping docker-compose-demo_web_1 ... done
Stopping docker-compose-demo_db_1 ... done
Removing docker-compose-demo_web_1 ... done
Removing docker-compose-demo_db_1 ... done
Removing network docker-compose-demo_default
Removing image redis:latest
Removing image nginx:latest
Cette fois, les images sont également supprimées.
Suppression des conteneurs orphelins
Parfois, vous pouvez avoir des conteneurs qui ont été créés par Docker Compose mais qui ne sont plus définis dans votre fichier docker-compose.yml actuel. Ce sont ce qu'on appelle des "conteneurs orphelins".
Pour le démontrer, modifions notre fichier Docker Compose pour supprimer le service db :
nano docker-compose.yml
Modifiez le fichier pour supprimer le service db et son volume :
version: "3"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- web_data:/usr/share/nginx/html
volumes:
web_data:
Enregistrez et quittez l'éditeur (Ctrl+O, Enter, Ctrl+X).
Maintenant, redémarrons nos services avec le fichier mis à jour :
docker-compose up -d
Si nous avions un conteneur précédent en cours d'exécution pour le service db qui n'a pas été correctement arrêté, il serait maintenant considéré comme orphelin. Nous pouvons supprimer ces orphelins en utilisant l'option --remove-orphans :
docker-compose down --remove-orphans
Cela garantit que tous les conteneurs créés par une version précédente de votre fichier Docker Compose mais qui ne sont plus définis sont également supprimés.
Combinaison d'options
Vous pouvez également combiner ces options pour un nettoyage complet :
docker-compose down --volumes --rmi all --remove-orphans
Cette commande va :
- Arrêter et supprimer tous les conteneurs
- Supprimer tous les volumes nommés
- Supprimer toutes les images utilisées par n'importe quel service
- Supprimer tous les conteneurs orphelins
Ceci est particulièrement utile lorsque vous souhaitez réinitialiser complètement votre environnement ou lorsque vous vous préparez à apporter des modifications importantes à votre configuration Docker Compose.
Exploration des options supplémentaires
Vous pouvez voir toutes les options disponibles pour la commande docker-compose down en utilisant l'option d'aide :
docker-compose down --help
Prenez un moment pour examiner les options disponibles et leurs descriptions.
Vous avez maintenant une bonne compréhension de la façon d'utiliser docker-compose down avec diverses options pour contrôler quelles ressources sont supprimées lors de l'arrêt de votre environnement Docker Compose.
Bonnes pratiques et scénarios réels
Dans cette étape, maintenant que vous comprenez la commande docker-compose down et ses options, nous explorerons les meilleures pratiques et les scénarios réels pour utiliser cette commande efficacement.
Création d'un environnement Docker Compose plus complexe
Pour mieux démontrer une utilisation réelle, créons un environnement Docker Compose plus complexe. Nous allons mettre en place une application web simple avec un frontend, un backend et une base de données.
cd ~/project/docker-compose-demo
nano docker-compose.yml
Remplacez le contenu par :
version: "3"
services:
frontend:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- frontend_data:/usr/share/nginx/html
networks:
- app_network
backend:
image: node:14-alpine
command: sh -c "echo 'Backend service running' && sleep infinity"
volumes:
- backend_data:/app
networks:
- app_network
- db_network
database:
image: postgres:13-alpine
environment:
POSTGRES_PASSWORD: example
POSTGRES_USER: user
POSTGRES_DB: appdb
volumes:
- db_data:/var/lib/postgresql/data
networks:
- db_network
networks:
app_network:
db_network:
volumes:
frontend_data:
backend_data:
db_data:
Enregistrez et quittez l'éditeur.
Démarrons cet environnement plus complexe :
docker-compose up -d
Vous devriez voir une sortie montrant la création des réseaux, des volumes et des conteneurs pour les trois services.
Bonne pratique : Utilisation des environnements
Dans des scénarios réels, vous pouvez avoir différents environnements comme le développement, les tests et la production. Docker Compose vous permet d'utiliser différents fichiers de configuration pour différents environnements.
Créez un fichier pour l'environnement de développement :
nano docker-compose.dev.yml
Ajoutez le contenu suivant :
version: "3"
services:
frontend:
ports:
- "8081:80"
environment:
NODE_ENV: development
backend:
environment:
NODE_ENV: development
DEBUG: "true"
database:
ports:
- "5432:5432"
Enregistrez et quittez l'éditeur.
Pour utiliser ce fichier en combinaison avec le fichier de base, vous pouvez utiliser l'option -f :
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d
Cela fusionnera les configurations, en appliquant les paramètres spécifiques au développement.
Pour arrêter cet environnement, vous utiliseriez :
docker-compose -f docker-compose.yml -f docker-compose.dev.yml down
Bonne pratique : Utilisation d'un script de nettoyage
Dans les pipelines d'intégration/déploiement continus (CI/CD) ou les flux de travail de développement, il est souvent utile d'avoir un script de nettoyage qui supprime toutes les ressources Docker. Créons un script de nettoyage simple :
nano cleanup.sh
Ajoutez le contenu suivant :
#!/bin/bash
echo "Nettoyage de l'environnement Docker..."
## Arrêter et supprimer les conteneurs, réseaux, volumes et images
docker-compose down --volumes --rmi all --remove-orphans
## Supprimer les volumes orphelins
echo "Suppression des volumes orphelins..."
docker volume prune -f
## Supprimer les images orphelines
echo "Suppression des images orphelines..."
docker image prune -f
echo "Nettoyage terminé !"
Enregistrez et quittez l'éditeur.
Rendez le script exécutable :
chmod +x cleanup.sh
Maintenant, vous pouvez exécuter ce script chaque fois que vous avez besoin d'effectuer un nettoyage complet :
./cleanup.sh
Bonne pratique : Suppression sélective des ressources
Parfois, vous pouvez vouloir supprimer uniquement des ressources spécifiques. Par exemple, vous pourriez vouloir conserver vos volumes (pour préserver les données) mais supprimer les conteneurs, les réseaux et les images.
Voici comment aborder différents scénarios :
Supprimer uniquement les conteneurs et les réseaux (préserver les volumes et les images) :
docker-compose down
Supprimer les conteneurs, les réseaux et les images (préserver les volumes) :
docker-compose down --rmi all
Supprimer les conteneurs, les réseaux et les volumes (préserver les images) :
docker-compose down --volumes
Supprimer uniquement les images locales (non extraites d'un registre) :
docker-compose down --rmi local
En supprimant sélectivement les ressources, vous pouvez optimiser votre flux de travail en fonction de vos besoins spécifiques.
Bonne pratique : Surveillance de l'utilisation des ressources
Avant et après l'exécution de docker-compose down, il est souvent utile de surveiller votre utilisation des ressources Docker. Cela peut vous aider à identifier les ressources qui ne sont pas correctement nettoyées.
Voici quelques commandes utiles :
Lister tous les conteneurs (y compris ceux arrêtés) :
docker ps -a
Lister tous les réseaux :
docker network ls
Lister tous les volumes :
docker volume ls
Lister toutes les images :
docker image ls
Obtenir des informations sur l'ensemble du système :
docker system df
Essayons la dernière commande pour voir notre utilisation actuelle des ressources :
docker system df
Vous verrez un résumé de votre utilisation des ressources Docker, y compris le nombre de conteneurs, d'images, de volumes et la quantité totale d'espace utilisé.
Arrêt de notre environnement complexe
Maintenant, arrêtons notre environnement complexe et supprimons toutes les ressources associées :
docker-compose down --volumes --rmi all --remove-orphans
Cela arrêtera et supprimera tous les conteneurs, réseaux, volumes et images associés à notre projet Docker Compose.
En suivant ces bonnes pratiques, vous pouvez gérer efficacement vos environnements Docker et garantir une utilisation optimale des ressources.
Résumé
Dans ce laboratoire, vous avez appris à utiliser efficacement la commande docker-compose down pour gérer vos conteneurs et ressources Docker. Voici un récapitulatif de ce que vous avez accompli :
- Installation de Docker Compose et création d'un environnement Docker Compose simple
- Apprentissage des bases de
docker-compose downet de la façon dont il supprime les conteneurs et les réseaux par défaut - Exploration des options avancées comme
--volumes,--rmiet--remove-orphanspour contrôler précisément quelles ressources sont supprimées - Mise en œuvre des bonnes pratiques pour l'utilisation de Docker Compose dans des scénarios réels, notamment :
- L'utilisation de fichiers de configuration spécifiques à l'environnement
- La création de scripts de nettoyage
- La suppression sélective des ressources
- La surveillance de l'utilisation des ressources
En maîtrisant la commande docker-compose down, vous disposez désormais des connaissances nécessaires pour maintenir un environnement Docker propre, éviter les fuites de ressources et optimiser votre flux de travail de développement.
Souvenez-vous de ces points clés :
- La commande
docker-compose downde base supprime les conteneurs et les réseaux mais conserve les volumes - Utilisez
--volumespour supprimer les volumes lorsque vous souhaitez réinitialiser vos données - Utilisez
--rmipour supprimer les images lorsque vous avez besoin de libérer de l'espace disque - Utilisez
--remove-orphanspour nettoyer les conteneurs qui ne sont plus définis dans votre fichier Compose - Combinez ces options pour un nettoyage complet si nécessaire
Avec ces compétences, vous êtes maintenant mieux équipé pour gérer efficacement les environnements Docker Compose dans vos projets.



