Utiliser efficacement la commande Docker Compose Down

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

La commande docker-compose down est un outil essentiel dans la gestion des conteneurs Docker. Ce lab vous guidera à travers l'utilisation efficace de docker-compose down pour arrêter et nettoyer correctement les conteneurs, les réseaux, les volumes et les 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 d'exemple

Avant de pouvoir utiliser la commande docker-compose down, nous devons nous assurer que Docker Compose est correctement installé et créer un exemple de projet Docker Compose avec 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 :

Docker Compose version v2.18.1

Création d'un fichier Docker Compose simple

Maintenant, créons un simple fichier Docker Compose que nous utiliserons tout au long de ce lab. Nous allons créer un fichier nommé docker-compose.yml dans le répertoire courant 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 sur Entrée, 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 en cours d'exécution :

docker-compose ps

Vous devriez voir une sortie indiquant que les deux services sont opérationnels :

        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 la sortie HTML de la page d'accueil par défaut de Nginx.

Maintenant que nos services sont opérationnels, nous sommes prêts à en apprendre davantage sur la commande docker-compose down à l'étape suivante.

Comprendre et utiliser Docker Compose Down

Maintenant que nos services Docker Compose sont en cours d'exécution, apprenons-en davantage sur la commande docker-compose down et comment l'utiliser efficacement.

Qu'est-ce que Docker Compose Down ?

La commande docker-compose down est utilisée pour arrêter et supprimer les conteneurs, les réseaux, les volumes et les 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 :

  1. Arrête tous les conteneurs en cours d'exécution définis dans votre fichier Docker Compose
  2. Supprime tous les conteneurs
  3. 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

Vérifions que les conteneurs et le réseau ont été supprimés :

docker-compose ps

Vous devriez voir une liste vide, indiquant qu'il n'y a pas de conteneurs en cours d'exécution à partir de 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 souhaitez également supprimer ces volumes, vous devrez utiliser des options supplémentaires, que nous aborderons à l'étape suivante.

Démarrage des services à nouveau

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 car ils existent déjà.

Vous comprenez maintenant l'utilisation de base de docker-compose down. À l'étape suivante, nous explorerons des options plus avancées pour contrôler exactement quelles ressources sont supprimées.

Utilisation de Docker Compose Down avec des options avancées

La commande de base docker-compose down est utile, mais Docker Compose fournit des options supplémentaires pour vous donner plus de contrôle sur les ressources qui sont supprimées. Dans cette étape, nous allons explorer 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 fonctionnalité de sécurité pour éviter toute perte de données accidentelle. Cependant, il y a des moments où vous souhaitez également supprimer les volumes, par exemple lorsque vous effectuez un nettoyage complet ou lorsque vous souhaitez réinitialiser les données de votre application.

Pour supprimer les volumes ainsi 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 é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 est de supprimer les images lors de la mise hors service de votre environnement Docker Compose. Cela peut être fait avec l'option --rmi, qui accepte différentes valeurs :

  • --rmi all: Supprimer toutes les images utilisées par n'importe quel service
  • --rmi local: Supprimer uniquement les images qui n'ont pas de tag personnalisé

Redémarrons nos services et utilisons ensuite l'option --rmi :

docker-compose up -d

Attendez que les services démarrent, puis mettez-les hors service 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. Ceux-ci sont appelés "conteneurs orphelins".

Pour illustrer cela, 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, Entrée, 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 un orphelin. Nous pouvons supprimer ces orphelins en utilisant l'option --remove-orphans :

docker-compose down --remove-orphans

Cela garantit que tous les conteneurs qui ont été 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 :

  1. Arrêtera et supprimera tous les conteneurs
  2. Supprimera tous les volumes nommés
  3. Supprimera toutes les images utilisées par n'importe quel service
  4. Supprimera 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

Maintenant que vous comprenez la commande docker-compose down et ses options, explorons quelques bonnes pratiques et scénarios réels pour utiliser cette commande efficacement.

Création d'un environnement Docker Compose plus complexe

Pour mieux illustrer l'utilisation en conditions réelles, créons un environnement Docker Compose plus complexe. Nous allons configurer une simple application web 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 de réseaux, de volumes et de 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 mettre hors service 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 simple script de nettoyage :

nano cleanup.sh

Ajoutez le contenu suivant :

#!/bin/bash

echo "Nettoyage de l'environnement Docker..."

## Arrêter et supprimer les conteneurs, les réseaux, les volumes et les images
docker-compose down --volumes --rmi all --remove-orphans

## Supprimer les volumes flottants
echo "Suppression des volumes flottants..."
docker volume prune -f

## Supprimer les images flottantes
echo "Suppression des images flottantes..."
docker image prune -f

echo "Nettoyage terminé !"

Enregistrez et quittez l'éditeur.

Rendez le script exécutable :

chmod +x cleanup.sh

Vous pouvez maintenant exécuter ce script chaque fois que vous devez effectuer un nettoyage complet :

./cleanup.sh

Bonne pratique : Suppression sélective des ressources

Parfois, vous souhaiterez peut-être supprimer uniquement des ressources spécifiques. Par exemple, vous souhaiterez peut-être conserver vos volumes (pour préserver les données) mais supprimer les conteneurs, les réseaux et les images.

Voici comment vous aborderiez différents scénarios :

  1. Supprimer uniquement les conteneurs et les réseaux (conserver les volumes et les images) :

    docker-compose down
  2. Supprimer les conteneurs, les réseaux et les images (conserver les volumes) :

    docker-compose down --rmi all
  3. Supprimer les conteneurs, les réseaux et les volumes (conserver les images) :

    docker-compose down --volumes
  4. 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 l'utilisation de vos ressources Docker. Cela peut vous aider à identifier les ressources qui ne sont pas correctement nettoyées.

Voici quelques commandes utiles :

  1. Lister tous les conteneurs (y compris ceux arrêtés) :

    docker ps -a
  2. Lister tous les réseaux :

    docker network ls
  3. Lister tous les volumes :

    docker volume ls
  4. Lister toutes les images :

    docker image ls
  5. Obtenir des informations à l'échelle 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é.

Mise hors service de notre environnement complexe

Maintenant, mettons hors service 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 lab, 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 telles que --volumes, --rmi et --remove-orphans pour contrôler exactement 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 :
    • Utilisation de fichiers de configuration spécifiques à l'environnement
    • Création de scripts de nettoyage
    • Suppression sélective des ressources
    • Surveillance de l'utilisation des ressources

En maîtrisant la commande docker-compose down, vous avez maintenant les connaissances nécessaires pour maintenir un environnement Docker propre, prévenir les fuites de ressources et optimiser votre flux de travail de développement.

Rappelez-vous ces points clés :

  • La commande de base docker-compose down 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 devez 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

Grâce à ces compétences, vous êtes désormais mieux équipé pour gérer efficacement les environnements Docker Compose dans vos projets.