So verwenden Sie den docker stack services-Befehl, um Dienste aufzulisten

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie den Befehl docker stack services effektiv nutzen können, um Dienste innerhalb eines Docker-Stacks zu verwalten und zu untersuchen. Wir beginnen damit, einen einfachen Docker-Stack mit Docker Compose einzurichten. Dies umfasst die Installation von Docker Compose und die Bereitstellung einer einfachen Anwendung, die in einer docker-compose.yml-Datei definiert ist.

Sobald der Stack läuft, werden Sie die Kernfunktion von docker stack services erkunden, um alle Dienste in einem Stack aufzulisten. Basierend darauf lernen Sie, wie Sie Ihre Dienstlisten verbessern können, indem Sie basierend auf Dienstnamen und -IDs filtern. Schließlich entdecken Sie, wie Sie das Ausgabeformat der Dienstliste anpassen können, um die benötigten Informationen auf klare und organisierte Weise anzuzeigen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/ps -.-> lab-555238{{"So verwenden Sie den docker stack services-Befehl, um Dienste aufzulisten"}} docker/rm -.-> lab-555238{{"So verwenden Sie den docker stack services-Befehl, um Dienste aufzulisten"}} docker/network -.-> lab-555238{{"So verwenden Sie den docker stack services-Befehl, um Dienste aufzulisten"}} end

Auflisten aller Dienste in einem Stack

In diesem Schritt lernen Sie, wie Sie alle Dienste auflisten können, die innerhalb eines Docker-Stacks laufen. Bevor wir Dienste auflisten können, müssen wir einen laufenden Stack haben. Da Docker Compose nicht vorinstalliert ist, werden wir es zuerst installieren und dann einen einfachen Stack bereitstellen.

Zuerst installieren wir Docker Compose. Wir laden die Binärdatei herunter und machen sie ausführbar.

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
sudo chmod +x /usr/local/bin/docker-compose

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

nano ~/project/docker-compose.yml

Fügen Sie den folgenden Inhalt zur Datei hinzu:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  app:
    image: alpine:latest
    command: sleep 3600

Diese Datei definiert einen Stack mit zwei Diensten: web mit dem nginx-Image und app mit dem alpine-Image. Der web-Dienst bildet Port 80 auf dem Host auf Port 80 im Container ab. Der app-Dienst führt einfach den Befehl sleep 3600 aus, um den Container am Laufen zu halten.

Speichern Sie die Datei und verlassen Sie den Editor (Ctrl+X, Y, Enter in nano).

Jetzt stellen wir den Stack mit docker stack deploy bereit. Wir nennen unseren Stack mystack.

docker stack deploy -c ~/project/docker-compose.yml mystack

Dieser Befehl liest die docker-compose.yml-Datei und erstellt die darin definierten Dienste als Docker-Stack namens mystack. Sie sollten eine Ausgabe sehen, die anzeigt, dass die Dienste erstellt werden.

Sobald der Stack bereitgestellt ist, können Sie alle Dienste im Stack mit dem Befehl docker stack services gefolgt vom Stacknamen auflisten.

docker stack services mystack

Dieser Befehl zeigt eine Tabelle an, die Informationen über die Dienste im mystack-Stack enthält, einschließlich ihrer ID, ihres Namens, des Modus, der Replikate, des Images und der Ports.

Sie sollten eine Ausgabe ähnlich dieser sehen:

ID             NAME                 MODE         REPLICAS   IMAGE          PORTS
xxxxxxxxxxxx   mystack_app          replicated   1/1        alpine:latest
xxxxxxxxxxxx   mystack_web          replicated   1/1        nginx:latest   *:80->80/tcp

Die Ausgabe listet die Dienste mystack_app und mystack_web auf und bestätigt, dass sie als Teil des mystack-Stacks laufen.

Filtern von Diensten nach Name

In diesem Schritt lernen Sie, wie Sie die Liste der Dienste in einem Docker-Stack basierend auf ihrem Namen filtern können. Dies ist nützlich, wenn Sie viele Dienste in einem Stack haben und nur Informationen über bestimmte Dienste sehen möchten.

Der Befehl docker stack services unterstützt die Option --filter, mit der Sie Kriterien zum Filtern der Ausgabe angeben können. Um nach Dienstnamen zu filtern, können Sie den Filter name verwenden.

Die Syntax zum Filtern nach Name lautet --filter name=<service_name>. Denken Sie daran, dass die Dienstnamen in einem Stack normalerweise mit dem Stacknamen, gefolgt von einem Unterstrich und dem im docker-compose.yml-File definierten Dienstnamen, vorangestellt werden (z.B. mystack_web).

Filtern wir die Dienste in unserem mystack-Stack, um nur den web-Dienst anzuzeigen.

docker stack services mystack --filter name=mystack_web

Dieser Befehl zeigt nur die Zeile an, die dem mystack_web-Dienst entspricht.

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

ID             NAME                 MODE         REPLICAS   IMAGE          PORTS
xxxxxxxxxxxx   mystack_web          replicated   1/1        nginx:latest   *:80->80/tcp

Beachten Sie, dass nur die Informationen für den mystack_web-Dienst angezeigt werden.

Ebenso können Sie filtern, um nur den app-Dienst anzuzeigen:

docker stack services mystack --filter name=mystack_app

Dies zeigt die Informationen für den mystack_app-Dienst an:

ID             NAME                 MODE         REPLICAS   IMAGE
xxxxxxxxxxxx   mystack_app          replicated   1/1        alpine:latest

Die Verwendung des name-Filters ermöglicht es Ihnen, schnell Details für bestimmte Dienste innerhalb eines großen Stacks zu finden und anzuzeigen.

Filtern von Diensten nach ID

In diesem Schritt lernen Sie, wie Sie die Liste der Dienste in einem Docker-Stack basierend auf ihrer eindeutigen ID filtern können. Während das Filtern nach Namen oft intuitiver ist, ist das Filtern nach ID nützlich, wenn Sie absolut präzise sein müssen oder wenn Sie mit Diensten umgehen, die ähnliche Namen haben könnten.

Jeder Dienst in einem Docker-Stack erhält eine eindeutige ID. Sie können diese IDs in der ersten Spalte der Ausgabe von docker stack services sehen.

Um nach Dienst-ID zu filtern, verwenden Sie die Option --filter mit dem Filter id. Die Syntax lautet --filter id=<service_id>. Sie müssen nur ein ausreichendes Präfix der ID angeben, um den Dienst eindeutig zu identifizieren.

Zuerst listen wir alle Dienste erneut auf, um ihre IDs zu erhalten.

docker stack services mystack

Schauen Sie sich die Ausgabe an und identifizieren Sie die IDs für die Dienste mystack_web und mystack_app. Die IDs sind eine Zeichenfolge aus hexadezimalen Zeichen. Beispielsweise könnte die Ausgabe so aussehen (Ihre IDs werden unterschiedlich sein):

ID             NAME                 MODE         REPLICAS   IMAGE          PORTS
xxxxxxxxxxxx   mystack_app          replicated   1/1        alpine:latest
yyyyyyyyyyyy   mystack_web          replicated   1/1        nginx:latest   *:80->80/tcp

Angenommen, die ID für mystack_web beginnt mit yyyyyyyyyyyy. Sie können nach dieser ID (oder einem kürzeren eindeutigen Präfix) filtern, indem Sie Folgendes eingeben:

docker stack services mystack --filter id=yyyyyyyyyyyy

Ersetzen Sie yyyyyyyyyyyy durch den tatsächlichen Anfang der ID Ihres mystack_web-Dienstes.

Dieser Befehl zeigt nur die Zeile für den Dienst mit der übereinstimmenden ID an.

Sie sollten eine Ausgabe ähnlich der folgenden sehen, die nur den mystack_web-Dienst anzeigt:

ID             NAME                 MODE         REPLICAS   IMAGE          PORTS
yyyyyyyyyyyy   mystack_web          replicated   1/1        nginx:latest   *:80->80/tcp

Ebenso können Sie nach der ID des mystack_app-Dienstes filtern. Finden Sie seine ID in der Ausgabe von docker stack services mystack und verwenden Sie sie im Filter. Beispielsweise, wenn die ID mit xxxxxxxxxxxx beginnt:

docker stack services mystack --filter id=xxxxxxxxxxxx

Ersetzen Sie xxxxxxxxxxxx durch den tatsächlichen Anfang der ID Ihres mystack_app-Dienstes.

Dies zeigt die Informationen für den mystack_app-Dienst an:

ID             NAME                 MODE         REPLICAS   IMAGE
xxxxxxxxxxxx   mystack_app          replicated   1/1        alpine:latest

Das Filtern nach ID bietet eine präzise Möglichkeit, bestimmte Dienste anzusprechen, insbesondere in automatisierten Skripten oder wenn Sie mit Diensten umgehen, die ähnliche Namen haben könnten.

Formatieren der Ausgabe der Diensteliste

In diesem Schritt lernen Sie, wie Sie die Ausgabe des Befehls docker stack services formatieren können. Standardmäßig wird die Ausgabe in einer für Menschen lesbaren Tabellenform angezeigt. Sie können jedoch die Option --format verwenden, um die Ausgabe anzupassen. Dies ist besonders nützlich für Skripte oder wenn Sie bestimmte Informationen in einem anderen Format benötigen.

Die Option --format akzeptiert eine Go-Template-Zeichenkette. Dadurch können Sie genau festlegen, welche Felder angezeigt werden sollen und wie sie formatiert werden sollen. Häufige Felder, die Sie möglicherweise anzeigen möchten, sind .ID, .Name, .Image, .Mode, .Replicas und .Ports.

Versuchen wir, die Ausgabe so zu formatieren, dass nur die Dienst-ID, der Name und das Image angezeigt werden, getrennt durch Tabulatoren.

docker stack services mystack --format "{{.ID}}\t{{.Name}}\t{{.Image}}"

In diesem Befehl:

  • {{.ID}}, {{.Name}} und {{.Image}} sind Go-Template-Platzhalter, die durch die jeweiligen Werte für jeden Dienst ersetzt werden.
  • \t steht für ein Tabulatorzeichen, das hier als Trennzeichen verwendet wird.

Die Ausgabe ist jetzt eine Liste von Diensten, wobei jede Zeile die ID, den Namen und das Image enthält, getrennt durch Tabulatoren:

xxxxxxxxxxxx	mystack_app	alpine:latest
yyyyyyyyyyyy	mystack_web	nginx:latest

(Denken Sie daran, dass die IDs in Ihrer Umgebung unterschiedlich sein werden).

Sie können die Ausgabe auch als Liste formatieren, was in einigen Fällen leichter zu verarbeiten ist. Beispielsweise, um den Dienstnamen und die Anzahl der Replikate aufzulisten:

docker stack services mystack --format "- {{.Name}} (Replicas: {{.Replicas}})"

Dies gibt Folgendes aus:

- mystack_app (Replicas: 1/1)
- mystack_web (Replicas: 1/1)

Die Option --format bietet eine leistungsstarke Möglichkeit, die Ausgabe von docker stack services an Ihre spezifischen Anforderungen anzupassen, was es erleichtert, sie mit anderen Tools oder Skripten zu integrieren.

Abschließend entfernen wir den bereitgestellten Stack, um aufzuräumen.

docker stack rm mystack

Dieser Befehl entfernt alle Dienste und Netzwerke, die mit dem mystack-Stack verbunden sind. Sie sollten eine Ausgabe sehen, die anzeigt, dass der Stack entfernt wird.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie Dienste innerhalb eines Docker-Stacks mit dem Befehl docker stack services auflisten können. Dazu haben Sie zunächst Docker Compose installiert und einen einfachen Stack, der in einer docker-compose.yml-Datei definiert ist, bereitgestellt. Anschließend haben Sie docker stack services <stack_name> verwendet, um eine Tabelle aller Dienste im bereitgestellten Stack anzuzeigen.

Das Lab hat auch das Filtern von Diensten nach Name und ID behandelt, sodass Sie die Liste auf bestimmte Dienste einschränken können. Schließlich haben Sie untersucht, wie Sie die Ausgabe des Befehls docker stack services formatieren können, um die angezeigten Informationen anzupassen.