Verwendung des docker compose pull Befehls zum Aktualisieren von Service-Images

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 compose pull verwenden, um Service-Images zu aktualisieren, die in einer compose.yaml-Datei definiert sind. Wir beginnen mit der Vorbereitung einer compose.yaml-Datei mit Services, die Docker-Images nutzen.

Anschließend erkunden Sie verschiedene Möglichkeiten, den docker compose pull-Befehl einzusetzen, darunter das Abrufen eines spezifischen Service-Images, das Abrufen aller Service-Images, das Abrufen von Images unter Ignorierung von buildbaren Services sowie das stille Abrufen von Images ohne Anzeige von Fortschrittsinformationen. Diese praktische Übung vermittelt Ihnen die Fähigkeiten, Ihre Docker Compose-Service-Images effizient zu verwalten und zu aktualisieren.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/rmi("Remove Image") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/pull -.-> lab-555087{{"Verwendung des docker compose pull Befehls zum Aktualisieren von Service-Images"}} docker/rmi -.-> lab-555087{{"Verwendung des docker compose pull Befehls zum Aktualisieren von Service-Images"}} docker/images -.-> lab-555087{{"Verwendung des docker compose pull Befehls zum Aktualisieren von Service-Images"}} end

Vorbereitung einer compose.yaml-Datei mit Services unter Verwendung von Images

In diesem Schritt bereiten wir eine compose.yaml-Datei vor, die Services mit Docker-Images definiert. Docker Compose ist ein Tool, mit dem Sie Multi-Container-Docker-Anwendungen definieren und verwalten können. Während Docker bereits auf der LabEx-VM installiert ist, ist Docker Compose nicht vorhanden. Wir werden Docker Compose zunächst installieren.

Zuerst installieren wir Docker Compose. Wir laden die Docker Compose-Binary 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

Nachdem Docker Compose installiert ist, überprüfen wir die Installation durch Überprüfung der Version.

docker-compose --version

Sie sollten eine Ausgabe ähnlich zu Docker Compose version v2.20.2 sehen.

Als nächstes erstellen wir ein Verzeichnis für unser Projekt und wechseln hinein.

mkdir ~/project/my-compose-app
cd ~/project/my-compose-app

Nun erstellen wir in diesem Verzeichnis eine compose.yaml-Datei. Diese Datei definiert zwei Services: einen Web-Service mit dem nginx-Image und einen Datenbank-Service mit dem redis-Image.

nano compose.yaml

Fügen Sie folgenden Inhalt in die compose.yaml-Datei ein:

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: redis:latest

Speichern Sie die Datei und beenden Sie den nano-Editor (Drücken Sie Strg + X, dann Y, dann Enter).

Diese compose.yaml-Datei definiert zwei Services:

  • web: Verwendet das nginx:latest-Docker-Image und mappt Port 80 auf dem Host zu Port 80 im Container.
  • db: Verwendet das redis:latest-Docker-Image.

In den folgenden Schritten werden wir diese compose.yaml-Datei verwenden, um die definierten Service-Images abzurufen.

Abrufen eines spezifischen Service-Images mit docker compose pull

In diesem Schritt lernen Sie, wie Sie ein bestimmtes Service-Image aus Ihrer compose.yaml-Datei mit dem Befehl docker compose pull abrufen können. Dies ist nützlich, wenn Sie nur das Image eines einzelnen Services aktualisieren oder herunterladen möchten, ohne andere Services zu beeinflussen.

Stellen Sie zunächst sicher, dass Sie sich im Verzeichnis ~/project/my-compose-app befinden, in dem Sie im vorherigen Schritt die compose.yaml-Datei erstellt haben.

cd ~/project/my-compose-app

Nun rufen wir das Image für den web-Service ab. Der Befehl hierfür lautet docker compose pull <service_name>. In unserem Fall ist der Service-Name web.

docker compose pull web

Sie sehen eine Ausgabe, die anzeigt, dass Docker Compose das nginx:latest-Image abruft. Dieser Prozess lädt die Image-Layer aus dem Docker-Registry herunter.

Nach Abschluss des Befehls können Sie überprüfen, ob das nginx-Image erfolgreich abgerufen wurde, indem Sie die verfügbaren Docker-Images auflisten.

docker images

In der Ausgabe sollten Sie nginx mit dem entsprechenden Tag (latest), der Image-ID, dem Erstellungsdatum und der Größe sehen.

Dies demonstriert, wie Sie gezielt das Image für einen bestimmten Service aus Ihrer compose.yaml-Datei abrufen können. Im nächsten Schritt werden wir Images für alle Services abrufen.

Abrufen aller in der compose.yaml-Datei definierten Service-Images

In diesem Schritt lernen Sie, wie Sie Images für alle in der compose.yaml-Datei definierten Services mit dem Befehl docker compose pull abrufen können, ohne spezifische Service-Namen anzugeben. Dies ist das Standardverhalten von docker compose pull, wenn keine Service-Namen angegeben werden.

Stellen Sie zunächst sicher, dass Sie sich im Verzeichnis ~/project/my-compose-app befinden.

cd ~/project/my-compose-app

Führen Sie nun den Befehl docker compose pull ohne Argumente aus.

docker compose pull

Dieser Befehl liest die compose.yaml-Datei und lädt die Images für alle darin definierten Services herunter. Da wir das nginx-Image bereits im vorherigen Schritt abgerufen haben, überprüft Docker Compose, ob das Image aktuell ist. Anschließend lädt es das redis:latest-Image herunter, da dieses noch nicht abgerufen wurde.

Sie sehen eine Ausgabe, die den Abrufvorgang für das redis-Image anzeigt.

Nach Abschluss des Befehls können Sie überprüfen, ob sowohl das nginx- als auch das redis-Image abgerufen wurden, indem Sie die verfügbaren Docker-Images auflisten.

docker images

In der Ausgabe sollten nun sowohl nginx als auch redis aufgeführt sein.

Dies zeigt, wie Sie mit einem einzigen Befehl alle benötigten Images für Ihre Multi-Container-Anwendung einfach abrufen können.

Service-Images abrufen und buildbare Services ignorieren

In diesem Schritt untersuchen wir die Verwendung des Flags --ignore-buildable mit docker compose pull. Dieses Flag ist nützlich, wenn Ihre compose.yaml-Datei sowohl Services enthält, die aus einem Dockerfile gebaut werden (buildbare Services), als auch Services, die vorgefertigte Images verwenden. Das --ignore-buildable-Flag weist Docker Compose an, nur Images für Services abzurufen, die einen image-Schlüssel angeben, und Services mit einem build-Schlüssel zu überspringen.

Zuerst passen wir unsere compose.yaml-Datei an, um einen buildbaren Service hinzuzufügen. Wir werden einen einfachen Service erstellen, der ein Basis-Image baut.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project/my-compose-app befinden.

cd ~/project/my-compose-app

Erstellen Sie nun ein einfaches Dockerfile für unseren buildbaren Service.

nano Dockerfile

Fügen Sie folgenden Inhalt in das Dockerfile ein:

FROM alpine:latest
CMD ["echo", "Hello from buildable service!"]

Speichern Sie die Datei und beenden Sie den nano-Editor.

Als nächstes modifizieren Sie die compose.yaml-Datei, um einen neuen Service hinzuzufügen, der dieses Dockerfile verwendet.

nano compose.yaml

Fügen Sie folgende Service-Definition unterhalb des db-Services in Ihre compose.yaml-Datei ein:

builder:
  build: .

Ihre vollständige compose.yaml-Datei sollte nun wie folgt aussehen:

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: redis:latest
  builder:
    build: .

Speichern Sie die Datei und beenden Sie den nano-Editor.

Nun versuchen wir, Images mit docker compose pull --ignore-buildable abzurufen.

docker compose pull --ignore-buildable

Sie werden beobachten, dass Docker Compose die Services web und db überprüft und deren Images bei Bedarf abruft (diese sollten bereits aus vorherigen Schritten vorhanden sein). Der builder-Service wird jedoch ignoriert, da er den build-Schlüssel anstelle des image-Schlüssels verwendet. Sie werden keine Ausgabe bezüglich des Builds oder Abrufs eines Images für den builder-Service sehen.

Um zu bestätigen, dass kein Image für den builder-Service gebaut oder abgerufen wurde, können Sie Ihre Docker-Images auflisten.

docker images

Sie sollten weiterhin nur die nginx- und redis-Images sehen. Durch diesen Befehl wurde kein neues Image aus dem Dockerfile erstellt.

Dies demonstriert, wie das --ignore-buildable-Flag Ihnen ermöglicht, selektiv nur vorgefertigte Images abzurufen, was in verschiedenen Entwicklungs- und Bereitstellungsszenarien nützlich sein kann.

Service-Images ohne Fortschrittsinformationen abrufen

In diesem Schritt lernen Sie, wie Sie Service-Images ohne detaillierte Fortschrittsinformationen mit dem Flag --quiet oder -q bei docker compose pull abrufen können. Dies ist nützlich, wenn Sie die Ausgabe in Ihrem Terminal reduzieren möchten, beispielsweise in Skripten oder automatisierten Workflows.

Stellen Sie zunächst sicher, dass Sie sich im Verzeichnis ~/project/my-compose-app befinden.

cd ~/project/my-compose-app

Nun verwenden wir den Befehl docker compose pull --quiet, um die Images abzurufen. Da die Images für web und db wahrscheinlich bereits aus vorherigen Schritten vorhanden sind, überprüft Docker Compose, ob sie aktuell sind. Falls ja, wird der Befehl schnell mit minimaler Ausgabe abgeschlossen. Wenn ein Image abgerufen werden müsste, würden Sie die üblichen Fortschrittsbalken und Layer-Informationen nicht sehen.

docker compose pull --quiet

Sie werden feststellen, dass die Ausgabe deutlich weniger detailliert ist im Vergleich zur Ausführung von docker compose pull ohne das --quiet-Flag. Möglicherweise sehen Sie Meldungen, die anzeigen, dass die Images bereits aktuell sind, aber Sie werden keine detaillierten Download-Fortschritte für jeden Layer sehen.

Um den Effekt deutlicher zu demonstrieren, entfernen wir zunächst eines der Images und rufen es dann im stillen Modus ab. Wir entfernen das redis-Image.

docker rmi redis:latest

Nun rufen Sie die Images erneut mit dem --quiet-Flag ab.

docker compose pull --quiet

Diesmal wird das redis-Image abgerufen, aber Sie werden keine detaillierten Fortschrittsinformationen sehen. Die Ausgabe wird minimal sein und bestätigen, dass der Abrufvorgang ohne die übliche visuelle Rückmeldung stattfindet.

Sie können überprüfen, ob das redis-Image wieder abgerufen wurde, indem Sie die Docker-Images auflisten.

docker images

Sie sollten sowohl nginx als auch redis aufgelistet sehen.

Das --quiet-Flag ist eine einfache, aber effektive Möglichkeit, die Ausführlichkeit des docker compose pull-Befehls zu steuern, was es für Umgebungen geeignet macht, in denen detaillierte Ausgaben nicht erwünscht sind.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man den Befehl docker compose pull verwendet, um Service-Images zu aktualisieren. Wir begannen mit der Vorbereitung einer compose.yaml-Datei, die Services mit spezifischen Docker-Images definiert, einschließlich der Installation von Docker Compose selbst.

Anschließend haben wir untersucht, wie man Images für einzelne Services abruft, alle in der Datei definierten Services abruft und Optionen nutzt, um buildbare Services zu ignorieren und die Fortschrittsausgabe zu unterdrücken, um einen leiseren Abrufprozess zu ermöglichen.