Comment utiliser la commande docker stack services pour lister 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 laboratoire, vous apprendrez à utiliser efficacement la commande docker stack services pour gérer et inspecter les services au sein d'une pile Docker (Docker stack). Nous commencerons par configurer une simple pile Docker à l'aide de Docker Compose, ce qui implique d'installer Docker Compose et de déployer une application de base définie dans un fichier docker-compose.yml.

Une fois que la pile est en cours d'exécution, vous explorerez la fonctionnalité principale de docker stack services pour lister tous les services d'une pile. En vous appuyant sur cela, vous apprendrez à affiner vos listes de services en filtrant en fonction du nom et de l'ID du service. Enfin, vous découvrirez comment personnaliser le format de sortie de la liste des services pour afficher les informations dont vous avez besoin de manière claire et organisée.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/ps -.-> lab-555238{{"Comment utiliser la commande docker stack services pour lister les services"}} docker/rm -.-> lab-555238{{"Comment utiliser la commande docker stack services pour lister les services"}} docker/network -.-> lab-555238{{"Comment utiliser la commande docker stack services pour lister les services"}} end

Lister tous les services d'une pile

Dans cette étape, vous apprendrez à lister tous les services en cours d'exécution au sein d'une pile Docker (Docker stack). Avant de pouvoir lister les services, nous devons avoir une pile en cours d'exécution. Étant donné que Docker Compose n'est pas préinstallé, nous l'installerons d'abord, puis nous déploierons une simple pile.

Tout d'abord, installons Docker Compose. Nous téléchargerons le binaire et le rendrons 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 que Docker Compose est installé, créons un simple fichier docker-compose.yml pour définir notre pile. Nous créerons un fichier nommé docker-compose.yml dans le répertoire ~/project.

nano ~/project/docker-compose.yml

Ajoutez le contenu suivant au fichier :

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  app:
    image: alpine:latest
    command: sleep 3600

Ce fichier définit une pile avec deux services : web utilisant l'image nginx et app utilisant l'image alpine. Le service web mappe le port 80 de l'hôte sur le port 80 du conteneur. Le service app exécute simplement la commande sleep 3600 pour maintenir le conteneur en cours d'exécution.

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

Maintenant, déployons la pile à l'aide de docker stack deploy. Nous nommerons notre pile mystack.

docker stack deploy -c ~/project/docker-compose.yml mystack

Cette commande lit le fichier docker-compose.yml et crée les services définis à l'intérieur en tant que pile Docker nommée mystack. Vous devriez voir une sortie indiquant que les services sont en cours de création.

Une fois que la pile est déployée, vous pouvez lister tous les services de la pile en utilisant la commande docker stack services suivie du nom de la pile.

docker stack services mystack

Cette commande affichera un tableau montrant des informations sur les services de la pile mystack, y compris leur ID, leur nom, leur mode, leur nombre de répliques, leur image et leurs ports.

Vous devriez voir une sortie similaire à celle-ci :

ID             NAME                 MODE         REPLICAS   IMAGE          PORTS
xxxxxxxxxxxx   mystack_app          replicated   1/1        alpine:latest
xxxxxxxxxxxx   mystack_web          replicated   1/1        nginx:latest   *:80->80/tcp

La sortie liste les services mystack_app et mystack_web, confirmant qu'ils sont en cours d'exécution dans le cadre de la pile mystack.

Filtrer les services par nom

Dans cette étape, vous apprendrez à filtrer la liste des services d'une pile Docker (Docker stack) en fonction de leur nom. Cela est utile lorsque vous avez de nombreux services dans une pile et que vous ne souhaitez voir que les informations sur des services spécifiques.

La commande docker stack services prend en charge le drapeau --filter, qui vous permet de spécifier des critères pour filtrer la sortie. Pour filtrer par nom de service, vous pouvez utiliser le filtre name.

La syntaxe pour filtrer par nom est --filter name=<service_name>. N'oubliez pas que les noms de services dans une pile sont généralement préfixés par le nom de la pile, suivi d'un tiret bas et du nom de service défini dans le fichier docker-compose.yml (par exemple, mystack_web).

Filtrons les services de notre pile mystack pour n'afficher que le service web.

docker stack services mystack --filter name=mystack_web

Cette commande n'affichera que la ligne correspondant au service mystack_web.

Vous devriez voir une sortie similaire à celle-ci :

ID             NAME                 MODE         REPLICAS   IMAGE          PORTS
xxxxxxxxxxxx   mystack_web          replicated   1/1        nginx:latest   *:80->80/tcp

Notez que seules les informations concernant le service mystack_web sont affichées.

De même, vous pouvez filtrer pour n'afficher que le service app :

docker stack services mystack --filter name=mystack_app

Cela affichera les informations concernant le service mystack_app :

ID             NAME                 MODE         REPLICAS   IMAGE
xxxxxxxxxxxx   mystack_app          replicated   1/1        alpine:latest

L'utilisation du filtre name vous permet de trouver rapidement et d'afficher les détails de services spécifiques au sein d'une grande pile.

Filtrer les services par ID

Dans cette étape, vous apprendrez à filtrer la liste des services d'une pile Docker (Docker stack) en fonction de leur identifiant unique (ID). Bien que le filtrage par nom soit souvent plus intuitif, le filtrage par ID est utile lorsque vous avez besoin d'être absolument précis ou lorsque vous gérez des services qui pourraient avoir des noms similaires.

Chaque service dans une pile Docker est assigné un ID unique. Vous pouvez voir ces IDs dans la première colonne de la sortie de la commande docker stack services.

Pour filtrer par ID de service, vous utilisez le drapeau --filter avec le filtre id. La syntaxe est --filter id=<service_id>. Vous n'avez besoin de fournir qu'un préfixe suffisant de l'ID pour identifier de manière unique le service.

Tout d'abord, listons à nouveau tous les services pour obtenir leurs IDs.

docker stack services mystack

Regardez la sortie et identifiez les IDs des services mystack_web et mystack_app. Les IDs seront des chaînes de caractères hexadécimaux. Par exemple, la sortie pourrait ressembler à ceci (vos IDs seront différents) :

ID             NAME                 MODE         REPLICAS   IMAGE          PORTS
xxxxxxxxxxxx   mystack_app          replicated   1/1        alpine:latest
yyyyyyyyyyyy   mystack_web          replicated   1/1        nginx:latest   *:80->80/tcp

Supposons que l'ID de mystack_web commence par yyyyyyyyyyyy. Vous pouvez filtrer par cet ID (ou un préfixe unique plus court) comme ceci :

docker stack services mystack --filter id=yyyyyyyyyyyy

Remplacez yyyyyyyyyyyy par le véritable début de l'ID de votre service mystack_web.

Cette commande affichera uniquement la ligne du service avec l'ID correspondant.

Vous devriez voir une sortie similaire à celle-ci, montrant uniquement le service mystack_web :

ID             NAME                 MODE         REPLICAS   IMAGE          PORTS
yyyyyyyyyyyy   mystack_web          replicated   1/1        nginx:latest   *:80->80/tcp

De même, vous pouvez filtrer par l'ID du service mystack_app. Trouvez son ID dans la sortie de docker stack services mystack et utilisez-le dans le filtre. Par exemple, si l'ID commence par xxxxxxxxxxxx :

docker stack services mystack --filter id=xxxxxxxxxxxx

Remplacez xxxxxxxxxxxx par le véritable début de l'ID de votre service mystack_app.

Cela affichera les informations concernant le service mystack_app :

ID             NAME                 MODE         REPLICAS   IMAGE
xxxxxxxxxxxx   mystack_app          replicated   1/1        alpine:latest

Le filtrage par ID offre un moyen précis de cibler des services spécifiques, en particulier dans des scripts automatisés ou lorsque vous gérez des services qui pourraient avoir des noms similaires.

Formater la sortie de la liste des services

Dans cette étape, vous apprendrez à formater la sortie de la commande docker stack services. Par défaut, la sortie est affichée sous forme de tableau lisible par l'homme. Cependant, vous pouvez utiliser le drapeau --format pour personnaliser la sortie, ce qui est particulièrement utile pour les scripts ou lorsque vous avez besoin d'informations spécifiques dans un format différent.

Le drapeau --format accepte une chaîne de modèle Go. Cela vous permet de spécifier exactement quels champs afficher et comment les formater. Les champs courants que vous pourriez vouloir afficher incluent .ID, .Name, .Image, .Mode, .Replicas et .Ports.

Essayons de formater la sortie pour n'afficher que l'ID du service, le nom et l'image, séparés par des tabulations.

docker stack services mystack --format "{{.ID}}\t{{.Name}}\t{{.Image}}"

Dans cette commande :

  • {{.ID}}, {{.Name}} et {{.Image}} sont des espaces réservés de modèle Go qui seront remplacés par les valeurs respectives de chaque service.
  • \t représente un caractère de tabulation, utilisé ici comme séparateur.

La sortie sera maintenant une liste de services, chaque ligne contenant l'ID, le nom et l'image, séparés par des tabulations :

xxxxxxxxxxxx	mystack_app	alpine:latest
yyyyyyyyyyyy	mystack_web	nginx:latest

(N'oubliez pas que les IDs seront différents dans votre environnement).

Vous pouvez également formater la sortie sous forme de liste, ce qui peut être plus facile à analyser dans certains cas. Par exemple, pour lister le nom du service et le nombre de réplicas :

docker stack services mystack --format "- {{.Name}} (Replicas: {{.Replicas}})"

Cela produira la sortie suivante :

- mystack_app (Replicas: 1/1)
- mystack_web (Replicas: 1/1)

Le drapeau --format offre un moyen puissant d'adapter la sortie de docker stack services à vos besoins spécifiques, facilitant ainsi l'intégration avec d'autres outils ou scripts.

Enfin, nettoyons la pile déployée en la supprimant.

docker stack rm mystack

Cette commande supprimera tous les services et les réseaux associés à la pile mystack. Vous devriez voir une sortie indiquant que la pile est en cours de suppression.

Résumé

Dans ce laboratoire, vous avez appris à lister les services au sein d'une pile Docker (Docker stack) en utilisant la commande docker stack services. Cela a impliqué tout d'abord d'installer Docker Compose et de déployer une pile simple définie dans un fichier docker-compose.yml. Vous avez ensuite utilisé docker stack services <stack_name> pour afficher un tableau de tous les services de la pile déployée.

Le laboratoire a également abordé le filtrage des services par nom et par identifiant (ID), vous permettant de réduire la liste aux services spécifiques. Enfin, vous avez exploré comment formater la sortie de la commande docker stack services pour personnaliser les informations affichées.