Wie man den docker service update-Befehl verwendet, um einen Service zu ändern

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 Docker-Services effektiv verwalten und ändern können, indem Sie den Befehl docker service update verwenden. Sie beginnen damit, einen einfachen Service zu erstellen und erkunden dann, wie Sie ihn skalieren können, indem Sie die Anzahl der Replikate aktualisieren.

Darüber hinaus lernen Sie, wie Sie einen schrittweisen Neustart Ihres Services durchführen, veröffentlichte Ports hinzufügen oder entfernen und wie Sie Ihren Service auf eine frühere Version zurücksetzen können. Dies vermittelt Ihnen essentielle Fähigkeiten für die Verwaltung des Lebenszyklus Ihrer containerisierten Anwendungen in einer Docker Swarm-Umgebung.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/restart("Restart Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ls -.-> lab-555232{{"Wie man den docker service update-Befehl verwendet, um einen Service zu ändern"}} docker/ps -.-> lab-555232{{"Wie man den docker service update-Befehl verwendet, um einen Service zu ändern"}} docker/restart -.-> lab-555232{{"Wie man den docker service update-Befehl verwendet, um einen Service zu ändern"}} docker/inspect -.-> lab-555232{{"Wie man den docker service update-Befehl verwendet, um einen Service zu ändern"}} docker/create -.-> lab-555232{{"Wie man den docker service update-Befehl verwendet, um einen Service zu ändern"}} docker/pull -.-> lab-555232{{"Wie man den docker service update-Befehl verwendet, um einen Service zu ändern"}} end

Ein einfachen Service erstellen

In diesem Schritt lernen Sie, wie Sie einen einfachen Docker-Service erstellen können. Ein Service ist eine Gruppe von Containern, die das gleiche Image verwenden. Services sind nützlich, um Ihre Anwendung zu skalieren und eine hohe Verfügbarkeit sicherzustellen.

Zunächst laden wir das alpine-Image von Docker Hub herunter. Dieses Image ist sehr klein und eignet sich gut für Tests.

docker pull alpine

Sie sollten eine Ausgabe sehen, die anzeigt, dass das Image heruntergeladen wird.

Jetzt erstellen wir einen Service namens my-service mit dem alpine-Image. Wir führen innerhalb des Containers einen einfachen Befehl aus, der "Hello, LabEx!" ausgibt und dann beendet wird.

docker service create --name my-service alpine echo "Hello, LabEx!"

Dieser Befehl erstellt einen neuen Service. Die Option --name my-service gibt dem Service einen Namen. alpine ist das zu verwendende Image, und echo "Hello, LabEx!" ist der Befehl, der innerhalb des Containers ausgeführt wird.

Sie sollten eine Ausgabe ähnlich dieser sehen, die die Service-ID anzeigt:

<service_id>

Um zu überprüfen, ob der Service erfolgreich erstellt wurde, können Sie die Services auflisten:

docker service ls

Sie sollten my-service in der Ausgabe sehen.

Aktualisieren der Service-Replikate

In diesem Schritt lernen Sie, wie Sie einen Docker-Service skalieren können, indem Sie die Anzahl der Replikate aktualisieren. Replikate sind identische Kopien der Container Ihres Services. Durch die Erhöhung der Anzahl der Replikate kann Ihr Service eine höhere Last verarbeiten und bietet eine höhere Verfügbarkeit.

Derzeit hat unser my-service nur ein Replikat. Dies können Sie in der Ausgabe von docker service ls in der Spalte "REPLICAS" sehen.

Skaliere den Service auf 3 Replikate. Dies können wir mit dem Befehl docker service update und der Option --replicas tun.

docker service update --replicas 3 my-service

Dieser Befehl weist Docker Swarm an, den my-service so zu aktualisieren, dass er 3 Replikate hat. Docker Swarm erstellt automatisch die zusätzlichen Container, um die gewünschte Anzahl an Replikaten zu erreichen.

Sie sollten eine Ausgabe sehen, die anzeigt, dass der Service aktualisiert wurde.

Um zu überprüfen, ob der Service skaliert wurde, listen Sie die Services erneut auf:

docker service ls

Schauen Sie sich die Spalte "REPLICAS" für my-service an. Sie sollte jetzt 3/3 anzeigen, was bedeutet, dass 3 Replikate gewünscht sind und 3 derzeit laufen.

Sie können auch die mit dem Service verbundenen Tasks untersuchen, um die einzelnen Container zu sehen:

docker service ps my-service

Dieser Befehl zeigt Ihnen den Status jedes Replikats (Tasks) des Services an. Sie sollten drei Tasks aufgeführt sehen, wahrscheinlich mit dem Status "Running".

Einen Rolling-Restart des Services durchführen

In diesem Schritt lernen Sie, wie Sie einen Rolling-Restart (Rollender Neustart) eines Docker-Services durchführen können. Ein Rolling-Restart aktualisiert die Tasks (Aufgaben) des Services nacheinander, um sicherzustellen, dass der Service während des Update-Prozesses verfügbar bleibt. Dies ist entscheidend für die Aufrechterhaltung der Anwendungs-Verfügbarkeit.

Um einen Rolling-Restart auszulösen, können wir den Befehl docker service update mit der Option --force verwenden. Diese Option erzwingt ein neues Update, auch wenn die Service-Konfiguration sich nicht geändert hat.

docker service update --force my-service

Dieser Befehl initiiert einen Rolling-Restart des my-service. Docker Swarm wird jedes Replikat des Services nacheinander anhalten und neu starten.

Sie sollten eine Ausgabe sehen, die anzeigt, dass der Service aktualisiert wurde.

Um den laufenden Rolling-Restart zu beobachten, können Sie die Service-Tasks kontinuierlich überwachen:

docker service ps my-service

Führen Sie diesen Befehl mehrmals aus. Sie werden sehen, dass der "CURRENT STATE" (Aktueller Zustand) der Tasks von "Running" (Läuft) zu "Shutdown" (Herunterfahren) und dann wieder zu "Running" wechselt, wenn jedes Replikat neu gestartet wird. Dieser Prozess erfolgt Replikat für Replikat, was die rollende Natur des Neustarts zeigt.

Sobald alle Tasks neu gestartet wurden, wird die Ausgabe von docker service ps my-service alle Tasks im "Running" -Zustand mit aktualisierten Zeitstempeln in der Spalte "UPDATED" anzeigen.

Einen veröffentlichten Port hinzufügen oder entfernen

In diesem Schritt lernen Sie, wie Sie einen veröffentlichten Port für einen Docker-Service hinzufügen oder entfernen können. Das Veröffentlichen eines Ports macht einen Port innerhalb des Containers von außerhalb des Docker Swarm-Clusters zugänglich. Dies ist essentiell, um Ihre Anwendung für Benutzer oder andere Services zugänglich zu machen.

Unser aktueller my-service hat keine veröffentlichten Ports, da er einfach nur einen einfachen echo-Befehl ausführt und dann beendet. Um das Veröffentlichen von Ports zu demonstrieren, erstellen wir einen neuen Service, der einen einfachen Webserver ausführt. Wir verwenden dafür das nginx-Image.

Zuerst laden wir das nginx-Image herunter:

docker pull nginx

Jetzt erstellen wir einen neuen Service namens web-service und veröffentlichen Port 80 des Containers auf Port 8080 des Hosts.

docker service create --name web-service --publish 8080:80 nginx

Dieser Befehl erstellt einen Service namens web-service unter Verwendung des nginx-Images. Die Option --publish 8080:80 bildet Port 80 innerhalb des Containers auf Port 8080 des Hosts ab.

Sie sollten eine Ausgabe sehen, die die Service-ID anzeigt.

Um zu überprüfen, ob der Port veröffentlicht wurde, können Sie den Service untersuchen:

docker service inspect web-service

Suchen Sie im Ausgabeergebnis nach dem Abschnitt EndpointSpec. Sie sollten einen Eintrag unter Ports sehen, der die veröffentlichte Portzuordnung anzeigt (z. B. PublishedPort: 8080, TargetPort: 80).

Jetzt entfernen wir den veröffentlichten Port aus dem web-service. Dies können wir mit dem Befehl docker service update und der Option --publish-rm tun, wobei wir den Zielport innerhalb des Containers angeben.

docker service update --publish-rm 80 web-service

Dieser Befehl entfernt die Portzuordnung für Port 80 innerhalb des Containers.

Sie sollten eine Ausgabe sehen, die anzeigt, dass der Service aktualisiert wurde.

Um zu überprüfen, ob der Port entfernt wurde, untersuchen Sie den Service erneut:

docker service inspect web-service

Der Abschnitt EndpointSpec sollte die Portzuordnung, die Sie gerade entfernt haben, nicht mehr anzeigen.

Den Service auf eine frühere Version zurücksetzen

In diesem Schritt lernen Sie, wie Sie einen Docker-Service auf eine frühere Version zurücksetzen können. Das Zurücksetzen (Rollback) ist wichtig, wenn ein neues Service-Update Probleme verursacht. Docker Swarm verfolgt die vorherigen Service-Konfigurationen, sodass Sie schnell zu einem stabilen Zustand zurückkehren können.

Zunächst simulieren wir ein Update, von dem wir möglicherweise zurücksetzen möchten. Wir aktualisieren den web-service, um eine andere, hypothetische Image-Version zu verwenden (wir ziehen das Image tatsächlich nicht herunter, die Befehlsstruktur ist für den Rollback wichtig).

docker service update --image nginx:1.20.0 web-service

Dieser Befehl versucht, den web-service so zu aktualisieren, dass er das nginx:1.20.0-Image verwendet. In einer realen Situation könnte dies eine neue Version mit einem Fehler sein.

Nun nehmen wir an, dass wir ein Problem mit diesem Update feststellen und auf die vorherige Version zurücksetzen möchten (die das Standard-nginx-Image verwendet hat). Wir können den Befehl docker service rollback verwenden.

docker service rollback web-service

Dieser Befehl teilt Docker Swarm mit, den web-service auf seine vorherige Konfiguration zurückzusetzen. Docker Swarm wird die Tasks, die das neue Image ausführen, anhalten und Tasks starten, die die vorherige Image-Version verwenden.

Sie sollten eine Ausgabe sehen, die anzeigt, dass der Service zurückgesetzt wird.

Um zu überprüfen, ob der Rollback erfolgreich war, können Sie den Service erneut untersuchen:

docker service inspect web-service

Schauen Sie sich das Feld Image in der Ausgabe an. Es sollte jetzt das ursprüngliche nginx-Image anzeigen (ohne das :1.20.0-Tag, vorausgesetzt, Sie haben zunächst das neueste Standard-Image heruntergeladen).

Sie können auch die Service-Tasks überprüfen, um zu sehen, dass die Container das ältere Image ausführen:

docker service ps web-service

Die Tasks sollten jetzt das ursprüngliche Image ausführen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie Docker-Services mit dem Befehl docker service update verwalten können. Sie haben begonnen, indem Sie einen einfachen Service mit dem alpine-Image und einem grundlegenden echo-Befehl erstellt haben.

Anschließend haben Sie wichtige Service-Update-Operationen untersucht. Sie haben den Service skaliert, indem Sie die Anzahl der Replikate geändert haben, einen Rolling Restart durchgeführt, um Service-Tasks ohne Ausfallzeit zu aktualisieren, und gelernt, wie Sie veröffentlichte Ports hinzufügen oder entfernen können, um den Service extern zugänglich zu machen. Schließlich haben Sie das Zurücksetzen des Services auf eine frühere Version geübt, was zeigt, wie Sie Änderungen rückgängig machen können, wenn ein Update Probleme verursacht. Diese Schritte haben Ihnen praktische Erfahrungen in der Verwaltung des Lebenszyklus und der Konfiguration von Docker-Services vermittelt.