Comment utiliser la commande docker compose restart 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 à gérer efficacement le cycle de vie de vos services Docker en utilisant la commande docker compose restart. Nous commencerons par configurer une application multi-services simple à l'aide de Docker Compose, comprenant un service web et un service de base de données.

Après la configuration, vous explorerez différentes façons d'utiliser la commande docker compose restart. Cela inclut le redémarrage de tous les services de votre application, le ciblage et le redémarrage d'un service spécifique, le redémarrage d'un service sans affecter ses dépendances, et enfin, le redémarrage d'un service avec une période de timeout définie. À travers ces exercices pratiques, vous acquerrez une expérience concrète dans le contrôle et la maintenance de vos applications Dockerisées.


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/restart("Restart Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555089{{"Comment utiliser la commande docker compose restart pour gérer les services"}} docker/ps -.-> lab-555089{{"Comment utiliser la commande docker compose restart pour gérer les services"}} docker/restart -.-> lab-555089{{"Comment utiliser la commande docker compose restart pour gérer les services"}} docker/pull -.-> lab-555089{{"Comment utiliser la commande docker compose restart pour gérer les services"}} end

Préparer une application multi-services simple

Dans cette étape, nous allons préparer une application multi-services simple que nous utiliserons tout au long de ce lab pour pratiquer le redémarrage des services Docker. Cette application se compose de deux services : un service web et un service de base de données. Nous définirons ces services à l'aide d'un fichier Docker Compose.

Tout d'abord, nous devons installer Docker Compose. Comme il n'est pas préinstallé dans l'environnement VM de LabEx, nous allons le télécharger et l'installer.

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

La première commande télécharge le binaire Docker Compose depuis le dépôt GitHub officiel 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 pour télécharger le bon binaire. La deuxième commande rend le fichier téléchargé exécutable.

Maintenant, vérifions l'installation en consultant la version de Docker Compose.

docker-compose --version

Vous devriez voir une sortie similaire à Docker Compose version v2.20.2.

Ensuite, naviguez vers le répertoire ~/project, qui est votre répertoire de travail pour ce lab.

cd ~/project

Maintenant, nous allons créer un fichier docker-compose.yml pour définir notre application multi-services. Ce fichier spécifiera les services, leurs images et toutes les configurations nécessaires.

nano docker-compose.yml

Collez le contenu suivant dans le fichier docker-compose.yml :

version: "3.8"

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    depends_on:
      - db

  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: mysecretpassword

Dans 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 de notre application.
  • Le service web utilise l'image nginx:latest, mappe le port 80 de l'hôte vers le port 80 du conteneur, et dépend du service db. Cela signifie que le service db sera démarré avant le service web.
  • Le service db utilise l'image postgres:latest et définit la variable d'environnement POSTGRES_PASSWORD, qui est requise par l'image PostgreSQL.

Enregistrez le fichier et quittez l'éditeur nano (appuyez sur Ctrl + X, puis Y, puis Entrée).

Avant de démarrer les services, nous devons récupérer les images Docker nécessaires.

docker pull nginx:latest
docker pull postgres:latest

Ces commandes téléchargent les images nginx:latest et postgres:latest depuis Docker Hub.

Enfin, démarrons les services définis dans notre fichier docker-compose.yml.

docker-compose up -d

La commande docker-compose up -d construit, crée et démarre les services en arrière-plan (mode détaché).

Vous pouvez vérifier l'état des services en cours d'exécution avec la commande suivante :

docker-compose ps

Vous devriez voir une sortie indiquant que les services web et db sont en cours d'exécution.

Redémarrer tous les services

Dans cette étape, nous allons apprendre comment redémarrer tous les services définis dans notre fichier docker-compose.yml. Le redémarrage des services est une opération courante lorsque vous apportez des modifications à votre code d'application, à sa configuration ou au fichier Docker Compose lui-même.

Pour redémarrer tous les services, nous utilisons la commande docker-compose restart. Cette commande arrêtera tous les conteneurs en cours d'exécution définis dans le fichier docker-compose.yml puis les relancera.

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

cd ~/project

Maintenant, exécutez la commande suivante pour redémarrer tous les services :

docker-compose restart

Vous verrez une sortie indiquant que les services sont en cours d'arrêt puis de démarrage.

Une fois la commande terminée, vous pouvez vérifier que les services ont été redémarrés et sont à nouveau en fonctionnement avec la commande docker-compose ps.

docker-compose ps

La sortie devrait montrer que les services web et db sont dans l'état Up, indiquant qu'ils ont été redémarrés avec succès.

Le redémarrage de tous les services est utile lorsque vous devez appliquer des modifications affectant plusieurs parties de votre application ou lorsque vous souhaitez garantir un redémarrage propre de l'ensemble de votre stack applicative.

Redémarrer un service spécifique

Dans cette étape, nous allons apprendre comment redémarrer uniquement un service spécifique au sein de notre application multi-services. Ceci est utile lorsque vous avez apporté des modifications à un seul service et que vous n'avez pas besoin de redémarrer l'ensemble de la stack applicative.

Pour redémarrer un service spécifique, utilisez la commande docker-compose restart suivie du nom du service que vous souhaitez redémarrer. Les noms des services sont définis dans votre fichier docker-compose.yml (dans notre cas, web et db).

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

cd ~/project

Redémarrons le service web.

docker-compose restart web

Vous verrez une sortie indiquant que le service web est en cours d'arrêt puis de démarrage. Le service db restera en fonctionnement.

Une fois la commande terminée, vérifiez l'état des services avec docker-compose ps.

docker-compose ps

La sortie devrait montrer que les services web et db sont toujours dans l'état Up. Cependant, le service web aurait été arrêté puis redémarré.

Maintenant, redémarrons le service db.

docker-compose restart db

Vous verrez une sortie indiquant que le service db est en cours d'arrêt puis de démarrage. Notez que comme le service web dépend du service db, Docker Compose pourrait également arrêter et redémarrer brièvement le service web pour s'assurer que la dépendance est respectée pendant le redémarrage de db.

Vérifiez à nouveau l'état des services :

docker-compose ps

Les deux services devraient être Up. Le redémarrage individuel des services permet un contrôle plus granulaire du cycle de vie de votre application.

Redémarrer un service sans ses dépendances

Dans l'étape précédente, nous avons vu que le redémarrage du service db provoquait également un bref redémarrage du service web en raison de la relation depends_on définie dans docker-compose.yml. Dans certains cas, vous pourriez souhaiter redémarrer un service sans affecter ses dépendances.

Pour redémarrer un service sans redémarrer ses dépendances, vous pouvez utiliser la commande docker-compose restart avec l'option --no-deps.

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

cd ~/project

Essayons de redémarrer à nouveau le service db, cette fois en utilisant l'option --no-deps.

docker-compose restart --no-deps db

Observez la sortie. Vous devriez voir que seul le service db est arrêté puis redémarré. Le service web, qui dépend de db, n'est pas affecté.

Vérifiez l'état des services avec docker-compose ps.

docker-compose ps

Les deux services devraient toujours être dans l'état Up. Cela démontre comment redémarrer un service de manière isolée, ce qui peut être utile pour le débogage ou l'application de modifications à un seul service sans perturber ceux qui en dépendent.

Redémarrer un service avec un timeout spécifique

Dans cette dernière étape, nous allons apprendre à spécifier un timeout pour l'opération de redémarrage. Lorsque vous redémarrez un service, Docker Compose envoie un signal d'arrêt au conteneur et attend qu'il s'arrête proprement. Si le conteneur ne s'arrête pas dans un certain délai, Docker force son arrêt. Vous pouvez contrôler cette période d'attente en utilisant l'option --timeout.

Le timeout par défaut pour l'arrêt des conteneurs est de 10 secondes. Essayons de redémarrer le service web avec un timeout plus court de 3 secondes.

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

cd ~/project

Maintenant, exécutez la commande suivante pour redémarrer le service web avec un timeout de 3 secondes :

docker-compose restart --timeout 3 web

Vous verrez une sortie indiquant que le service web est en cours d'arrêt puis de démarrage. Docker Compose attendra un maximum de 3 secondes que le conteneur s'arrête proprement avant de forcer son arrêt.

Une fois la commande terminée, vérifiez l'état des services avec docker-compose ps.

docker-compose ps

Les deux services devraient toujours être dans l'état Up.

L'utilisation de l'option --timeout vous permet de contrôler combien de temps Docker Compose attend qu'un service s'arrête lors d'un redémarrage. Ceci peut être utile pour les services nécessitant plus ou moins de temps pour s'arrêter proprement.

Enfin, nettoyons les services en cours d'exécution en les arrêtant et les supprimant.

docker-compose down

La commande docker-compose down arrête et supprime les conteneurs, réseaux et volumes créés par docker-compose up.

Résumé

Dans ce lab, nous avons appris à préparer une application multi-services simple en utilisant Docker Compose. Cela a impliqué l'installation de Docker Compose, la vérification de cette installation, et la création d'un fichier docker-compose.yml pour définir deux services : un service web (nginx) et un service de base de données (postgres), avec le service web dépendant du service de base de données.

Nous avons ensuite exploré différentes manières de gérer ces services en utilisant la commande docker compose restart. Nous avons appris comment :

  • Redémarrer tous les services définis dans le fichier docker-compose.yml
  • Redémarrer un service spécifique
  • Redémarrer un service sans redémarrer ses dépendances
  • Redémarrer un service avec une période de timeout spécifiée

Ces étapes ont démontré la flexibilité et le contrôle offerts par Docker Compose pour gérer le cycle de vie des applications multi-conteneurs.