Wie man den docker stack ps-Befehl verwendet, um Stack-Tasks aufzulisten

DockerBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie, wie Sie den Befehl docker stack ps effektiv nutzen können, um Aufgaben innerhalb eines Docker-Stacks aufzulisten und zu verwalten. Sie beginnen damit, einen Beispiel-Stack mit Docker Compose bereitzustellen, einem leistungsstarken Tool zur Definition und Ausführung von Anwendungen mit mehreren Containern.

Nach der Bereitstellung des Stacks werden Sie die verschiedenen Funktionen von docker stack ps erkunden. Dazu gehört das Auflisten aller Aufgaben im Stack, das Filtern von Aufgaben anhand ihrer Namen, das Formatieren der Ausgabe zur Anzeige bestimmter interessierender Felder und schließlich das Anzeigen nur der Aufgaben-IDs für eine kompakte Ansicht. Diese praktische Erfahrung wird Sie mit den Fähigkeiten ausstatten, den Zustand der Aufgaben in Ihrem Docker-Stack zu überwachen und zu verstehen.

Einen Beispiel-Stack bereitstellen

In diesem Schritt lernen Sie, wie Sie einen Beispiel-Stack mit Docker Compose bereitstellen können. Docker Compose ist ein Tool zur Definition und Ausführung von Docker-Anwendungen mit mehreren Containern. Mit Compose verwenden Sie eine YAML-Datei, um die Dienste Ihrer Anwendung zu konfigurieren. Anschließend können Sie mit einem einzigen Befehl alle Dienste aus Ihrer Konfiguration erstellen und starten.

Da Docker Compose in der LabEx-Umgebung nicht vorinstalliert ist, müssen Sie es zuerst installieren. Wir werden Docker Compose Version 1.29.2 installieren, die mit der installierten Docker-Version kompatibel ist.

Zuerst laden Sie die Docker Compose-Binary herunter:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Dieser Befehl lädt die Docker Compose-Binary aus dem offiziellen GitHub-Repository herunter und speichert sie unter /usr/local/bin/docker-compose. Die Teile $(uname -s) und $(uname -m) erkennen automatisch Ihr Betriebssystem und Ihre Architektur.

Als Nächstes geben Sie der Binary ausführbare Berechtigungen:

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

Dieser Befehl macht die heruntergeladene Datei ausführbar.

Jetzt überprüfen Sie die Installation, indem Sie die Docker Compose-Version prüfen:

docker-compose --version

Sie sollten eine Ausgabe ähnlich wie docker-compose version 1.29.2, build 5becea4c sehen.

Nachdem Docker Compose installiert ist, erstellen wir eine einfache Docker Compose-Datei, um unseren Stack zu definieren. Wir werden eine Datei namens docker-compose.yml im Verzeichnis ~/project erstellen.

Verwenden Sie den nano-Editor, um die Datei zu erstellen und zu bearbeiten:

nano ~/project/docker-compose.yml

Fügen Sie den folgenden Inhalt in die docker-compose.yml-Datei ein:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  app:
    image: alpine:latest
    command: echo "Hello from Alpine"

Diese docker-compose.yml-Datei definiert zwei Dienste:

  • web: Verwendet das nginx:latest-Image und bildet Port 80 auf dem Host auf Port 80 im Container ab.
  • app: Verwendet das alpine:latest-Image und führt einen einfachen echo-Befehl aus.

Speichern Sie die Datei, indem Sie Strg + S drücken, und verlassen Sie den Editor, indem Sie Strg + X drücken.

Bevor Sie den Stack bereitstellen, holen wir die erforderlichen Images. Obwohl Docker Compose die Images während der Bereitstellung automatisch herunterladen kann, kann es manchmal hilfreich sein, sie vorher explizit zu holen.

Holen Sie das nginx:latest-Image:

docker pull nginx:latest

Holen Sie das alpine:latest-Image:

docker pull alpine:latest

Jetzt stellen Sie den Stack mit dem Befehl docker-compose up bereit. Die Option -d führt die Container im detached-Modus (im Hintergrund) aus.

Navigieren Sie in das Verzeichnis ~/project, in dem Sie die docker-compose.yml-Datei erstellt haben:

cd ~/project

Führen Sie dann den Befehl aus:

docker-compose up -d

Dieser Befehl liest die docker-compose.yml-Datei und erstellt und startet die definierten Dienste. Sie sollten eine Ausgabe sehen, die die Erstellung und den Start der Dienste web und app anzeigt.

Um zu überprüfen, ob die Dienste ausgeführt werden, können Sie die laufenden Container auflisten:

docker ps

Sie sollten zwei laufende Container sehen, einen für den web-Dienst (basierend auf nginx) und einen für den app-Dienst (basierend auf alpine).

Alle Aufgaben im Stack auflisten

In diesem Schritt lernen Sie, wie Sie alle Aufgaben (Container) auflisten können, die mit dem Stack verbunden sind, den Sie im vorherigen Schritt bereitgestellt haben. In Docker Swarm oder Kubernetes wird der Begriff "Aufgabe" (engl. "task") oft verwendet, um auf eine laufende Instanz eines Dienstes zu verweisen. Obwohl wir hier Docker Compose verwenden, das technisch gesehen nicht auf die gleiche Weise wie Swarm das Konzept der "Aufgabe" nutzt, können wir dennoch die Container auflisten, die unseren bereitgestellten Stack bilden.

Der Befehl docker-compose ps wird verwendet, um die von Docker Compose verwalteten Container für das aktuelle Projekt (das Verzeichnis, das die docker-compose.yml-Datei enthält) aufzulisten.

Stellen Sie sicher, dass Sie sich noch im Verzeichnis ~/project befinden, in dem sich Ihre docker-compose.yml-Datei befindet:

cd ~/project

Jetzt führen Sie den Befehl docker-compose ps aus:

docker-compose ps

Dieser Befehl zeigt eine Liste der in Ihrer docker-compose.yml-Datei definierten Container zusammen mit ihrem aktuellen Zustand, Befehl und Ports an.

Sie sollten eine Ausgabe ähnlich wie diese sehen (Containernamen und -IDs können variieren):

      Name                     Command               State          Ports
--------------------------------------------------------------------------------
project_app_1       /bin/sh -c echo "Hello fr ...   Exit 0
project_web_1       /docker-entrypoint.sh ngin ...   Up      0.0.0.0:80->80/tcp

Diese Ausgabe zeigt die beiden in Ihrer docker-compose.yml definierten Dienste: app und web. Die Spalte State gibt an, ob der Container läuft (Up) oder beendet wurde (Exit 0). Die Spalte Ports zeigt die Portzuordnung für den web-Dienst an.

Der app-Container ist beendet, weil sein Befehl echo "Hello from Alpine" die Ausführung beendet hat. Der web-Container läuft noch, weil der Nginx-Server so konzipiert ist, dass er kontinuierlich läuft.

Dieser Befehl ist nützlich, um schnell zu sehen, welche Dienste in Ihrem Stack laufen und welchen grundlegenden Status sie haben.

Aufgaben nach Namen filtern

In diesem Schritt lernen Sie, wie Sie die Liste der von Docker Compose verwalteten Container anhand ihres Dienstnamens filtern können. Dies ist nützlich, wenn Sie einen großen Stack mit vielen Diensten haben und nur den Status eines bestimmten Dienstes sehen möchten.

Der Befehl docker-compose ps ermöglicht es Ihnen, den Dienstnamen als Argument anzugeben, um die Ausgabe zu filtern.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project befinden:

cd ~/project

Um nur den Container für den web-Dienst aufzulisten, führen Sie den folgenden Befehl aus:

docker-compose ps web

Dieser Befehl zeigt nur die Informationen für den Container an, der mit dem in Ihrer docker-compose.yml definierten web-Dienst verknüpft ist.

Sie sollten eine Ausgabe ähnlich wie diese sehen:

      Name                     Command               State          Ports
--------------------------------------------------------------------------------
project_web_1       /docker-entrypoint.sh ngin ...   Up      0.0.0.0:80->80/tcp

In ähnlicher Weise können Sie nur den Container für den app-Dienst aufzulisten, indem Sie folgenden Befehl ausführen:

docker-compose ps app

Dies zeigt die Informationen für den app-Container an:

      Name                     Command               State          Ports
--------------------------------------------------------------------------------
project_app_1       /bin/sh -c echo "Hello fr ...   Exit 0

Das Filtern nach Dienstnamen ist eine einfache, aber effektive Methode, um einzelne Komponenten in Ihrem Docker Compose-Stack zu verwalten und zu überwachen.

Das Ausgabeformat anpassen, um bestimmte Felder anzuzeigen

In diesem Schritt lernen Sie, wie Sie die Ausgabe des docker-compose ps-Befehls formatieren können, um nur bestimmte Felder anzuzeigen. Dies ist nützlich, wenn Sie bestimmte Informationen über Ihre Dienste extrahieren müssen, wie beispielsweise ihre Namen oder ihren Status, für Skripte oder weitere Verarbeitung.

Der docker-compose ps-Befehl unterstützt die Option --format, mit der Sie das Ausgabeformat mithilfe von Go-Templates angeben können.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project befinden:

cd ~/project

Um nur den Dienstnamen und den Containerzustand anzuzeigen, können Sie folgenden Befehl verwenden:

docker-compose ps --format "table {{.Service}}\t{{.State}}"

Lassen Sie uns die --format-Option genauer betrachten:

  • "table": Dies gibt an, dass die Ausgabe in Tabellenformat mit Kopfzeilen sein soll.
  • {{.Service}}: Dies ist ein Go-Template-Platzhalter, der den Dienstnamen darstellt.
  • \t: Dies ist ein Tabulatorzeichen, das hier verwendet wird, um die Spalten zu trennen.
  • {{.State}}: Dies ist ein Go-Template-Platzhalter, der den Containerzustand darstellt.

Die Ausgabe sieht wie folgt aus:

SERVICE         STATE
app             Exit 0
web             Up

Sie können auch andere Felder in der Formatzeichenkette aufnehmen. Beispielsweise können Sie den Dienstnamen, das Image und den Zustand anzeigen:

docker-compose ps --format "table {{.Service}}\t{{.Image}}\t{{.State}}"

Die Ausgabe lautet dann:

SERVICE         IMAGE           STATE
app             alpine:latest   Exit 0
web             nginx:latest    Up

Die Verwendung der --format-Option bietet Flexibilität bei der Anzeige und Verarbeitung der Informationen über Ihre Docker Compose-Dienste.

Nur Task-IDs anzeigen

In diesem Schritt lernen Sie, wie Sie nur die Container-IDs für die Dienste in Ihrem Docker Compose-Stack anzeigen können. Dies ist besonders nützlich, wenn Sie Container-IDs an andere Befehle übergeben müssen, um Automatisierung oder Skripting durchzuführen.

Wir werden erneut die --format-Option mit dem docker-compose ps-Befehl verwenden, aber diesmal geben wir nur das Feld für die Container-ID an.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project befinden:

cd ~/project

Um nur die Container-IDs anzuzeigen, verwenden Sie folgenden Befehl:

docker-compose ps -q

Die -q-Option ist eine Abkürzung für --quiet, die nur die Container-IDs ausgibt.

Alternativ können Sie dasselbe Ergebnis mit der --format-Option erzielen:

docker-compose ps --format "{{.ID}}"

Dieser Befehl verwendet das Go-Template {{.ID}}, um nur die Container-ID für jeden Dienst zu extrahieren.

Die Ausgabe beider Befehle ist eine Liste von Container-IDs, eine pro Zeile:

<container_id_for_app>
<container_id_for_web>

(Die tatsächlichen IDs werden in Ihrer Umgebung unterschiedlich sein).

Das Anzeigen nur der IDs ist eine häufige Anforderung, wenn Sie programmgesteuert mit Ihren Containern interagieren müssen, beispielsweise, um sie zu stoppen oder zu entfernen.

Abschließend bereinigen wir den bereitgestellten Stack, indem wir ihn herunterfahren. Dadurch werden die von docker-compose up erstellten Container und Netzwerke gestoppt und entfernt.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project befinden:

cd ~/project

Führen Sie folgenden Befehl aus:

docker-compose down

Dieser Befehl stoppt und entfernt die Container für die web- und app-Dienste. Sie sollten eine Ausgabe sehen, die anzeigt, dass die Container und das Netzwerk entfernt werden.

Nachdem Sie docker-compose down ausgeführt haben, können Sie überprüfen, ob die Container nicht mehr laufen, indem Sie docker ps verwenden:

docker ps

Dieser Befehl sollte jetzt keine laufenden Container anzeigen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie einen Beispiel-Stack mit Docker Compose bereitstellen können. Dies beinhaltete die Installation von Docker Compose, die Erstellung einer docker-compose.yml-Datei zur Definition von Diensten und anschließend die Bereitstellung des Stacks.

Nach der Bereitstellung werden Sie lernen, wie Sie den docker stack ps-Befehl verwenden, um alle Tasks innerhalb des bereitgestellten Stacks aufzulisten. Sie werden auch untersuchen, wie Sie diese Tasks nach Namen filtern, die Ausgabe formatieren, um bestimmte Felder anzuzeigen, und nur die Task-IDs anzeigen können. Dies zeigt die Flexibilität des docker stack ps-Befehls für die Überwachung und Verwaltung von Stack-Tasks.