Docker Container nach Namen filtern – Anleitung & Tipps

DockerBeginner
Jetzt üben

Einführung

Docker hat sich zu einem unverzichtbaren Werkzeug für Entwickler und IT-Experten entwickelt und bietet eine leistungsstarke Plattform zur Containerisierung von Anwendungen. In diesem Tutorial werden wir untersuchen, wie man Docker-Container nach Namen filtert, eine entscheidende Fähigkeit für die effektive Verwaltung Ihrer Docker-Umgebung. Am Ende dieser Anleitung werden Sie in der Lage sein, bestimmte Container effizient anhand ihrer Namen zu lokalisieren und zu verwalten, wodurch Sie Ihre Docker-Workflows optimieren können.

Docker-Container mit docker ps anzeigen

Bevor wir Docker-Container filtern können, müssen wir zunächst verstehen, wie man die Container anzeigt, die auf unserem System laufen. Der grundlegendste Befehl für diesen Zweck ist docker ps.

Den Befehl docker ps verstehen

Der Befehl docker ps listet alle laufenden Docker-Container auf Ihrem System auf. Wenn Sie diesen Befehl ausführen, werden Sie Informationen über jeden Container sehen, einschließlich:

  • Container-ID: Eine eindeutige Kennung für den Container
  • Image: Das Docker-Image, das zur Erstellung des Containers verwendet wurde
  • Command: Der Befehl, der innerhalb des Containers ausgeführt wird
  • Created: Wann der Container erstellt wurde
  • Status: Der aktuelle Status des Containers
  • Ports: Alle Port-Mappings
  • Names: Der Name des Containers

Lassen Sie uns den Befehl docker ps ausführen, um alle laufenden Container anzuzeigen:

docker ps

Sie sollten eine Ausgabe ähnlich dieser sehen:

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

Alle Container anzeigen

Standardmäßig zeigt docker ps nur laufende Container an. Um alle Container anzuzeigen, einschließlich derer, die gestoppt wurden, verwenden Sie das Flag -a:

docker ps -a

Dieser Befehl zeigt alle Container an, unabhängig von ihrem Status. Dies ist nützlich, wenn Sie Container sehen möchten, die beendet oder pausiert wurden.

Nur Container-IDs anzeigen

Wenn Sie nur die Container-IDs benötigen, können Sie das Flag -q verwenden:

docker ps -q

Dies gibt nur die Container-IDs aus, was nützlich sein kann, wenn Sie sie an andere Befehle übergeben müssen.

Probieren Sie diese Befehle in Ihrem Terminal aus, um sich mit der grundlegenden Container-Auflistungsfunktionalität vertraut zu machen, bevor wir im nächsten Schritt mit dem Filtern fortfahren.

Grundlegendes Filtern von Containern nach Namen

Nachdem wir nun verstanden haben, wie man Docker-Container auflistet, wollen wir lernen, wie man sie nach Namen filtert. Wenn Sie mehrere Container ausführen, kann es eine Herausforderung sein, einen bestimmten zu finden. Docker bietet Filterfunktionen, die diese Aufgabe erheblich erleichtern.

Verwendung der Option --filter

Der Befehl docker ps unterstützt das Filtern über die Option --filter oder -f. Die grundlegende Syntax für das Filtern nach Namen lautet:

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

Versuchen wir, nach Containern zu filtern, die "web" in ihrem Namen haben:

docker ps --filter name=web

Sie sollten eine Ausgabe ähnlich dieser sehen:

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

Beachten Sie, dass sowohl die Container web-frontend als auch web-backend angezeigt werden, da beide das Wort "web" in ihren Namen enthalten.

Filtern nach exakten Namen

Um nach einem Container mit einem exakten Namen zu filtern, können Sie den vollständigen Namen verwenden:

docker ps --filter name=web-frontend

Dieser Befehl zeigt nur den Container mit dem genauen Namen "web-frontend" an:

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

Verwenden mehrerer Filter

Sie können mehrere Filter anwenden, indem Sie mehrere --filter-Optionen hinzufügen. Um beispielsweise alle Container mit "web" in ihrem Namen UND die vom "nginx"-Image erstellt wurden, zu finden:

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

Das Ergebnis sollte dasselbe sein wie bei unserem ersten Filter, da beide "web"-Container das nginx-Image verwenden:

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

Filtern von Containern nach Namensbeginn

Wenn Sie Container filtern möchten, deren Namen mit einer bestimmten Zeichenfolge beginnen, können Sie ein Muster wie folgt verwenden:

docker ps --filter name=^db

Dieser Befehl zeigt Container an, deren Namen mit "db" beginnen:

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

Probieren Sie diese Filterbefehle in Ihrem Terminal aus, um das Auffinden bestimmter Container anhand ihrer Namen zu üben.

Erweitertes Filtern und Formatieren der Ausgabe

Nachdem wir nun das grundlegende Filtern nach Namen gemeistert haben, wollen wir einige fortgeschrittenere Techniken zum Filtern und Formatieren der Ausgabe des Befehls docker ps erkunden. Diese Fähigkeiten helfen Ihnen, Ihre Docker-Umgebung effizienter zu verwalten.

Kombinieren mehrerer Filterkriterien

Docker ermöglicht es Ihnen, mehrere Filterkriterien zu kombinieren, um Ihre Ergebnisse einzugrenzen. Um beispielsweise alle Container mit "web" in ihrem Namen zu finden, die derzeit ausgeführt werden:

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

Dies zeigt alle laufenden Container an, die "web" in ihrem Namen haben:

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

Verwenden der Option --format für benutzerdefinierte Ausgabe

Der Befehl docker ps unterstützt die benutzerdefinierte Ausgabeformatierung mit der Option --format mit Go-Templates. Dies ermöglicht es Ihnen, nur die Informationen anzuzeigen, die Sie benötigen, und zwar in dem von Ihnen gewünschten Format.

Um beispielsweise nur die Containernamen und ihren Status anzuzeigen:

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

Sie sehen eine vereinfachte Ausgabe wie diese:

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

Filtern und Formatieren kombinieren

Sie können Filtern und Formatieren kombinieren, um genau die Informationen zu erhalten, die Sie benötigen:

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

Dies zeigt eine Tabelle mit Namen, Images und Status für Container mit "web" in ihrem Namen an:

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

Verwendung von Regex-ähnlichem Filtern

Das Filtersystem von Docker unterstützt einige Regex-ähnliche Muster. Um beispielsweise Container zu finden, deren Namen entweder "web" ODER "cache" enthalten:

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

Dies zeigt sowohl Web- als auch Cache-Container an:

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

Praktisches Beispiel: Container-Verwaltungsskript

Lassen Sie uns ein einfaches Skript erstellen, das zeigt, wie das Filtern in einem praktischen Szenario verwendet werden kann. Erstellen Sie eine neue Datei namens container-stats.sh mit folgendem Inhalt:

nano container-stats.sh

Fügen Sie das folgende Skript hinzu:

#!/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}}"

Speichern Sie die Datei (Strg+O, Eingabe, dann Strg+X) und machen Sie sie ausführbar:

chmod +x container-stats.sh

Führen Sie nun das Skript aus, um gefilterte und formatierte Containerinformationen anzuzeigen:

./container-stats.sh

Sie sollten eine Ausgabe ähnlich dieser sehen:

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

Dieses Skript zeigt, wie das Container-Filtern verwendet werden kann, um Informationen über Ihre Docker-Umgebung auf eine lesbarere und nützlichere Weise zu organisieren und darzustellen.

Praktische Anwendungen des Container-Filterns

In diesem Schritt werden wir praktische Anwendungen des Container-Filterns untersuchen, um gängige Docker-Verwaltungsaufgaben auszuführen. Diese Beispiele zeigen, wie das Filtern in realen Szenarien verwendet werden kann, um die Containerverwaltung effizienter zu gestalten.

Finden und Neustarten bestimmter Container

Angenommen, Sie müssen alle Web-bezogenen Container neu starten. Sie können das Filtern nach Namen verwenden, um sie zu identifizieren und sie dann neu zu starten:

## Zuerst die Web-Container identifizieren
docker ps --filter name=web

## Nun, sie einzeln neu starten
docker restart web-frontend
docker restart web-backend

Nachdem Sie diese Befehle ausgeführt haben, sollten Sie eine Bestätigung sehen, dass jeder Container neu gestartet wurde:

web-frontend
web-backend

Finden und Entfernen aller Container mit einem bestimmten Namensmuster

Wenn Sie alle Container mit einem bestimmten Namensmuster entfernen müssen, können Sie das Filtern mit der Containerentfernung kombinieren:

## WARNUNG: Dies dient nur zur Demonstration. In einer realen Umgebung,
## stellen Sie sicher, dass Sie wissen, was Sie entfernen!

## Container mit "utility" in ihren Namen auflisten
docker ps -a --filter name=utility

Sie sollten Ihren Utility-Container sehen:

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

Um ihn zu entfernen, würden Sie typischerweise Folgendes verwenden:

## Wir werden diesen Befehl nicht wirklich ausführen, um unsere Laborumgebung zu erhalten
## docker rm -f $(docker ps -aq --filter name=utility)

Stattdessen wollen wir sehen, wie dieser Befehl funktioniert:

## Nur die IDs abrufen, die betroffen wären
docker ps -aq --filter name=utility

Dies gibt die Container-ID aus:

26f8c661f7a5

Verwenden des Filterns zur Überwachung bestimmter Containergruppen

Das Container-Filtern ist nützlich für die gezielte Überwachung. Erstellen wir ein einfaches Überwachungsskript, das den Status unserer Web-Container überprüft:

nano web-monitor.sh

Fügen Sie das folgende Skript hinzu:

#!/bin/bash
## This script checks the status of web containers and reports if any are not running

echo "=== Web Container Status Check ==="
docker ps -a --filter name=web --format "{{.Names}}: {{.Status}}"

## Count stopped web containers
STOPPED=$(docker ps -a --filter name=web --filter status=exited --format "{{.Names}}" | wc -l)

if [ $STOPPED -gt 0 ]; then
  echo -e "\nWARNING: $STOPPED web containers are not running!"
else
  echo -e "\nAll web containers are running normally."
fi

Speichern Sie die Datei (Strg+O, Eingabe, dann Strg+X) und machen Sie sie ausführbar:

chmod +x web-monitor.sh

Führen Sie nun das Skript aus, um den Status Ihrer Web-Container anzuzeigen:

./web-monitor.sh

Sie sollten eine Ausgabe ähnlich dieser sehen:

=== Web Container Status Check ===
web-backend: Up 50 minutes
web-frontend: Up 50 minutes

All web containers are running normally.

Filtern in CI/CD-Pipelines

In CI/CD-Pipelines kann das Filtern von Containern für automatisiertes Testen und Bereitstellen unerlässlich sein. Erstellen wir ein Skript, das einen Bereitstellungsprozess simuliert, der nur auf Container mit einem bestimmten Namensmuster abzielt:

nano deploy-update.sh

Fügen Sie das folgende Skript hinzu:

#!/bin/bash
## This script simulates updating all containers of a specific type

TARGET_CONTAINERS=$1

if [ -z "$TARGET_CONTAINERS" ]; then
  echo "Usage: $0 <container-name-pattern>"
  exit 1
fi

echo "Preparing to update containers matching pattern: $TARGET_CONTAINERS"
echo "Containers affected:"
docker ps --filter name=$TARGET_CONTAINERS --format "{{.Names}}"

echo -e "\nIn a real deployment, this would:"
echo "1. Pull the latest images"
echo "2. Stop each container"
echo "3. Start new containers with the updated images"
echo "4. Verify the containers are running correctly"

echo -e "\nSimulation completed successfully!"

Speichern Sie die Datei (Strg+O, Eingabe, dann Strg+X) und machen Sie sie ausführbar:

chmod +x deploy-update.sh

Nun wollen wir die Aktualisierung unserer Web-Container simulieren:

./deploy-update.sh web

Sie sollten eine Ausgabe ähnlich dieser sehen:

Preparing to update containers matching pattern: web
Containers affected:
web-backend
web-frontend

In a real deployment, this would:
1. Pull the latest images
2. Stop each container
3. Start new containers with the updated images
4. Verify the containers are running correctly

Simulation completed successfully!

Diese praktischen Beispiele zeigen, wie das Container-Filtern in Ihren Docker-Workflow integriert werden kann, um die Containerverwaltung effizienter und automatisierter zu gestalten.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie Docker-Container effektiv nach Namen filtern können, eine wesentliche Fähigkeit für die Verwaltung von Docker-Umgebungen jeder Größe. Lassen Sie uns wiederholen, was wir behandelt haben:

  1. Grundlegende Container-Auflistung: Sie haben gelernt, wie Sie den Befehl docker ps verwenden, um laufende Container anzuzeigen, und seine verschiedenen Optionen wie -a zum Anzeigen aller Container.

  2. Grundlegendes Filtern nach Namen: Sie haben entdeckt, wie Sie die Option --filter name= verwenden, um Container nach Namen zu finden, sowohl exakte als auch teilweise Übereinstimmungen.

  3. Erweitertes Filtern und Formatieren: Sie haben untersucht, wie Sie mehrere Filter kombinieren und die Ausgabe mit der Option --format anpassen können, um nur die benötigten Informationen anzuzeigen.

  4. Praktische Anwendungen: Sie haben Skripte erstellt, die reale Anwendungen des Container-Filterns für Überwachungs-, Verwaltungs- und Bereitstellungsaufgaben demonstrieren.

Diese Fähigkeiten helfen Ihnen, Docker-Umgebungen effizienter zu verwalten, insbesondere wenn die Anzahl der Container wächst. Das Container-Filtern ist besonders wertvoll in Entwicklungs-, Test- und Produktionsumgebungen, in denen Sie bestimmte Container schnell identifizieren und verwalten müssen.

Wenn Sie Ihre Docker-Reise fortsetzen, sollten Sie in Erwägung ziehen, andere Filteroptionen über das Filtern nach Namen hinaus zu erkunden, z. B. das Filtern nach Volume, Netzwerk oder Label. Diese zusätzlichen Filtertechniken können Ihre Containerverwaltungsfähigkeiten weiter verbessern.