Comment utiliser la commande docker compose down pour arrêter et supprimer des ressources

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

Dans ce lab, vous apprendrez à utiliser efficacement la commande docker compose down pour arrêter et supprimer les ressources définies dans un fichier Docker Compose. Nous commencerons par préparer un fichier Compose simple avec deux services et un réseau.

Après la configuration, vous pratiquerez le démarrage de ces services en utilisant docker compose up. Le cœur du lab se concentrera ensuite sur l'utilisation de docker compose down pour arrêter et supprimer les ressources par défaut, puis explorera les options -v pour supprimer les volumes et --rmi all pour supprimer les images, démontrant ainsi différents niveaux de nettoyage des ressources.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/rmi("Remove Image") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/run -.-> lab-555077{{"Comment utiliser la commande docker compose down pour arrêter et supprimer des ressources"}} docker/ps -.-> lab-555077{{"Comment utiliser la commande docker compose down pour arrêter et supprimer des ressources"}} docker/stop -.-> lab-555077{{"Comment utiliser la commande docker compose down pour arrêter et supprimer des ressources"}} docker/rm -.-> lab-555077{{"Comment utiliser la commande docker compose down pour arrêter et supprimer des ressources"}} docker/pull -.-> lab-555077{{"Comment utiliser la commande docker compose down pour arrêter et supprimer des ressources"}} docker/rmi -.-> lab-555077{{"Comment utiliser la commande docker compose down pour arrêter et supprimer des ressources"}} docker/images -.-> lab-555077{{"Comment utiliser la commande docker compose down pour arrêter et supprimer des ressources"}} docker/volume -.-> lab-555077{{"Comment utiliser la commande docker compose down pour arrêter et supprimer des ressources"}} docker/network -.-> lab-555077{{"Comment utiliser la commande docker compose down pour arrêter et supprimer des ressources"}} end

Préparer un fichier Compose simple avec des services et un réseau

Dans cette étape, nous allons préparer un fichier Compose simple pour définir deux services et un réseau. Avant de commencer, nous devons installer Docker Compose car il n'est pas préinstallé dans l'environnement.

Tout d'abord, téléchargeons le binaire Docker Compose. Nous allons télécharger la version 1.29.2, qui est compatible avec la version de Docker préinstallée.

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Cette commande télécharge le binaire Docker Compose depuis la page officielle des releases GitHub et l'enregistre dans /usr/local/bin/docker-compose. Les parties $(uname -s) et $(uname -m) détectent automatiquement votre système d'exploitation et l'architecture pour télécharger le bon binaire.

Ensuite, nous devons appliquer les permissions d'exécution au binaire téléchargé afin de pouvoir l'exécuter comme commande.

sudo chmod +x /usr/local/bin/docker-compose

Maintenant, vérifions l'installation en contrôlant la version de Docker Compose.

docker-compose --version

Vous devriez voir les informations de version s'afficher dans la console, confirmant que Docker Compose est correctement installé.

Maintenant que Docker Compose est installé, créons un répertoire pour notre projet et naviguons dedans. Nous allons créer un répertoire nommé my-compose-app dans le dossier ~/project.

mkdir ~/project/my-compose-app
cd ~/project/my-compose-app

Dans ce répertoire, nous allons créer un fichier nommé docker-compose.yml. Ce fichier définira nos services et notre réseau. Nous utiliserons l'éditeur nano pour créer et modifier ce fichier.

nano docker-compose.yml

Maintenant, collez le contenu suivant dans le fichier docker-compose.yml. Ce fichier définit deux services : web et redis, ainsi qu'un réseau nommé app-network.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - app-network
  redis:
    image: redis:latest
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

Décomposons ce fichier docker-compose.yml :

  • version: '3.8' spécifie la version du format de fichier Docker Compose.
  • services: définit les différents services qui composent votre application.
    • web: définit un service nommé web.
      • image: nginx:latest spécifie que ce service utilisera la dernière image nginx. Nous téléchargerons cette image plus tard.
      • ports: - "80:80" mappe le port 80 de la machine hôte vers le port 80 du conteneur web.
      • networks: - app-network connecte le service web au app-network.
    • redis: définit un service nommé redis.
      • image: redis:latest spécifie que ce service utilisera la dernière image redis. Nous téléchargerons cette image plus tard.
      • networks: - app-network connecte le service redis au app-network.
  • networks: définit les réseaux utilisés par les services.
    • app-network: définit un réseau nommé app-network.
      • driver: bridge spécifie que ce réseau utilisera le pilote bridge par défaut.

Enregistrez le fichier en appuyant sur Ctrl + X, puis Y, et enfin Entrée.

Avant de démarrer les services, nous devons télécharger les images Docker nécessaires. Nous allons télécharger les images nginx:latest et redis:latest.

docker pull nginx:latest
docker pull redis:latest

Ces commandes téléchargent les images spécifiées depuis Docker Hub vers votre machine locale.

Démarrer les services avec docker compose up

Dans cette étape, nous allons démarrer les services définis dans notre fichier docker-compose.yml en utilisant la commande docker compose up. Cette commande construit, (re)crée, démarre et se connecte aux conteneurs d'un service.

Assurez-vous d'être dans le répertoire ~/project/my-compose-app où vous avez créé le fichier docker-compose.yml.

cd ~/project/my-compose-app

Maintenant, exécutez la commande suivante pour démarrer les services. Nous utiliserons l'option -d pour exécuter les conteneurs en mode détaché, ce qui signifie qu'ils fonctionneront en arrière-plan sans bloquer votre terminal.

docker-compose up -d

Lorsque vous exécutez cette commande pour la première fois, Docker Compose va :

  1. Créer le réseau app-network comme défini dans le fichier docker-compose.yml
  2. Créer un conteneur pour le service web en utilisant l'image nginx:latest
  3. Créer un conteneur pour le service redis en utilisant l'image redis:latest
  4. Connecter les deux conteneurs au réseau app-network
  5. Démarrer les deux conteneurs

Vous devriez voir une sortie indiquant que le réseau et les conteneurs sont en cours de création et de démarrage.

Pour vérifier que les conteneurs sont en cours d'exécution, vous pouvez utiliser la commande docker ps.

docker ps

Cette commande liste tous les conteneurs en cours d'exécution. Vous devriez voir deux conteneurs listés, un pour le service web (basé sur l'image nginx) et un pour le service redis (basé sur l'image redis). Les noms des conteneurs seront généralement préfixés par le nom du répertoire (my-compose-app dans ce cas) et le nom du service (par exemple my-compose-app_web_1, my-compose-app_redis_1).

Vous pouvez également vérifier les réseaux créés par Docker Compose en utilisant la commande docker network ls.

docker network ls

Vous devriez voir un réseau nommé my-compose-app_app-network listé, qui a été créé à partir de la définition app-network dans votre fichier docker-compose.yml.

Enfin, puisque nous avons mappé le port 80 du service web vers le port 80 de l'hôte, vous pouvez accéder à la page d'accueil par défaut de Nginx en ouvrant un navigateur web et en naviguant vers l'adresse IP de votre VM LabEx. Alternativement, vous pouvez utiliser curl depuis le terminal.

curl localhost

Vous devriez voir le contenu HTML de la page d'accueil par défaut de Nginx dans la sortie. Ceci confirme que le service web fonctionne et est accessible.

Arrêter et supprimer les ressources par défaut avec docker compose down

Dans cette étape, nous allons arrêter et supprimer les conteneurs et réseaux créés par docker compose up en utilisant la commande docker compose down. Par défaut, docker compose down supprime les conteneurs et le réseau par défaut créés par up.

Assurez-vous d'être dans le répertoire ~/project/my-compose-app.

cd ~/project/my-compose-app

Maintenant, exécutez la commande suivante pour arrêter et supprimer les services.

docker-compose down

Lorsque vous exécutez cette commande, Docker Compose va :

  1. Arrêter les conteneurs en cours d'exécution (web et redis)
  2. Supprimer les conteneurs arrêtés
  3. Supprimer le réseau (my-compose-app_app-network) qui a été créé par docker compose up

Vous devriez voir une sortie indiquant que les conteneurs et le réseau sont en cours d'arrêt et de suppression.

Pour vérifier que les conteneurs ont été supprimés, vous pouvez utiliser la commande docker ps -a. L'option -a affiche tous les conteneurs, y compris ceux qui sont arrêtés.

docker ps -a

Vous ne devriez plus voir les conteneurs my-compose-app_web_1 et my-compose-app_redis_1 dans la sortie.

Vous pouvez également vérifier que le réseau a été supprimé en utilisant la commande docker network ls.

docker network ls

Le réseau my-compose-app_app-network ne devrait plus apparaître dans la liste.

Notez que docker compose down ne supprime pas par défaut les volumes (volumes) ni les images. Nous verrons comment les supprimer dans les étapes suivantes.

Arrêter et supprimer les volumes avec docker compose down -v

Dans l'étape précédente, nous avons vu que docker compose down supprime les conteneurs et réseaux mais pas les volumes. Dans cette étape, nous allons apprendre à supprimer les volumes ainsi que les autres ressources en utilisant l'option -v avec docker compose down.

D'abord, relançons les services afin d'avoir des ressources à supprimer. Assurez-vous d'être dans le répertoire ~/project/my-compose-app.

cd ~/project/my-compose-app

Exécutez la commande docker compose up -d pour démarrer les services en mode détaché.

docker-compose up -d

Cela recréera les conteneurs et le réseau.

Vérifions maintenant si des volumes ont été créés. Dans notre docker-compose.yml, nous n'avons pas explicitement défini de volumes. Cependant, certaines images comme redis peuvent créer des volumes anonymes par défaut pour persister les données. Nous pouvons vérifier les volumes avec la commande docker volume ls.

docker volume ls

Vous pourriez voir un volume listé avec un nom comme my-compose-app_redisdata (le nom exact peut varier légèrement selon la version de Docker Compose et la configuration, mais il sera probablement préfixé avec le nom du projet et du service). Ceci est un volume anonyme créé par le conteneur redis.

Maintenant, arrêtons et supprimons les services, le réseau et aussi les volumes avec docker compose down -v.

docker-compose down -v

L'option -v indique à Docker Compose de supprimer tous les volumes déclarés dans la section volumes du fichier docker-compose.yml ainsi que tous les volumes anonymes attachés aux conteneurs.

Vous devriez voir une sortie indiquant que les conteneurs, le réseau et le volume sont en cours d'arrêt et de suppression.

Pour vérifier que les conteneurs ont été supprimés, utilisez docker ps -a.

docker ps -a

Les conteneurs web et redis ne devraient pas apparaître.

Pour vérifier que le réseau a été supprimé, utilisez docker network ls.

docker network ls

Le réseau my-compose-app_app-network ne devrait pas être listé.

Enfin, pour vérifier que le volume a été supprimé, utilisez docker volume ls.

docker volume ls

Le volume précédemment listé (par exemple my-compose-app_redisdata) ne devrait plus apparaître dans la sortie.

Arrêter et supprimer les images avec docker compose down --rmi all

Dans les étapes précédentes, nous avons appris à arrêter et supprimer les conteneurs, réseaux et volumes avec docker compose down. Par défaut, docker compose down ne supprime pas les images Docker utilisées pour créer les conteneurs. Dans cette étape, nous allons apprendre à supprimer les images en utilisant l'option --rmi all avec docker compose down.

D'abord, relançons les services. Assurez-vous d'être dans le répertoire ~/project/my-compose-app.

cd ~/project/my-compose-app

Exécutez la commande docker compose up -d pour démarrer les services en mode détaché.

docker-compose up -d

Cela recréera les conteneurs et le réseau.

Vérifions maintenant les images Docker présentes sur votre système avec la commande docker images.

docker images

Vous devriez voir les images nginx et redis listées, ainsi que d'autres images potentiellement présentes sur votre système.

Maintenant, arrêtons et supprimons les services, le réseau, les volumes et aussi les images avec docker compose down --rmi all.

docker-compose down --rmi all -v

Nous incluons à nouveau l'option -v pour garantir la suppression des volumes. L'option --rmi all indique à Docker Compose de supprimer toutes les images utilisées par les services du fichier docker-compose.yml, même si elles ne sont pas taguées.

Vous devriez voir une sortie indiquant que les conteneurs, le réseau, les volumes et les images sont en cours d'arrêt et de suppression.

Pour vérifier que les conteneurs ont été supprimés, utilisez docker ps -a.

docker ps -a

Les conteneurs web et redis ne devraient pas apparaître.

Pour vérifier que le réseau a été supprimé, utilisez docker network ls.

docker network ls

Le réseau my-compose-app_app-network ne devrait pas être listé.

Pour vérifier que les volumes ont été supprimés, utilisez docker volume ls.

docker volume ls

Aucun volume lié à ce projet ne devrait apparaître.

Enfin, pour vérifier que les images ont été supprimées, utilisez docker images.

docker images

Les images nginx et redis utilisées par les services ne devraient plus apparaître dans la sortie, sauf si elles sont utilisées par d'autres conteneurs ou possèdent d'autres tags. docker compose down --rmi all supprime uniquement les images non utilisées par d'autres conteneurs.

Résumé

Dans ce lab, nous avons appris à utiliser la commande docker compose down pour arrêter et supprimer les ressources définies dans un fichier Docker Compose. Nous avons commencé par préparer un fichier Compose simple avec deux services et un réseau, ce qui a impliqué l'installation de Docker Compose et la création du fichier docker-compose.yml.

Après avoir démarré les services avec docker compose up, nous avons exploré différentes façons d'utiliser docker compose down. Nous avons d'abord utilisé la commande de base pour arrêter et supprimer les ressources par défaut (conteneurs et réseaux). Ensuite, nous avons appris à supprimer les volumes avec l'option -v et à supprimer les images avec l'option --rmi all, démontrant ainsi la flexibilité de la commande docker compose down dans la gestion du cycle de vie de nos applications Docker Compose.