Comment utiliser la commande docker compose wait pour bloquer jusqu'à l'arrêt des services

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 wait pour gérer le cycle de vie de vos services Docker Compose. Nous commencerons par configurer un fichier docker-compose.yml de base avec plusieurs services et observerons leur état initial après leur démarrage.

Ensuite, vous explorerez la fonctionnalité principale de docker compose wait qui permet de bloquer l'exécution jusqu'à ce que tous les services de votre projet soient arrêtés. Nous démontrerons ensuite comment utiliser cette commande pour attendre l'arrêt de services spécifiques, et enfin comment combiner docker compose wait avec l'option --down-project pour une opération complète d'arrêt et d'attente du projet.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container 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/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/ps -.-> lab-555097{{"Comment utiliser la commande docker compose wait pour bloquer jusqu'à l'arrêt des services"}} docker/stop -.-> lab-555097{{"Comment utiliser la commande docker compose wait pour bloquer jusqu'à l'arrêt des services"}} docker/rm -.-> lab-555097{{"Comment utiliser la commande docker compose wait pour bloquer jusqu'à l'arrêt des services"}} docker/logs -.-> lab-555097{{"Comment utiliser la commande docker compose wait pour bloquer jusqu'à l'arrêt des services"}} docker/create -.-> lab-555097{{"Comment utiliser la commande docker compose wait pour bloquer jusqu'à l'arrêt des services"}} docker/volume -.-> lab-555097{{"Comment utiliser la commande docker compose wait pour bloquer jusqu'à l'arrêt des services"}} end

Créer un fichier docker-compose.yml simple avec plusieurs services

Dans cette étape, nous allons créer un fichier docker-compose.yml simple qui définit deux services. Avant de commencer, nous devons installer Docker Compose car il n'est pas préinstallé dans cet environnement.

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

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

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 son architecture.

Ensuite, nous devons donner les permissions d'exécution au binaire téléchargé.

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

Maintenant, vérifions que Docker Compose est correctement installé en contrôlant sa version.

docker-compose version

Vous devriez voir une sortie indiquant la version de Docker Compose installée.

Maintenant que Docker Compose est installé, nous pouvons créer notre fichier docker-compose.yml. Ce fichier utilise le format YAML pour définir les services, réseaux et volumes de votre application. Nous allons créer un fichier simple avec deux services : un serveur web et une base de données.

Accédez à votre répertoire de projet.

cd ~/project

Maintenant, créez un fichier nommé docker-compose.yml en utilisant l'éditeur nano.

nano docker-compose.yml

Collez le contenu suivant dans l'éditeur :

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: mysecretpassword

Décomposons ce fichier :

  • 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 de Docker Hub.
    • ports: mappe le port 80 de la machine hôte vers le port 80 du conteneur web, vous permettant d'accéder au serveur web depuis votre navigateur.
  • db: définit un service nommé db.
    • image: postgres:latest spécifie que ce service utilisera la dernière image postgres de Docker Hub.
    • environment: définit des variables d'environnement dans le conteneur. Ici, nous définissons le POSTGRES_PASSWORD requis par l'image PostgreSQL.

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

Vous avez maintenant créé avec succès un fichier docker-compose.yml définissant deux services.

Démarrer les services et observer leur état

Dans cette étape, nous allons démarrer les services définis dans notre fichier docker-compose.yml et observer leur état.

Tout d'abord, assurez-vous d'être dans le répertoire ~/project où vous avez créé le fichier docker-compose.yml.

cd ~/project

Maintenant, utilisez la commande docker-compose up pour démarrer les services. Le flag -d exécute les conteneurs en mode détaché, ce qui signifie qu'ils fonctionneront en arrière-plan.

docker-compose up -d

Lorsque vous exécutez cette commande pour la première fois, Docker Compose téléchargera les images nécessaires (nginx:latest et postgres:latest) si elles ne sont pas déjà présentes sur votre système. Cela peut prendre un certain temps selon votre connexion internet. Après le téléchargement, il créera et démarrera les conteneurs pour les services web et db.

Vous devriez voir une sortie indiquant que les réseaux, volumes (s'il y en a, bien que notre exemple simple n'en définisse pas) et conteneurs sont en cours de création et de démarrage.

Pour vérifier l'état des services en cours d'exécution, utilisez la commande docker-compose ps.

docker-compose ps

Cette commande liste les conteneurs gérés par Docker Compose dans le répertoire courant. Vous devriez voir les deux services web et db listés avec leur état, qui devrait être Up.

Vous pouvez également utiliser la commande standard docker ps pour voir tous les conteneurs en cours d'exécution sur votre système, y compris ceux démarrés par Docker Compose.

docker ps

Recherchez les conteneurs dont les noms sont préfixés par le nom du répertoire (project dans ce cas) suivi du nom du service (par exemple project-web-1, project-db-1).

Pour voir les logs des services, vous pouvez utiliser la commande docker-compose logs. Par exemple, pour voir les logs du service web :

docker-compose logs web

Et pour le service db :

docker-compose logs db

Cela est utile pour le débogage et la compréhension de ce qui se passe à l'intérieur de vos conteneurs.

Vous avez maintenant démarré avec succès les services définis dans votre fichier docker-compose.yml et observé leur état en utilisant docker-compose ps.

Utiliser docker compose wait pour bloquer jusqu'à l'arrêt des services

Dans cette étape, nous allons explorer la commande docker compose wait qui permet de bloquer l'exécution jusqu'à ce que les services atteignent un certain état. Par défaut, docker compose wait attend que les services s'arrêtent.

Tout d'abord, assurez-vous que vos services sont en cours d'exécution depuis l'étape précédente. Vous pouvez le vérifier avec docker-compose ps.

cd ~/project
docker-compose ps

Vous devriez voir les services web et db listés avec l'état Up.

Maintenant, ouvrez une nouvelle fenêtre de terminal ou un nouvel onglet. Gardez la fenêtre de terminal actuelle ouverte car nous l'utiliserons plus tard pour arrêter les services.

Dans la nouvelle fenêtre de terminal, accédez au répertoire ~/project.

cd ~/project

Exécutez la commande docker compose wait. Cette commande va bloquer et attendre que tous les services définis dans le fichier docker-compose.yml du répertoire courant se soient arrêtés.

docker compose wait

Vous remarquerez que cette commande semble bloquée. C'est normal car les services sont actuellement en cours d'exécution. La commande docker compose wait attend qu'ils s'arrêtent.

Maintenant, revenez à votre fenêtre de terminal d'origine où les services sont en cours d'exécution. Nous allons arrêter les services avec la commande docker-compose down. Cette commande arrête et supprime les conteneurs, réseaux et volumes créés par docker-compose up.

cd ~/project
docker-compose down

Observez la sortie dans la fenêtre de terminal d'origine. Vous verrez des messages indiquant que les conteneurs sont en train d'être arrêtés et supprimés.

Maintenant, revenez à la nouvelle fenêtre de terminal où vous avez exécuté docker compose wait. Lorsque les services sont arrêtés par la commande docker-compose down dans l'autre terminal, la commande docker compose wait dans cette fenêtre détectera que les services se sont arrêtés et se terminera.

Vous devriez voir le prompt de commande réapparaître dans la nouvelle fenêtre de terminal. Cela démontre comment docker compose wait bloque jusqu'à ce que les services spécifiés (tous les services par défaut) se soient arrêtés.

Vous avez utilisé avec succès docker compose wait pour bloquer jusqu'à l'arrêt de tous les services de votre projet.

Utiliser docker compose wait avec des services spécifiques

Dans l'étape précédente, nous avons utilisé docker compose wait pour attendre l'arrêt de tous les services. Dans cette étape, nous allons apprendre à utiliser docker compose wait pour attendre qu'un service spécifique atteigne un certain état.

Commencez par redémarrer nos services avec docker-compose up -d. Assurez-vous d'être dans le répertoire ~/project.

cd ~/project
docker-compose up -d

Vérifiez que les deux services sont en cours d'exécution avec docker-compose ps.

docker-compose ps

Ouvrez maintenant une nouvelle fenêtre de terminal ou onglet. Nous utiliserons ce nouveau terminal pour démontrer l'attente d'un service spécifique.

Dans la nouvelle fenêtre de terminal, accédez au répertoire ~/project.

cd ~/project

Nous pouvons spécifier quels services attendre en fournissant leurs noms après la commande docker compose wait. Par exemple, pour n'attendre que l'arrêt du service web :

docker compose wait web

Comme précédemment, cette commande va bloquer car le service web est actuellement en cours d'exécution.

Revenez maintenant à votre fenêtre de terminal d'origine. Nous allons arrêter uniquement le service web. Pour ce faire, nous pouvons utiliser la commande docker stop avec le nom du conteneur. Vous pouvez trouver le nom du conteneur avec docker ps. Il ressemblera probablement à project-web-1.

cd ~/project
docker stop project-web-1

Remplacez project-web-1 par le nom réel du conteneur si différent.

Observez la sortie dans la fenêtre de terminal d'origine. Vous verrez un message indiquant que le conteneur web est en cours d'arrêt.

Retournez à la nouvelle fenêtre de terminal où vous avez exécuté docker compose wait web. Comme le service web est arrêté, la commande docker compose wait web le détectera et se terminera.

Vous devriez voir le prompt de commande réapparaître dans la nouvelle fenêtre de terminal. Notez que la commande docker compose wait web s'est terminée bien que le service db soit toujours en cours d'exécution.

Pour confirmer que le service db est toujours actif, revenez au terminal d'origine et exécutez docker-compose ps.

cd ~/project
docker-compose ps

Vous devriez voir le service db listé avec l'état Up, tandis que le service web n'apparaîtra plus ou affichera un état arrêté.

Enfin, arrêtons le service db restant.

cd ~/project
docker-compose down

Vous avez utilisé avec succès docker compose wait pour bloquer jusqu'à l'arrêt d'un service spécifique.

Utiliser docker compose wait avec l'option --down-project

Dans cette dernière étape, nous allons explorer l'option --down-project avec docker compose wait. Cette option est utile lorsque vous souhaitez attendre l'arrêt des services puis automatiquement arrêter l'ensemble du projet.

Tout d'abord, assurons-nous que nos services sont arrêtés depuis l'étape précédente. Vous pouvez le vérifier avec docker-compose ps.

cd ~/project
docker-compose ps

Si certains services sont encore en cours d'exécution, arrêtez-les avec docker-compose down.

docker-compose down

Maintenant, redémarrons les services en mode détaché.

cd ~/project
docker-compose up -d

Vérifiez que les deux services sont en cours d'exécution.

docker-compose ps

Nous allons maintenant utiliser la commande docker compose wait avec l'option --down-project. Cette commande attendra que tous les services s'arrêtent puis exécutera automatiquement docker-compose down.

docker compose wait --down-project

Comme pour les utilisations précédentes de docker compose wait, cette commande va bloquer car les services sont actuellement en cours d'exécution.

Ouvrez maintenant une nouvelle fenêtre de terminal ou onglet. Dans ce nouveau terminal, nous allons arrêter manuellement les services.

Dans la nouvelle fenêtre de terminal, accédez au répertoire ~/project.

cd ~/project

Arrêtez les services avec docker-compose down.

docker-compose down

Observez la sortie dans la nouvelle fenêtre de terminal. Vous verrez des messages indiquant que les conteneurs sont en train d'être arrêtés et supprimés.

Revenez maintenant à la fenêtre de terminal d'origine où vous avez exécuté docker compose wait --down-project. Lorsque les services sont arrêtés par la commande docker-compose down dans l'autre terminal, la commande docker compose wait le détectera. Comme l'option --down-project a été utilisée, elle procédera automatiquement à l'arrêt du projet, ce qui signifie dans ce cas la suppression des conteneurs, réseaux et volumes.

Vous devriez voir dans la fenêtre de terminal d'origine une sortie similaire à celle obtenue lors de l'exécution manuelle de docker-compose down. Une fois le projet arrêté, la commande docker compose wait se terminera.

Vous avez utilisé avec succès docker compose wait avec l'option --down-project pour attendre l'arrêt des services puis automatiquement arrêter le projet.

Résumé

Dans ce lab, nous avons appris à utiliser la commande docker compose wait pour bloquer l'exécution jusqu'à l'arrêt des services. Nous avons commencé par installer Docker Compose et créer un simple fichier docker-compose.yml définissant deux services, web et db. Cette configuration nous a fourni l'environnement nécessaire pour démontrer la fonctionnalité de la commande wait.

Nous avons ensuite exploré comment utiliser docker compose wait pour attendre que tous les services définis dans le fichier docker-compose.yml s'arrêtent. Nous avons également appris à utiliser la commande avec des noms de services spécifiques pour n'attendre que leur arrêt, ainsi qu'à utiliser l'option --down-project pour attendre l'arrêt complet du projet. Ces étapes ont illustré la flexibilité et l'utilité de la commande docker compose wait pour gérer le cycle de vie des services Docker Compose.