Comment utiliser la commande docker compose stop pour gérer les 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 la commande docker compose stop pour gérer les services définis dans un fichier Docker Compose. Nous commencerons par préparer un projet Docker Compose simple, qui inclut l'installation de Docker Compose et la création d'un fichier docker-compose.yml de base.

Après la configuration du projet, vous pratiquerez le démarrage des services définis dans le fichier Compose. Le cœur du lab se concentre sur l'utilisation de la commande docker compose stop pour arrêter tous les services en cours d'exécution, arrêter un service spécifique et arrêter les services avec un délai d'attente spécifié. Cette expérience pratique vous fournira des compétences concrètes pour contrôler le cycle de vie de vos applications Docker multi-conteneurs à l'aide de Docker Compose.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555093{{"Comment utiliser la commande docker compose stop pour gérer les services"}} docker/ps -.-> lab-555093{{"Comment utiliser la commande docker compose stop pour gérer les services"}} docker/start -.-> lab-555093{{"Comment utiliser la commande docker compose stop pour gérer les services"}} docker/stop -.-> lab-555093{{"Comment utiliser la commande docker compose stop pour gérer les services"}} docker/pull -.-> lab-555093{{"Comment utiliser la commande docker compose stop pour gérer les services"}} end

Préparer un projet Docker Compose simple

Dans cette étape, nous allons préparer un projet Docker Compose simple. Docker Compose est un outil permettant de définir et d'exécuter des applications Docker multi-conteneurs. 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.

Comme Docker Compose n'est pas préinstallé dans l'environnement LabEx, nous devons d'abord l'installer. Nous allons télécharger le binaire Docker Compose et le rendre exécutable.

Tout d'abord, téléchargeons le binaire Docker Compose. Nous utiliserons curl pour télécharger la dernière version stable.

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 pour votre architecture système et l'enregistre dans /usr/local/bin/docker-compose.

Ensuite, nous devons rendre le binaire téléchargé exécutable.

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

Cette commande ajoute les permissions d'exécution au binaire Docker Compose.

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

docker-compose --version

Vous devriez voir la version installée de Docker Compose dans la sortie, confirmant que l'installation a réussi.

Maintenant que Docker Compose est installé, 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.

Commencez par créer un répertoire nommé my-compose-app dans votre répertoire personnel.

mkdir ~/project/my-compose-app

Accédez au répertoire nouvellement créé.

cd ~/project/my-compose-app

Maintenant, nous allons créer un fichier docker-compose.yml. Ce fichier définira les services de notre application. Nous utiliserons nano pour créer et éditer le fichier.

nano docker-compose.yml

Dans l'éditeur nano, collez le contenu suivant :

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  app:
    image: ubuntu:latest
    command: tail -f /dev/null

Analysons ce fichier docker-compose.yml :

  • version: '3.8' spécifie la version du format de fichier Docker Compose.
  • services: définit les services qui composent votre application.
  • web: définit un service nommé web.
    • image: nginx:latest spécifie que ce service utilisera l'image Docker nginx:latest. Si l'image n'est pas disponible localement, Docker Compose la téléchargera depuis Docker Hub.
    • ports: mappe le port 80 de la machine hôte vers le port 80 du conteneur web.
  • app: définit un service nommé app.
    • image: ubuntu:latest spécifie que ce service utilisera l'image Docker ubuntu:latest.
    • command: tail -f /dev/null spécifie la commande à exécuter lors du démarrage du conteneur app. Cette commande maintient le conteneur en fonctionnement indéfiniment sans quitter.

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

Avant de pouvoir démarrer les services, nous devons nous assurer que les images Docker requises sont disponibles. Bien que Docker Compose télécharge les images si elles ne sont pas présentes, il est bon de les télécharger explicitement au préalable, surtout dans des environnements avec un accès Internet limité ou pour un démarrage plus rapide.

Téléchargeons l'image nginx:latest.

docker pull nginx:latest

Cette commande télécharge l'image nginx:latest depuis Docker Hub.

Ensuite, téléchargeons l'image ubuntu:latest.

docker pull ubuntu:latest

Cette commande télécharge l'image ubuntu:latest depuis Docker Hub.

Vous avez maintenant préparé avec succès un projet Docker Compose simple avec deux services, web et app, et téléchargé les images Docker nécessaires.

Démarrer les services définis dans le fichier Compose

Dans cette étape, nous allons démarrer les services définis dans le fichier docker-compose.yml créé précédemment. Docker Compose fournit une commande simple pour construire, créer et démarrer tous les services de votre configuration.

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

cd ~/project/my-compose-app

Pour démarrer les services, nous utiliserons la commande docker-compose up. Par défaut, docker-compose up lance les conteneurs au premier plan et affiche les logs de chaque conteneur.

docker-compose up

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

  1. Rechercher le fichier docker-compose.yml dans le répertoire courant
  2. Construire ou télécharger les images Docker nécessaires pour chaque service si elles ne sont pas déjà disponibles
  3. Créer et démarrer les conteneurs pour chaque service
  4. Afficher les logs de tous les conteneurs en cours d'exécution dans votre terminal

Vous verrez une sortie indiquant que les réseaux et conteneurs sont en cours de création et de démarrage. Les logs des conteneurs web (nginx) et app (ubuntu) seront affichés.

Comme nous voulons que les services s'exécutent en arrière-plan pour pouvoir continuer à utiliser le terminal, nous pouvons arrêter l'exécution actuelle en appuyant sur Ctrl + C.

Pour exécuter les services en mode détaché (en arrière-plan), nous pouvons utiliser l'option -d avec la commande docker-compose up.

docker-compose up -d

Cette commande démarrera les services en arrière-plan et affichera les noms des conteneurs créés.

Maintenant que les services s'exécutent en mode détaché, vous pouvez vérifier l'état des conteneurs en cours d'exécution avec la commande docker ps.

docker ps

Vous devriez voir deux conteneurs en cours d'exécution : un pour le service web (basé sur l'image nginx) et un pour le service app (basé sur l'image ubuntu). La sortie affichera des informations sur les conteneurs, y compris leurs ID, images, statut et ports.

Pour vérifier que le service web est accessible, nous pouvons utiliser curl pour accéder au serveur nginx fonctionnant sur le port 80. Comme nous avons mappé le port 80 de l'hôte vers le port 80 du conteneur web, nous pouvons y accéder directement depuis la VM LabEx.

curl http://localhost:80

Vous devriez voir le contenu HTML par défaut servi par le serveur web nginx, ce qui confirme que le service web fonctionne et est accessible.

Arrêter tous les services en cours d'exécution

Dans cette étape, nous allons apprendre comment arrêter tous les services actuellement en cours d'exécution dans le cadre de notre projet Docker Compose. Docker Compose fournit une commande pratique pour arrêter tous les conteneurs définis dans le fichier docker-compose.yml.

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

cd ~/project/my-compose-app

Pour arrêter tous les services en cours d'exécution, nous utilisons la commande docker-compose down. Cette commande arrête et supprime les conteneurs, réseaux et volumes définis dans le fichier docker-compose.yml.

docker-compose down

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

  1. Arrêter proprement les conteneurs en cours d'exécution
  2. Supprimer les conteneurs arrêtés
  3. Supprimer les réseaux créés par Docker Compose pour ce projet
  4. Supprimer les volumes définis dans le fichier docker-compose.yml (sauf indication contraire)

Vous verrez une sortie indiquant que les conteneurs et réseaux sont en cours d'arrêt et de suppression.

Après avoir exécuté docker-compose down, vous pouvez vérifier que les conteneurs ne sont plus en cours d'exécution en utilisant la commande docker ps.

docker ps

Cette commande liste les conteneurs actuellement en cours d'exécution. Comme nous avons arrêté tous les services, vous ne devriez pas voir les conteneurs web ou app dans la sortie. La sortie ne devrait afficher que l'en-tête ou être vide si aucun autre conteneur ne fonctionne sur votre système.

L'arrêt des services avec docker-compose down est la méthode standard pour nettoyer les ressources de votre projet Docker Compose lorsque vous avez terminé avec elles.

Arrêter un service spécifique

Dans cette étape, nous allons apprendre comment arrêter un service spécifique au sein de notre projet Docker Compose, plutôt que d'arrêter tous les services simultanément. Cette fonctionnalité est utile lorsque vous avez besoin de redémarrer ou d'arrêter un seul composant de votre application.

Tout d'abord, assurons-nous que nos services sont en cours d'exécution. Accédez au répertoire du projet et démarrez les services en mode détaché.

cd ~/project/my-compose-app
docker-compose up -d

Vérifiez que les services web et app sont bien en cours d'exécution à l'aide de docker ps.

docker ps

Vous devriez voir les deux conteneurs listés comme étant en cours d'exécution.

Maintenant, arrêtons uniquement le service app. Pour arrêter un service spécifique, nous utilisons la commande docker-compose stop suivie du nom du service.

docker-compose stop app

Cette commande enverra un signal d'arrêt au conteneur du service app et attendra qu'il s'arrête proprement.

Après avoir exécuté la commande, vérifions à nouveau l'état des conteneurs.

docker ps

Vous devriez maintenant voir uniquement le conteneur web listé comme étant en cours d'exécution. Le conteneur app ne devrait plus apparaître dans la liste des conteneurs actifs.

Pour confirmer que le conteneur app s'est bien arrêté, vous pouvez également utiliser docker ps -a, qui affiche tous les conteneurs, y compris ceux qui sont arrêtés.

docker ps -a

Vous devriez voir le conteneur app listé avec un statut Exited.

L'arrêt d'un service spécifique vous permet de gérer individuellement les composants de votre application sans affecter les autres. Cette fonctionnalité est particulièrement utile pendant le développement ou lors du dépannage d'un service particulier.

Arrêter les services avec un délai d'attente

Dans cette étape, nous allons explorer comment arrêter les services avec un délai d'attente spécifié. Lorsque vous arrêtez un conteneur, Docker envoie un signal SIGTERM au processus principal du conteneur, lui donnant le temps de s'arrêter proprement. Si le processus ne se termine pas dans un certain délai, Docker envoie un signal SIGKILL pour le forcer à s'arrêter. Par défaut, ce délai est de 10 secondes. Vous pouvez ajuster ce délai en utilisant l'option -t ou --timeout avec les commandes docker-compose stop ou docker-compose down.

Tout d'abord, assurons-nous que nos services sont en cours d'exécution. Accédez au répertoire du projet et démarrez les services en mode détaché.

cd ~/project/my-compose-app
docker-compose up -d

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

docker ps

Maintenant, arrêtons le service web avec un délai d'attente de 5 secondes.

docker-compose stop -t 5 web

Cette commande indique à Docker Compose d'arrêter le service web et d'attendre un maximum de 5 secondes après l'envoi du signal SIGTERM pour que le conteneur s'arrête proprement. Si le conteneur ne s'arrête pas dans les 5 secondes, Docker enverra un signal SIGKILL.

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

Vérifions à nouveau l'état des conteneurs :

docker ps

Vous devriez maintenant voir uniquement le conteneur app en cours d'exécution. Le conteneur web devrait être arrêté.

De même, vous pouvez appliquer un délai d'attente lors de l'arrêt de tous les services avec docker-compose down. Arrêtons tous les services avec un délai de 3 secondes.

docker-compose down -t 3

Cette commande tentera d'arrêter tous les services définis dans le fichier docker-compose.yml, en attendant un maximum de 3 secondes pour que chaque conteneur s'arrête proprement avant de l'arrêter de force.

Vérifiez qu'aucun conteneur n'est en cours d'exécution après l'exécution de la commande :

docker ps

La sortie ne devrait afficher aucun conteneur en cours d'exécution.

L'utilisation de l'option de délai d'attente est importante pour s'assurer que vos applications disposent de suffisamment de temps pour effectuer des tâches de nettoyage avant d'être arrêtées, évitant ainsi la corruption de données ou d'autres problèmes.

Résumé

Dans ce lab, nous avons appris à préparer un projet simple avec Docker Compose. Cela a impliqué l'installation de Docker Compose en téléchargeant le binaire et en le rendant exécutable, puis en vérifiant l'installation. Nous avons ensuite créé un répertoire de projet et un fichier docker-compose.yml pour définir les services de notre application.

Nous avons également appris à gérer le cycle de vie des services définis dans le fichier Compose en utilisant la commande docker compose stop. Cela incluait le démarrage de tous les services, l'arrêt de tous les services en cours d'exécution, l'arrêt d'un service spécifique et l'arrêt des services avec un délai d'attente spécifié.