Comment utiliser la commande docker service ps pour lister les tâches de service

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 (lab), vous apprendrez à utiliser efficacement la commande docker service ps pour inspecter et gérer les tâches au sein d'un service Docker Swarm. Vous commencerez par lister les informations de base des tâches associées à un service, en comprenant les détails clés fournis dans la sortie par défaut.

En vous appuyant sur la liste de base, vous explorerez ensuite comment récupérer tous les détails des tâches de service en utilisant le drapeau --no-trunc pour obtenir des informations exhaustives. Le laboratoire vous guidera également sur la façon de filtrer les tâches en fonction de différents critères tels que le nom, le nœud sur lequel elles sont exécutées et leur état souhaité, vous permettant de cibler des tâches spécifiques. Enfin, vous apprendrez à formater la sortie de la commande docker service ps pour personnaliser les informations affichées selon vos besoins.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") subgraph Lab Skills docker/ps -.-> lab-555228{{"Comment utiliser la commande docker service ps pour lister les tâches de service"}} docker/rm -.-> lab-555228{{"Comment utiliser la commande docker service ps pour lister les tâches de service"}} docker/create -.-> lab-555228{{"Comment utiliser la commande docker service ps pour lister les tâches de service"}} end

Lister les tâches d'un service

Dans cette étape, vous apprendrez à lister les tâches associées à un service spécifique dans un Docker Swarm. Les tâches sont les unités fondamentales de planification dans Swarm, représentant une instance en cours d'exécution d'un service.

Tout d'abord, assurons-nous que vous avez un service en cours d'exécution. Nous allons créer un service simple en utilisant l'image nginx.

docker service create --name my-nginx nginx

Cette commande crée un service nommé my-nginx en utilisant l'image nginx. Docker Swarm créera et gérera automatiquement les tâches pour ce service.

Maintenant, pour lister les tâches du service my-nginx, vous pouvez utiliser la commande docker service ps suivie du nom du service.

docker service ps my-nginx

Vous devriez voir une sortie similaire à celle-ci, montrant les tâches associées à votre service :

ID             NAME         IMAGE          NODE         DESIRED STATE   CURRENT STATE           ERROR   PORTS
<task_id>      my-nginx.1   nginx:latest   <node_name>   Running         Running 5 seconds ago

La sortie fournit des informations sur chaque tâche, y compris son ID, son nom, l'image qu'elle utilise, le nœud sur lequel elle est exécutée, son état souhaité et son état actuel.

Lister les tâches avec tous les détails

Dans l'étape précédente, vous avez appris à lister les informations de base sur les tâches d'un service. Parfois, vous avez besoin d'informations plus détaillées sur chaque tâche, telles que l'identifiant complet de la tâche, l'identifiant du conteneur, etc.

Pour obtenir tous les détails des tâches, vous pouvez utiliser le drapeau --no-trunc avec la commande docker service ps. Ce drapeau empêche Docker de tronquer la sortie, affichant ainsi les identifiants complets et d'autres informations.

Listons les tâches du service my-nginx avec tous les détails :

docker service ps --no-trunc my-nginx

Vous verrez une sortie similaire à celle de l'étape précédente, mais avec l'identifiant complet de la tâche et potentiellement des informations plus détaillées en fonction de l'état et de la configuration de la tâche.

ID                                                           NAME         IMAGE          NODE         DESIRED STATE   CURRENT STATE            ERROR   PORTS
<full_task_id>                                               my-nginx.1   nginx:latest   <node_name>   Running         Running 10 seconds ago

En comparant cette sortie à celle de l'étape précédente, vous pouvez voir l'identifiant complet de la tâche au lieu d'une version tronquée. Cela est utile lorsque vous avez besoin de référencer précisément une tâche spécifique, par exemple, lors de l'inspection d'une tâche.

Filtrer les tâches par nom ou par nœud

Dans un cluster Swarm plus important, vous pourriez avoir de nombreuses tâches en cours d'exécution sur plusieurs nœuds. Pour trouver des tâches spécifiques, vous pouvez filtrer la sortie de docker service ps en fonction de différents critères, tels que le nom de la tâche ou le nœud sur lequel elle est exécutée.

Le drapeau --filter est utilisé pour le filtrage. La syntaxe de base est --filter "key=value".

Pour filtrer les tâches par nom, vous pouvez utiliser la clé name. Par exemple, pour trouver les tâches dont le nom commence par my-nginx, vous pouvez utiliser :

docker service ps --filter "name=my-nginx.1" my-nginx

Cette commande affichera uniquement la tâche nommée my-nginx.1 pour le service my-nginx. Notez que les noms de tâches sont généralement au format nom_du_service.numéro_de_tâche.

Pour filtrer les tâches par le nœud sur lequel elles sont exécutées, vous pouvez utiliser la clé node. Tout d'abord, vous devez connaître le nom du nœud sur lequel votre tâche est exécutée. Vous pouvez obtenir ce nom à partir de la sortie de docker service ps. Supposons que le nom de votre nœud soit labex-node.

docker service ps --filter "node=labex-node" my-nginx

Cette commande affichera les tâches du service my-nginx qui sont exécutées sur le nœud nommé labex-node. Remplacez labex-node par le nom réel de votre nœud s'il est différent.

Vous pouvez combiner des filtres en utilisant plusieurs drapeaux --filter.

Filtrer les tâches par état souhaité

En plus de filtrer les tâches par nom ou par nœud, vous pouvez également les filtrer en fonction de leur état souhaité. L'état souhaité indique l'état dans lequel le gestionnaire Swarm veut que se trouve la tâche (par exemple, Running (en cours d'exécution), Shutdown (arrêté), Rejected (rejeté)).

Pour filtrer les tâches par état souhaité, vous utilisez le drapeau --filter avec la clé desired-state.

Par exemple, pour lister uniquement les tâches qui sont actuellement souhaitées en état Running pour le service my-nginx, vous pouvez utiliser :

docker service ps --filter "desired-state=running" my-nginx

Étant donné que notre service my-nginx est en cours d'exécution, cette commande affichera les tâches actives.

Si vous souhaitez voir les tâches qui ont été arrêtées, vous pouvez utiliser :

docker service ps --filter "desired-state=shutdown" my-nginx

Actuellement, cette commande peut ne rien afficher à moins que vous n'ayez réduit l'échelle ou supprimé des tâches.

Vous pouvez également filtrer les tâches qui ont été Rejected. Cet état indique que le gestionnaire Swarm n'a pas été en mesure de démarrer la tâche.

docker service ps --filter "desired-state=rejected" my-nginx

Comprendre les états souhaités est crucial pour surveiller la santé et l'état de vos services dans un Swarm.

Formater la sortie des tâches de service

Dans cette étape finale, vous allez apprendre à personnaliser le format de sortie de la commande docker service ps. Cela est utile lorsque vous souhaitez extraire des informations spécifiques ou intégrer la sortie avec d'autres outils.

Le drapeau --format vous permet de spécifier un modèle Go pour formater la sortie. Vous pouvez utiliser des espaces réservés tels que .ID, .Name, .Image, .Node, .DesiredState, .CurrentState, .Error et .Ports pour afficher les attributs de tâche correspondants.

Par exemple, pour afficher uniquement l'ID de la tâche, le nom et l'image au format tableau, vous pouvez utiliser :

docker service ps --format "table {{.ID}}\t{{.Name}}\t{{.Image}}" my-nginx

Cette commande produira une sortie similaire à ceci :

ID             NAME         IMAGE
<task_id>      my-nginx.1   nginx:latest

Vous pouvez également formater la sortie sous forme de liste de valeurs, ce qui est utile pour les scripts. Par exemple, pour obtenir uniquement les ID de tâche :

docker service ps --format "{{.ID}}" my-nginx

Cela affichera uniquement l'ID (ou les ID) de la tâche.

Essayons un autre format, affichant le nom de la tâche et le nœud sur lequel elle est exécutée :

docker service ps --format "Task: {{.Name}} is running on node: {{.Node}}" my-nginx

La sortie ressemblera à ceci :

Task: my-nginx.1 is running on node: <node_name>

Expérimentez avec différents espaces réservés et options de formatage pour obtenir la sortie dont vous avez besoin.

Enfin, nettoyons le service que nous avons créé :

docker service rm my-nginx

Cette commande supprime le service my-nginx et ses tâches associées.

Résumé

Dans ce laboratoire, vous avez appris à utiliser la commande docker service ps pour lister les tâches associées à un service Docker Swarm. Vous avez commencé par créer un simple service nginx, puis utilisé docker service ps <service_name> pour afficher ses tâches, en comprenant les colonnes de sortie de base telles que l'ID, le nom, l'image, le nœud, l'état souhaité et l'état actuel.

En outre, vous avez exploré comment obtenir des informations plus détaillées sur les tâches en utilisant le drapeau --no-trunc pour éviter la troncature de la sortie, vous permettant ainsi de voir les ID complets et d'autres détails complets sur chaque tâche.