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.
Vorbereiten 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 dasnginx:latest-Docker-Image und mappt Port 80 auf dem Host zu Port 80 im Container.db: Verwendet dasredis: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.
Alle in der compose.yaml-Datei definierten Service-Images abrufen
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 unter Ignorierung von buildbaren Services
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 im Hintergrundmodus 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.



