Comment utiliser la commande docker compose ps pour lister les conteneurs

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 efficacement la commande docker compose ps pour lister les conteneurs gérés par Docker Compose. Vous commencerez par installer Docker Compose et configurer un projet simple avec un fichier docker-compose.yml.

Après la configuration, vous explorerez comment lister uniquement les conteneurs en cours d'exécution, inclure les conteneurs arrêtés dans le résultat, filtrer les conteneurs en fonction de leur statut, et formater le résultat en JSON pour faciliter l'analyse et l'intégration. Cette expérience pratique vous dotera des compétences nécessaires pour surveiller et gérer efficacement vos services Docker Compose.


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/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ps -.-> lab-555086{{"Comment utiliser la commande docker compose ps pour lister les conteneurs"}} docker/pull -.-> lab-555086{{"Comment utiliser la commande docker compose ps pour lister les conteneurs"}} end

Lister les conteneurs en cours d'exécution avec docker compose ps

Dans cette étape, vous apprendrez à lister les conteneurs en cours d'exécution en utilisant docker compose ps. Avant de pouvoir utiliser docker compose, nous devons l'installer.

Tout d'abord, installons Docker Compose. Nous allons 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 l'architecture de votre système et l'enregistre dans /usr/local/bin/docker-compose.

Ensuite, nous devons appliquer les permissions d'exécution au binaire.

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

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

docker-compose --version

Vous devriez voir la version installée de Docker Compose dans le résultat.

Pour démontrer docker compose ps, nous avons besoin d'un fichier docker-compose.yml et de quelques services à exécuter. Créons un simple fichier docker-compose.yml dans votre 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 infinity

Ce fichier docker-compose.yml définit deux services : web utilisant l'image nginx et app utilisant l'image alpine. Le service web mappe le port 80 de l'hôte vers le port 80 du conteneur. Le service app exécute la commande sleep infinity pour maintenir le conteneur en cours d'exécution.

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

Maintenant, téléchargeons les images nécessaires.

docker pull nginx:latest
docker pull alpine:latest

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

Ensuite, démarrez les services définis dans le fichier docker-compose.yml. Assurez-vous d'être dans le répertoire ~/project.

cd ~/project
docker-compose up -d

La commande docker-compose up -d construit, crée, démarre et attache les conteneurs pour un service. Le flag -d exécute les conteneurs en mode détaché, ce qui signifie qu'ils fonctionnent en arrière-plan.

Maintenant que les conteneurs sont en cours d'exécution, nous pouvons utiliser docker compose ps pour les lister.

docker-compose ps

Cette commande liste les conteneurs en cours d'exécution définis dans votre fichier docker-compose.yml. Vous devriez voir un résultat similaire à ceci, montrant les noms des conteneurs, les commandes, les statuts et les ports.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-app-1       "sleep infinity"    app                 running
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

Le résultat montre que les conteneurs project-app-1 et project-web-1 sont en cours d'exécution. Le NAME est généralement le nom du projet (le nom du répertoire) suivi du nom du service et d'un numéro.

Lister tous les conteneurs y compris ceux arrêtés

Dans l'étape précédente, nous avons utilisé docker compose ps pour lister uniquement les conteneurs en cours d'exécution. Parfois, vous pourriez avoir besoin de voir tous les conteneurs, y compris ceux qui se sont arrêtés ou ont quitté.

Pour lister tous les conteneurs, y compris ceux arrêtés, vous pouvez utiliser le flag -a avec la commande docker compose ps.

D'abord, arrêtons l'un des conteneurs en cours d'exécution pour voir l'effet du flag -a. Nous allons arrêter le service app. Assurez-vous d'être dans le répertoire ~/project.

cd ~/project
docker-compose stop app

Cette commande arrête le conteneur du service app. Le conteneur ne sera plus en cours d'exécution, mais il existera toujours.

Maintenant, listons à nouveau les conteneurs en utilisant docker compose ps.

docker-compose ps

Vous devriez voir que seul le conteneur web est listé comme étant en cours d'exécution. Le conteneur app n'apparaît pas car il est arrêté.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

Utilisons maintenant le flag -a pour lister tous les conteneurs, y compris celui qui est arrêté.

docker-compose ps -a

Cette commande affichera tous les conteneurs définis dans votre fichier docker-compose.yml, quel que soit leur statut.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-app-1       "sleep infinity"    app                 exited (0)
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

Vous pouvez voir que les conteneurs project-app-1 et project-web-1 sont tous deux listés. La colonne STATUS pour project-app-1 indique exited, ce qui signifie qu'il est arrêté.

L'utilisation de docker compose ps -a est utile pour voir l'état de tous vos services, même s'ils ne sont pas actuellement actifs.

Filtrer les conteneurs par statut

Dans les étapes précédentes, nous avons appris à lister les conteneurs en cours d'exécution et tous les conteneurs. Parfois, vous pourriez vouloir filtrer la liste des conteneurs en fonction de leur statut.

La commande docker compose ps permet de filtrer le résultat en utilisant le flag --filter. Vous pouvez filtrer selon différents critères, y compris le statut du conteneur.

Les statuts courants des conteneurs sont :

  • created : Le conteneur a été créé mais n'a pas démarré.
  • restarting : Le conteneur est en cours de redémarrage.
  • running : Le conteneur est actuellement en cours d'exécution.
  • removing : Le conteneur est en cours de suppression.
  • paused : Le conteneur est en pause.
  • exited : Le conteneur s'est arrêté.
  • dead : Le conteneur est mort.

Filtrons les conteneurs pour n'afficher que ceux en cours d'exécution. Nous savons déjà que docker compose ps affiche par défaut les conteneurs en cours d'exécution, mais nous pouvons obtenir le même résultat en utilisant le filtre. Assurez-vous d'être dans le répertoire ~/project.

cd ~/project
docker-compose ps --filter status=running

Cette commande ne listera que les conteneurs ayant le statut running. Vous devriez voir uniquement le conteneur web listé.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

Maintenant, filtrons les conteneurs pour n'afficher que ceux qui sont arrêtés. Rappelez-vous que nous avons arrêté le conteneur app à l'étape précédente, donc son statut devrait être exited.

docker-compose ps --filter status=exited

Cette commande ne listera que les conteneurs ayant le statut exited. Vous devriez voir uniquement le conteneur app listé.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-app-1       "sleep infinity"    app                 exited (0)

Vous pouvez également filtrer par plusieurs statuts en utilisant plusieurs fois le flag --filter. Par exemple, pour lister les conteneurs qui sont soit en cours d'exécution soit arrêtés :

docker-compose ps --filter status=running --filter status=exited

Cette commande listera à la fois les conteneurs web et app.

NAME                COMMAND             SERVICE             STATUS              PORTS
project-app-1       "sleep infinity"    app                 exited (0)
project-web-1       "/docker-entrypoint.sh nginx -g 'daemon off;'"   web                 running             0.0.0.0:80->80/tcp

Le filtrage par statut est un moyen puissant de trouver rapidement des conteneurs dans un état spécifique, ce qui est très utile pour déboguer et gérer vos services.

Formater la sortie en JSON

Dans les étapes précédentes, nous avons listé et filtré les conteneurs en utilisant docker compose ps. Par défaut, la sortie est formatée sous forme de tableau lisible par un humain. Cependant, pour des scripts ou une intégration avec d'autres outils, vous pourriez avoir besoin de la sortie dans un format structuré comme JSON.

La commande docker compose ps permet de formater la sortie en utilisant le flag --format. Vous pouvez spécifier différents formats, dont json.

Listons tous les conteneurs (en cours d'exécution et arrêtés) et formatons la sortie en JSON. Assurez-vous d'être dans le répertoire ~/project.

cd ~/project
docker-compose ps -a --format json

Cette commande affichera les informations sur tous les conteneurs au format JSON. La sortie sera un tableau JSON, où chaque élément représente un conteneur et ses détails.

[
  {
    "ID": "...",
    "Name": "project-app-1",
    "Image": "alpine:latest",
    "Command": "sleep infinity",
    "Project": "project",
    "Service": "app",
    "Created": "...",
    "State": "exited",
    "Status": "Exited (0) ...",
    "Health": "",
    "ExitCode": 0,
    "Publishers": []
  },
  {
    "ID": "...",
    "Name": "project-web-1",
    "Image": "nginx:latest",
    "Command": "/docker-entrypoint.sh nginx -g 'daemon off;'",
    "Project": "project",
    "Service": "web",
    "Created": "...",
    "State": "running",
    "Status": "Up ...",
    "Health": "",
    "ExitCode": null,
    "Publishers": [
      {
        "URL": "0.0.0.0",
        "TargetPort": 80,
        "PublishedPort": 80,
        "Protocol": "tcp"
      }
    ]
  }
]

La sortie JSON fournit une représentation structurée des informations des conteneurs, facilitant leur analyse et leur traitement programmatique. Chaque conteneur est représenté comme un objet JSON avec des champs tels que ID, Name, Image, State, Status, etc.

L'utilisation du flag --format json est particulièrement utile lorsque vous avez besoin d'extraire des informations spécifiques sur vos conteneurs à des fins d'automatisation ou de reporting.

Enfin, nettoyons les conteneurs créés pendant ce lab.

docker-compose down

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

Résumé

Dans ce lab, vous avez appris à utiliser la commande docker compose ps pour lister les conteneurs gérés par Docker Compose. Vous avez commencé par installer Docker Compose et vérifier son installation. Ensuite, vous avez créé un simple fichier docker-compose.yml définissant deux services et téléchargé les images nécessaires. Vous avez utilisé docker-compose up -d pour démarrer les services en mode détaché.

Vous avez ensuite exploré la commande docker compose ps pour lister les conteneurs en cours d'exécution. Vous avez appris à inclure les conteneurs arrêtés dans la sortie en utilisant le flag -a, à filtrer les conteneurs par statut avec l'option --filter status=<status>, et à formater la sortie en JSON avec l'option --format json. Enfin, vous avez nettoyé les ressources créées en arrêtant et supprimant les services avec docker-compose down.