Comment utiliser la commande docker compose rm pour supprimer des conteneurs arrêtés

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 la commande docker compose rm pour supprimer des conteneurs arrêtés. Nous commencerons par préparer un projet Docker Compose simple, ce qui impliquera d'installer Docker Compose et de créer un fichier docker-compose.yml pour définir un service web basique.

Après la configuration du projet, vous pratiquerez l'arrêt des conteneurs de service. Le cœur du lab se concentrera sur l'utilisation de docker compose rm pour supprimer ces conteneurs arrêtés, couvrant des scénarios sans volumes, avec des volumes anonymes, et enfin, en démontrant comment forcer la suppression des conteneurs.


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/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/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/ps -.-> lab-555090{{"Comment utiliser la commande docker compose rm pour supprimer des conteneurs arrêtés"}} docker/stop -.-> lab-555090{{"Comment utiliser la commande docker compose rm pour supprimer des conteneurs arrêtés"}} docker/rm -.-> lab-555090{{"Comment utiliser la commande docker compose rm pour supprimer des conteneurs arrêtés"}} docker/pull -.-> lab-555090{{"Comment utiliser la commande docker compose rm pour supprimer des conteneurs arrêtés"}} docker/volume -.-> lab-555090{{"Comment utiliser la commande docker compose rm pour supprimer des conteneurs arrêtés"}} end

Préparer un projet Docker Compose simple

Dans cette étape, nous allons préparer un projet Docker Compose simple. Comme Docker Compose n'est pas préinstallé dans l'environnement LabEx, nous allons d'abord l'installer. Docker Compose est un outil pour définir et exécuter des applications multi-conteneurs Docker. Avec Compose, vous utilisez un fichier YAML pour configurer les services de votre application. Ensuite, avec une seule commande, vous créez et démarrez tous les services à partir de votre configuration.

D'abord, installons Docker Compose. Nous allons télécharger la dernière version stable et la rendre exécutable.

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

Après l'installation, vérifiez-la en contrôlant la version.

docker-compose --version

Vous devriez voir le numéro de version dans la sortie, confirmant que Docker Compose est correctement installé.

Maintenant, créons un projet Docker Compose simple. Nous allons créer un répertoire pour notre projet puis un fichier docker-compose.yml à l'intérieur. Ce fichier définira un service web simple utilisant l'image nginx.

Accédez au répertoire du projet.

cd ~/project

Créez un nouveau répertoire pour notre projet, par exemple my-web-app.

mkdir my-web-app
cd my-web-app

Maintenant, créez le fichier docker-compose.yml avec l'éditeur nano.

nano docker-compose.yml

Ajoutez le contenu suivant au fichier docker-compose.yml:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

Ce fichier docker-compose.yml définit un service nommé web. Ce service utilise l'image Docker nginx:latest et mappe le port 80 de l'hôte vers le port 80 du conteneur.

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

Maintenant, nous pouvons démarrer les services définis dans le fichier docker-compose.yml avec la commande docker-compose up. Le flag -d exécute les conteneurs en mode détaché, ce qui signifie qu'ils tourneront en arrière-plan.

docker-compose up -d

Cette commande téléchargera l'image nginx:latest (si elle n'est pas déjà présente) et démarrera un conteneur pour le service web.

Vous pouvez vérifier l'état des conteneurs en cours d'exécution avec la commande docker ps.

docker ps

Vous devriez voir un conteneur nommé my-web-app_web_1 (ou similaire, selon le nom du répertoire) en cours d'exécution avec le port 80 redirigé.

Pour vérifier que le serveur web fonctionne, vous pouvez utiliser curl pour y accéder.

curl http://localhost

Vous devriez voir la page d'accueil par défaut de Nginx en HTML dans la sortie. Cela confirme que notre projet Docker Compose simple est correctement configuré et fonctionne.

Arrêter les conteneurs de service

Dans l'étape précédente, nous avons démarré notre service web simple en utilisant docker-compose up -d. Le conteneur fonctionne maintenant en arrière-plan. Dans cette étape, nous allons apprendre comment arrêter les conteneurs de service en cours d'exécution avec Docker Compose.

Pour arrêter les conteneurs définis dans le fichier docker-compose.yml, nous utilisons la commande docker-compose stop. Cette commande envoie un signal SIGTERM aux conteneurs, leur permettant de s'arrêter proprement.

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

cd ~/project/my-web-app

Maintenant, exécutez la commande docker-compose stop.

docker-compose stop

Vous verrez une sortie indiquant que le conteneur est en cours d'arrêt.

Après avoir exécuté la commande stop, les conteneurs seront arrêtés mais pas supprimés. Vous pouvez le vérifier en listant tous les conteneurs, y compris ceux arrêtés, avec la commande docker ps -a.

docker ps -a

Vous devriez voir le conteneur my-web-app_web_1 listé avec un statut Exited. Cela confirme que le conteneur a bien été arrêté.

Si vous essayez d'accéder au serveur web avec curl à nouveau, cela devrait échouer car le conteneur est arrêté.

curl http://localhost

Vous devriez voir une erreur de connexion refusée, indiquant que le service web ne fonctionne plus.

L'arrêt des conteneurs est utile lorsque vous avez besoin d'interrompre temporairement vos services sans supprimer leur configuration ou leurs données. Dans les prochaines étapes, nous verrons comment supprimer ces conteneurs arrêtés.

Supprimer les conteneurs de service arrêtés sans volumes

Dans l'étape précédente, nous avons arrêté le conteneur en cours d'exécution avec docker-compose stop. Le conteneur est maintenant dans un état Exited. Dans cette étape, nous allons apprendre comment supprimer ces conteneurs arrêtés en utilisant Docker Compose.

Pour supprimer les conteneurs arrêtés définis dans le fichier docker-compose.yml, nous utilisons la commande docker-compose rm. Par défaut, cette commande ne supprime que les conteneurs de service arrêtés. Elle ne supprime pas les volumes ni les réseaux.

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

cd ~/project/my-web-app

Maintenant, exécutez la commande docker-compose rm. Vous serez invité à confirmer la suppression. Tapez y et appuyez sur Entrée.

docker-compose rm

Vous verrez une sortie indiquant que le conteneur est en cours de suppression.

Après avoir exécuté la commande rm, le conteneur devrait être supprimé. Vous pouvez le vérifier en listant tous les conteneurs, y compris ceux arrêtés, avec la commande docker ps -a.

docker ps -a

Vous ne devriez plus voir le conteneur my-web-app_web_1 dans la liste. Cela confirme que le conteneur a bien été supprimé.

Supprimer les conteneurs arrêtés permet de nettoyer votre système et libérer des ressources. Dans les prochaines étapes, nous verrons comment gérer les volumes lors de la suppression des conteneurs.

Supprimer les conteneurs de service arrêtés avec leurs volumes anonymes

Dans l'étape précédente, nous avons supprimé le conteneur arrêté. Maintenant, voyons comment supprimer les conteneurs ainsi que leurs volumes anonymes associés. Les volumes anonymes sont des volumes qui ne sont pas explicitement nommés dans le fichier docker-compose.yml. Docker leur attribue automatiquement un nom aléatoire.

Commençons par modifier notre fichier docker-compose.yml pour inclure un volume anonyme. Nous allons ajouter un volume au service web.

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

cd ~/project/my-web-app

Éditez le fichier docker-compose.yml.

nano docker-compose.yml

Ajoutez la section volumes à la définition du service web. Nous allons monter un volume anonyme sur /usr/share/nginx/html dans le conteneur. C'est là que Nginx sert son contenu par défaut.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - /usr/share/nginx/html

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

Maintenant, relançons le service. Cela créera un nouveau conteneur et un volume anonyme.

docker-compose up -d

Vous pouvez lister les volumes créés par Docker avec la commande docker volume ls. Vous devriez voir un volume avec un long nom généré aléatoirement associé à votre projet.

docker volume ls

Maintenant, arrêtez à nouveau les conteneurs du service.

docker-compose stop

Vérifiez que le conteneur est arrêté avec docker ps -a.

docker ps -a

Vous devriez voir le conteneur my-web-app_web_1 dans l'état Exited.

Pour supprimer les conteneurs arrêtés et leurs volumes anonymes associés, nous utilisons la commande docker-compose rm avec l'option -v.

docker-compose rm -v

Vous serez invité à confirmer la suppression. Tapez y et appuyez sur Entrée.

Après avoir exécuté la commande, vérifiez que le conteneur est supprimé avec docker ps -a.

docker ps -a

Le conteneur my-web-app_web_1 ne devrait plus apparaître dans la liste.

Maintenant, vérifiez à nouveau les volumes avec docker volume ls.

docker volume ls

Le volume anonyme créé pour le service web devrait également être supprimé. Cela démontre comment l'option -v supprime les volumes anonymes en même temps que les conteneurs.

Forcer la suppression des conteneurs de service arrêtés

Dans les étapes précédentes, nous avons arrêté et supprimé des conteneurs. Parfois, vous pourriez avoir besoin de supprimer des conteneurs même s'ils sont encore en cours d'exécution. C'est là que l'option de suppression forcée devient utile.

Commençons par relancer notre service.

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

cd ~/project/my-web-app

Démarrez le service en mode détaché.

docker-compose up -d

Vérifiez que le conteneur est en cours d'exécution avec docker ps.

docker ps

Vous devriez voir le conteneur my-web-app_web_1 listé avec un statut Up.

Maintenant, essayons de supprimer le conteneur en cours d'exécution sans l'arrêter au préalable. Si vous essayez d'utiliser docker-compose rm sur un conteneur en cours d'exécution, cela échouera.

docker-compose rm

Vous verrez un message d'erreur indiquant que le conteneur est en cours d'exécution et ne peut pas être supprimé.

Pour forcer la suppression des conteneurs en cours d'exécution, nous utilisons la commande docker-compose rm avec l'option -f. Cette option force la suppression sans demander de confirmation et sans arrêter proprement les conteneurs.

docker-compose rm -f

Vous verrez une sortie indiquant que le conteneur est en cours de suppression. Notez que vous n'avez pas été invité à confirmer cette fois-ci.

Après avoir exécuté la commande, vérifiez que le conteneur est supprimé avec docker ps -a.

docker ps -a

Le conteneur my-web-app_web_1 ne devrait plus apparaître dans la liste. Cela confirme que le conteneur a été supprimé de force même s'il était en cours d'exécution.

L'utilisation de l'option de suppression forcée doit être faite avec prudence, car elle peut entraîner une perte de données si le conteneur écrivait des données dans un volume qui n'est pas explicitement géré.

Ceci conclut notre exploration de la suppression des conteneurs de service Docker Compose. Vous avez appris comment arrêter des conteneurs, supprimer des conteneurs arrêtés sans volumes, supprimer des conteneurs arrêtés avec des volumes anonymes, et forcer la suppression des conteneurs en cours d'exécution.

Résumé

Dans ce lab, nous avons appris à utiliser la commande docker compose rm pour supprimer des conteneurs arrêtés. Nous avons commencé par préparer un projet Docker Compose simple, ce qui a impliqué l'installation de Docker Compose et la création d'un fichier docker-compose.yml pour définir un service web basique utilisant l'image Nginx.

Nous avons ensuite pratiqué l'arrêt des conteneurs de service puis leur suppression à l'aide de docker compose rm. Nous avons exploré différents scénarios, notamment :

  • La suppression des conteneurs arrêtés sans volumes
  • La suppression des conteneurs arrêtés avec volumes anonymes
  • L'utilisation de l'option de force pour supprimer des conteneurs

Cette expérience pratique a démontré l'application concrète de la commande docker compose rm pour gérer le cycle de vie des conteneurs dans un projet Docker Compose.