Utiliser efficacement la commande Docker Compose Down

DockerBeginner
Pratiquer maintenant

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 :

  1. Installation de Docker Compose et création d'un environnement Docker Compose simple
  2. Apprentissage des bases de docker-compose down et de la façon dont il supprime les conteneurs et les réseaux par défaut
  3. Exploration des options avancées comme --volumes, --rmi et --remove-orphans pour contrôler précisément quelles ressources sont supprimées
  4. 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 down de base supprime les conteneurs et les réseaux mais conserve les volumes
  • Utilisez --volumes pour supprimer les volumes lorsque vous souhaitez réinitialiser vos données
  • Utilisez --rmi pour supprimer les images lorsque vous avez besoin de libérer de l'espace disque
  • Utilisez --remove-orphans pour 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.