Comment utiliser la commande docker compose kill pour arrêter forcément 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 la commande docker compose kill pour arrêter de force les services définis dans un fichier Docker Compose. Nous commencerons par préparer un fichier Compose simple avec plusieurs services et les démarrerons à l'aide de docker compose up.

Ensuite, vous explorerez différentes façons d'utiliser la commande docker compose kill : pour arrêter de force tous les services, pour arrêter de force un service spécifique, et pour arrêter de force les services en utilisant un signal différent. Cette expérience pratique vous fournira des connaissances concrètes sur la gestion des services Docker Compose à l'aide de la commande kill.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ps -.-> lab-555081{{"Comment utiliser la commande docker compose kill pour arrêter forcément des services"}} docker/logs -.-> lab-555081{{"Comment utiliser la commande docker compose kill pour arrêter forcément des services"}} docker/pull -.-> lab-555081{{"Comment utiliser la commande docker compose kill pour arrêter forcément des services"}} end

Préparer un fichier Compose simple avec plusieurs services

Dans cette étape, nous allons préparer un fichier Docker Compose simple qui définit plusieurs services. Docker Compose est un outil qui permet de définir et d'exécuter des applications multi-conteneurs Docker. Bien que Docker soit préinstallé sur cette VM, Docker Compose ne l'est pas. Nous allons d'abord l'installer.

Tout 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

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

docker-compose --version

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

Ensuite, nous allons créer un répertoire pour notre projet et nous y placer.

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

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

nano docker-compose.yml

Dans l'éditeur nano, collez le contenu suivant. Ce fichier définit deux services : web et redis. Le service web utilise l'image nginx et mappe le port 80 du conteneur vers le port 8080 sur l'hôte. Le service redis utilise l'image redis.

version: "3.8"
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  redis:
    image: redis

Après avoir collé le contenu, enregistrez le fichier en appuyant sur Ctrl + X, puis Y, et enfin Entrée.

Avant de pouvoir démarrer les services, nous devons récupérer les images définies dans le fichier docker-compose.yml. Nous pouvons le faire en utilisant la commande docker pull.

docker pull nginx
docker pull redis

Ces commandes téléchargeront les images nginx et redis depuis Docker Hub.

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 attache les conteneurs pour 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. Le flag -d exécute les conteneurs en mode détaché, ce qui signifie qu'ils fonctionneront en arrière-plan sans bloquer votre terminal.

docker-compose up -d

Vous devriez voir une sortie indiquant que les réseaux, volumes (le cas échéant) et 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 des entrées pour les conteneurs web (nginx) et redis.

Vous pouvez également consulter les journaux des services en utilisant la commande docker-compose logs.

docker-compose logs

Cela affichera les journaux pour tous les services. Vous pouvez aussi voir les journaux d'un service spécifique en ajoutant son nom, par exemple docker-compose logs web.

Enfin, puisque nous avons mappé le port 80 du conteneur nginx vers le port 8080 sur l'hôte, vous pouvez accéder à la page d'accueil par défaut de Nginx en utilisant curl pour accéder à localhost sur le port 8080.

curl localhost:8080

Vous devriez voir le contenu HTML de la page d'accueil de Nginx dans la sortie.

Arrêt forcé de tous les services avec docker compose kill

Dans cette étape, nous allons apprendre comment forcer l'arrêt de tous les services en cours d'exécution définis dans notre fichier docker-compose.yml en utilisant la commande docker compose kill. Contrairement à docker compose down qui arrête proprement les conteneurs et supprime les ressources, docker compose kill envoie un signal spécifié aux conteneurs pour les forcer à s'arrêter immédiatement.

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

cd ~/project/my-compose-app

Pour forcer l'arrêt de tous les services, exécutez simplement la commande docker compose kill sans spécifier de noms de services. Par défaut, cette commande envoie un signal SIGKILL aux conteneurs.

docker-compose kill

Vous devriez voir une sortie indiquant que les conteneurs sont en cours d'arrêt forcé.

Pour vérifier que les conteneurs ont bien été arrêtés, vous pouvez utiliser à nouveau la commande docker ps.

docker ps

Cette fois-ci, vous ne devriez pas voir les conteneurs web (nginx) et redis listés, car ils ont été arrêtés.

Vous pouvez également utiliser docker ps -a pour voir tous les conteneurs, y compris ceux qui sont arrêtés. Vous devriez voir les conteneurs my-compose-app-web-1 et my-compose-app-redis-1 avec un statut "Exited".

docker ps -a

Arrêt forcé d'un service spécifique avec docker compose kill

Dans cette étape, nous allons apprendre comment forcer l'arrêt d'un service spécifique défini dans notre fichier docker-compose.yml en utilisant la commande docker compose kill suivie du nom du service.

Commençons par redémarrer nos services afin d'avoir des conteneurs à arrêter. Assurez-vous d'être dans le répertoire ~/project/my-compose-app.

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

Vérifiez que les deux conteneurs sont en cours d'exécution avec la commande docker ps.

docker ps

Maintenant, forçons l'arrêt du seul service web. Pour ce faire, nous ajoutons le nom du service web après la commande docker compose kill.

docker-compose kill web

Vous devriez voir une sortie indiquant que le conteneur web est en cours d'arrêt forcé.

Pour vérifier que seul le conteneur web a été arrêté, utilisez à nouveau la commande docker ps.

docker ps

Vous ne devriez maintenant voir que le conteneur redis listé comme étant en cours d'exécution. Le conteneur web ne devrait pas figurer dans la liste des conteneurs actifs.

Vous pouvez également utiliser docker ps -a pour voir tous les conteneurs, y compris ceux qui sont arrêtés. Le conteneur my-compose-app-web-1 devrait avoir un statut "Exited", tandis que le conteneur my-compose-app-redis-1 devrait toujours être "Up".

docker ps -a

Arrêt forcé des services avec un signal différent en utilisant docker compose kill -s

Dans cette étape, nous allons explorer comment utiliser la commande docker compose kill avec le flag -s pour envoyer un signal spécifique aux conteneurs. Par défaut, docker compose kill envoie un signal SIGKILL qui termine immédiatement le processus. Cependant, vous pourriez vouloir envoyer un signal différent comme SIGTERM, qui est une demande de terminaison gracieuse du processus.

Commençons par nous assurer que nos services sont en cours d'exécution. Naviguez vers le 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 conteneurs sont en cours d'exécution avec la commande docker ps.

docker ps

Maintenant, forçons l'arrêt de tous les services en utilisant le signal SIGTERM. Nous utilisons le flag -s suivi du nom du signal.

docker-compose kill -s SIGTERM

Vous devriez voir une sortie indiquant que les conteneurs sont en cours d'arrêt avec le signal spécifié.

Pour confirmer que les conteneurs se sont arrêtés, utilisez la commande docker ps.

docker ps

Ni le conteneur web ni le conteneur redis ne devraient apparaître comme étant en cours d'exécution.

L'utilisation de docker ps -a montrera que les conteneurs se sont arrêtés.

docker ps -a

La possibilité d'envoyer différents signaux est utile pour des arrêts plus contrôlés, permettant aux applications dans les conteneurs d'effectuer des tâches de nettoyage avant de s'arrêter, si elles sont configurées pour gérer ces signaux.

Enfin, pour nettoyer les conteneurs arrêtés et le réseau créé par Docker Compose, vous pouvez utiliser la commande docker compose down.

docker-compose down

Cette commande arrêtera et supprimera les conteneurs, réseaux et volumes définis dans le fichier docker-compose.yml.

Résumé

Dans ce lab, nous avons appris à préparer un fichier Docker Compose simple définissant plusieurs services (web et redis) et à installer Docker Compose. Nous avons ensuite démarré ces services en utilisant la commande docker compose up. Par la suite, nous avons exploré comment arrêter forcément tous les services en cours d'exécution définis dans le fichier Compose avec docker compose kill, et comment cibler un service spécifique pour une terminaison forcée avec docker compose kill <nom_du_service>. Enfin, nous avons appris à envoyer un signal différent aux services lors du processus d'arrêt en utilisant le flag -s, comme par exemple docker compose kill -s SIGKILL.