Comment filtrer les conteneurs Docker par nom

DockerBeginner
Pratiquer maintenant

Introduction

Docker est devenu un outil essentiel pour les développeurs et les professionnels de l'informatique, offrant une plateforme puissante pour la conteneurisation des applications. Dans ce tutoriel, nous allons explorer comment filtrer les conteneurs Docker par nom, une compétence cruciale pour gérer efficacement votre environnement Docker. À la fin de ce guide, vous serez capable de localiser et de gérer efficacement des conteneurs spécifiques en fonction de leurs noms, ce qui vous permettra d'optimiser vos flux de travail Docker.

Visualisation des conteneurs Docker avec docker ps

Avant de pouvoir filtrer les conteneurs Docker, nous devons d'abord comprendre comment visualiser les conteneurs qui sont en cours d'exécution sur notre système. La commande la plus fondamentale à cet effet est docker ps.

Comprendre la commande docker ps

La commande docker ps liste tous les conteneurs Docker en cours d'exécution sur votre système. Lorsque vous exécutez cette commande, vous verrez des informations sur chaque conteneur, notamment :

  • ID du conteneur (Container ID) : Un identifiant unique pour le conteneur
  • Image : L'image Docker utilisée pour créer le conteneur
  • Commande (Command) : La commande qui s'exécute à l'intérieur du conteneur
  • Créé (Created) : Quand le conteneur a été créé
  • Statut (Status) : Le statut actuel du conteneur
  • Ports : Tous les mappages de ports
  • Noms (Names) : Le nom du conteneur

Exécutons la commande docker ps pour voir tous les conteneurs en cours d'exécution :

docker ps

Vous devriez voir une sortie similaire à celle-ci :

CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS     NAMES
54a76e95d987   alpine    "sleep 1000"             About a minute ago   Up About a minute             db-server
26f8c661f7a5   alpine    "sleep 1000"             About a minute ago   Up About a minute             utility-alpine
a3bb567cc561   redis     "docker-entrypoint.s…"   About a minute ago   Up About a minute   6379/tcp  cache-server
f1d07c98e753   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    web-frontend

Visualisation de tous les conteneurs

Par défaut, docker ps n'affiche que les conteneurs en cours d'exécution. Pour voir tous les conteneurs, y compris ceux qui ont été arrêtés, utilisez l'option -a :

docker ps -a

Cette commande affichera tous les conteneurs, quel que soit leur statut. Ceci est utile lorsque vous souhaitez voir les conteneurs qui ont quitté ou qui sont en pause.

Visualisation des ID de conteneur uniquement

Si vous n'avez besoin que des ID de conteneur, vous pouvez utiliser l'option -q :

docker ps -q

Ceci affiche uniquement les ID de conteneur, ce qui peut être utile lorsque vous devez les passer à d'autres commandes.

Essayez ces commandes dans votre terminal pour vous familiariser avec la fonctionnalité de base de la liste des conteneurs avant de passer au filtrage à l'étape suivante.

Filtrage de base des conteneurs par nom

Maintenant que nous comprenons comment lister les conteneurs Docker, apprenons à les filtrer par nom. Lorsque vous avez plusieurs conteneurs en cours d'exécution, en trouver un spécifique peut être difficile. Docker fournit des capacités de filtrage qui rendent cette tâche beaucoup plus facile.

Utilisation de l'option --filter

La commande docker ps prend en charge le filtrage via l'option --filter ou -f. La syntaxe de base pour filtrer par nom est :

docker ps --filter name=<container-name>

Essayons de filtrer les conteneurs qui ont "web" dans leur nom :

docker ps --filter name=web

Vous devriez voir une sortie similaire à celle-ci :

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
f1d07c98e753   nginx     "/docker-entrypoint.…"   10 minutes ago   Up 10 minutes   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   10 minutes ago   Up 10 minutes   80/tcp    web-frontend

Notez que les conteneurs web-frontend et web-backend sont affichés car ils contiennent tous les deux le mot "web" dans leur nom.

Filtrage pour des noms exacts

Pour filtrer un conteneur avec un nom exact, vous pouvez utiliser le nom complet :

docker ps --filter name=web-frontend

Cette commande n'affichera que le conteneur nommé exactement "web-frontend" :

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
d6fe891c1f04   nginx     "/docker-entrypoint.…"   12 minutes ago   Up 12 minutes   80/tcp    web-frontend

Utilisation de plusieurs filtres

Vous pouvez appliquer plusieurs filtres en ajoutant plusieurs options --filter. Par exemple, pour trouver tous les conteneurs avec "web" dans leur nom ET construits à partir de l'image "nginx" :

docker ps --filter name=web --filter ancestor=nginx

Le résultat devrait être le même que notre premier filtre puisque les deux conteneurs "web" utilisent l'image nginx :

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
f1d07c98e753   nginx     "/docker-entrypoint.…"   15 minutes ago   Up 15 minutes   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   15 minutes ago   Up 15 minutes   80/tcp    web-frontend

Filtrage des conteneurs par début de nom

Si vous souhaitez filtrer les conteneurs dont les noms commencent par une chaîne spécifique, vous pouvez utiliser un motif comme celui-ci :

docker ps --filter name=^db

Cette commande affichera les conteneurs dont les noms commencent par "db" :

CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
54a76e95d987   alpine    "sleep 1000"  16 minutes ago   Up 16 minutes             db-server

Essayez ces commandes de filtrage dans votre terminal pour vous entraîner à trouver des conteneurs spécifiques par leurs noms.

Filtrage avancé et formatage de la sortie

Maintenant que nous maîtrisons le filtrage de base par nom, explorons des techniques plus avancées pour filtrer et formater la sortie de la commande docker ps. Ces compétences vous aideront à gérer votre environnement Docker plus efficacement.

Combinaison de plusieurs critères de filtrage

Docker vous permet de combiner plusieurs critères de filtrage pour affiner vos résultats. Par exemple, pour trouver tous les conteneurs avec "web" dans leur nom qui sont actuellement en cours d'exécution :

docker ps --filter name=web --filter status=running

Cela affichera tous les conteneurs en cours d'exécution qui ont "web" dans leur nom :

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
f1d07c98e753   nginx     "/docker-entrypoint.…"   25 minutes ago   Up 25 minutes   80/tcp    web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   25 minutes ago   Up 25 minutes   80/tcp    web-frontend

Utilisation de l'option --format pour une sortie personnalisée

La commande docker ps prend en charge le formatage de sortie personnalisé à l'aide de l'option --format avec les modèles Go. Cela vous permet d'afficher uniquement les informations dont vous avez besoin dans le format souhaité.

Par exemple, pour afficher uniquement les noms des conteneurs et leur statut :

docker ps --format "table {{.Names}}\t{{.Status}}"

Vous verrez une sortie simplifiée comme celle-ci :

NAMES               STATUS
db-server           Up 26 minutes
utility-alpine      Up 26 minutes
cache-server        Up 26 minutes
web-backend         Up 26 minutes
web-frontend        Up 26 minutes

Combinaison du filtrage et du formatage

Vous pouvez combiner le filtrage et le formatage pour obtenir exactement les informations dont vous avez besoin :

docker ps --filter name=web --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"

Cela affichera un tableau avec les noms, les images et le statut des conteneurs avec "web" dans leur nom :

NAMES               IMAGE               STATUS
web-backend         nginx               Up 27 minutes
web-frontend        nginx               Up 27 minutes

Utilisation du filtrage de type Regex

Le système de filtrage de Docker prend en charge certains modèles de type regex. Par exemple, pour trouver les conteneurs dont les noms contiennent soit "web" OU "cache" :

docker ps --filter name=web --filter name=cache

Cela affichera à la fois les conteneurs web et les conteneurs cache :

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
a3bb567cc561   redis     "docker-entrypoint.s…"   30 minutes ago   Up 30 minutes   6379/tcp   cache-server
f1d07c98e753   nginx     "/docker-entrypoint.…"   30 minutes ago   Up 30 minutes   80/tcp     web-backend
d6fe891c1f04   nginx     "/docker-entrypoint.…"   30 minutes ago   Up 30 minutes   80/tcp     web-frontend

Exemple pratique : Script de gestion des conteneurs

Créons un script simple qui démontre comment le filtrage peut être utilisé dans un scénario pratique. Créez un nouveau fichier appelé container-stats.sh avec le contenu suivant :

nano container-stats.sh

Ajoutez le script suivant :

#!/bin/bash
## This script displays container names, images and status for a filtered set of containers

echo "Web containers:"
docker ps --filter name=web --format "{{.Names}} - {{.Image}} - {{.Status}}"

echo -e "\nCache and database containers:"
docker ps --filter name=cache --filter name=db --format "{{.Names}} - {{.Image}} - {{.Status}}"

Enregistrez le fichier (Ctrl+O, Entrée, puis Ctrl+X) et rendez-le exécutable :

chmod +x container-stats.sh

Maintenant, exécutez le script pour voir les informations sur les conteneurs filtrées et formatées :

./container-stats.sh

Vous devriez voir une sortie similaire à :

Web containers:
web-backend - nginx - Up 35 minutes
web-frontend - nginx - Up 35 minutes

Cache and database containers:
cache-server - redis - Up 35 minutes
db-server - alpine - Up 35 minutes

Ce script démontre comment le filtrage des conteneurs peut être utilisé pour organiser et présenter les informations sur votre environnement Docker de manière plus lisible et utile.

Applications pratiques du filtrage de conteneurs

Dans cette étape, nous allons explorer les applications pratiques du filtrage de conteneurs pour effectuer des tâches courantes de gestion Docker. Ces exemples démontrent comment le filtrage peut être utilisé dans des scénarios réels pour rendre la gestion des conteneurs plus efficace.

Recherche et redémarrage de conteneurs spécifiques

Disons que vous devez redémarrer tous les conteneurs liés au web. Vous pouvez utiliser le filtrage par nom pour les identifier, puis les redémarrer :

## Tout d'abord, identifiez les conteneurs web
docker ps --filter name=web

## Maintenant, redémarrez-les un par un
docker restart web-frontend
docker restart web-backend

Après avoir exécuté ces commandes, vous devriez voir la confirmation que chaque conteneur a été redémarré :

web-frontend
web-backend

Recherche et suppression de tous les conteneurs avec un motif de nom spécifique

Si vous devez supprimer tous les conteneurs avec un certain motif de nom, vous pouvez combiner le filtrage avec la suppression de conteneurs :

## AVERTISSEMENT : Ceci est uniquement à des fins de démonstration. Dans un environnement réel,
## assurez-vous de savoir ce que vous supprimez !

## Lister les conteneurs avec "utility" dans leurs noms
docker ps -a --filter name=utility

Vous devriez voir votre conteneur utilitaire :

CONTAINER ID   IMAGE     COMMAND         CREATED          STATUS          PORTS     NAMES
26f8c661f7a5   alpine    "sleep 1000"    45 minutes ago   Up 45 minutes             utility-alpine

Pour le supprimer, vous utiliseriez généralement :

## Nous n'exécuterons pas réellement cette commande pour préserver notre environnement de laboratoire
## docker rm -f $(docker ps -aq --filter name=utility)

Au lieu de cela, voyons comment cette commande fonctionne :

## Obtenez simplement les ID qui seraient affectés
docker ps -aq --filter name=utility

Cela affichera l'ID du conteneur :

26f8c661f7a5

Utilisation du filtrage pour surveiller des groupes de conteneurs spécifiques

Le filtrage de conteneurs est utile pour une surveillance ciblée. Créons un script de surveillance simple qui vérifie l'état de nos conteneurs web :

nano web-monitor.sh

Ajoutez le script suivant :

#!/bin/bash
## Ce script vérifie l'état des conteneurs web et signale si certains ne sont pas en cours d'exécution

echo "=== Vérification de l'état des conteneurs web ==="
docker ps -a --filter name=web --format "{{.Names}}: {{.Status}}"

## Compter les conteneurs web arrêtés
STOPPED=$(docker ps -a --filter name=web --filter status=exited --format "{{.Names}}" | wc -l)

if [ $STOPPED -gt 0 ]; then
  echo -e "\nAVERTISSEMENT : $STOPPED conteneurs web ne sont pas en cours d'exécution !"
else
  echo -e "\nTous les conteneurs web sont en cours d'exécution normalement."
fi

Enregistrez le fichier (Ctrl+O, Entrée, puis Ctrl+X) et rendez-le exécutable :

chmod +x web-monitor.sh

Maintenant, exécutez le script pour voir l'état de vos conteneurs web :

./web-monitor.sh

Vous devriez voir une sortie similaire à :

=== Vérification de l'état des conteneurs web ===
web-backend: Up 50 minutes
web-frontend: Up 50 minutes

Tous les conteneurs web sont en cours d'exécution normalement.

Filtrage dans les pipelines CI/CD

Dans les pipelines CI/CD, le filtrage des conteneurs peut être essentiel pour les tests et le déploiement automatisés. Créons un script qui simule un processus de déploiement qui cible uniquement les conteneurs avec un motif de nom spécifique :

nano deploy-update.sh

Ajoutez le script suivant :

#!/bin/bash
## Ce script simule la mise à jour de tous les conteneurs d'un type spécifique

TARGET_CONTAINERS=$1

if [ -z "$TARGET_CONTAINERS" ]; then
  echo "Utilisation : $0 <motif-nom-conteneur>"
  exit 1
fi

echo "Préparation de la mise à jour des conteneurs correspondant au motif : $TARGET_CONTAINERS"
echo "Conteneurs affectés :"
docker ps --filter name=$TARGET_CONTAINERS --format "{{.Names}}"

echo -e "\nDans un déploiement réel, cela ferait :"
echo "1. Extraire les dernières images"
echo "2. Arrêter chaque conteneur"
echo "3. Démarrer de nouveaux conteneurs avec les images mises à jour"
echo "4. Vérifier que les conteneurs fonctionnent correctement"

echo -e "\nSimulation terminée avec succès !"

Enregistrez le fichier (Ctrl+O, Entrée, puis Ctrl+X) et rendez-le exécutable :

chmod +x deploy-update.sh

Maintenant, simulons la mise à jour de nos conteneurs web :

./deploy-update.sh web

Vous devriez voir une sortie similaire à :

Préparation de la mise à jour des conteneurs correspondant au motif : web
Conteneurs affectés :
web-backend
web-frontend

Dans un déploiement réel, cela ferait :
1. Extraire les dernières images
2. Arrêter chaque conteneur
3. Démarrer de nouveaux conteneurs avec les images mises à jour
4. Vérifier que les conteneurs fonctionnent correctement

Simulation terminée avec succès !

Ces exemples pratiques démontrent comment le filtrage de conteneurs peut être intégré à votre flux de travail Docker pour rendre la gestion des conteneurs plus efficace et automatisée.

Résumé

Dans ce laboratoire, vous avez appris à filtrer efficacement les conteneurs Docker par nom, une compétence essentielle pour gérer les environnements Docker de toute taille. Passons en revue ce que nous avons couvert :

  1. Liste de conteneurs de base : Vous avez appris à utiliser la commande docker ps pour afficher les conteneurs en cours d'exécution et ses différentes options comme -a pour afficher tous les conteneurs.

  2. Filtrage de base par nom : Vous avez découvert comment utiliser l'option --filter name= pour trouver des conteneurs par nom, à la fois les correspondances exactes et les correspondances partielles.

  3. Filtrage et formatage avancés : Vous avez exploré comment combiner plusieurs filtres et personnaliser la sortie à l'aide de l'option --format pour afficher uniquement les informations dont vous avez besoin.

  4. Applications pratiques : Vous avez créé des scripts qui démontrent des utilisations concrètes du filtrage de conteneurs pour les tâches de surveillance, de gestion et de déploiement.

Ces compétences vous aideront à gérer les environnements Docker plus efficacement, en particulier à mesure que le nombre de conteneurs augmente. Le filtrage de conteneurs est particulièrement précieux dans les environnements de développement, de test et de production où vous devez identifier et gérer rapidement des conteneurs spécifiques.

Au fur et à mesure que vous poursuivez votre parcours Docker, envisagez d'explorer d'autres options de filtrage au-delà du filtrage par nom, telles que le filtrage par volume, réseau ou étiquette (label). Ces techniques de filtrage supplémentaires peuvent encore améliorer vos capacités de gestion des conteneurs.