Verwendung des docker container diff Befehls zur Untersuchung von Container-Dateisystemänderungen

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 container diff verwenden, um Dateisystemänderungen in einem Docker-Container zu untersuchen. Wir beginnen mit der Ausführung eines einfachen Nginx-Containers und verwenden dann docker container diff, um die anfänglichen Dateisystemänderungen bei der Container-Erstellung zu analysieren.

Nach der ersten Untersuchung nehmen Sie Änderungen im laufenden Container vor. Abschließend verwenden Sie erneut docker container diff, um die Dateisystemunterschiede zu beobachten und zu verstehen, die durch diese Modifikationen entstanden sind. Diese praktische Übung vermittelt Ihnen Erfahrung im Umgang mit diesem wertvollen Docker-Befehl für Debugging-Zwecke und zum Verständnis des Container-Verhaltens.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/run -.-> lab-555107{{"Verwendung des docker container diff Befehls zur Untersuchung von Container-Dateisystemänderungen"}} docker/ps -.-> lab-555107{{"Verwendung des docker container diff Befehls zur Untersuchung von Container-Dateisystemänderungen"}} docker/rm -.-> lab-555107{{"Verwendung des docker container diff Befehls zur Untersuchung von Container-Dateisystemänderungen"}} docker/exec -.-> lab-555107{{"Verwendung des docker container diff Befehls zur Untersuchung von Container-Dateisystemänderungen"}} docker/inspect -.-> lab-555107{{"Verwendung des docker container diff Befehls zur Untersuchung von Container-Dateisystemänderungen"}} docker/pull -.-> lab-555107{{"Verwendung des docker container diff Befehls zur Untersuchung von Container-Dateisystemänderungen"}} docker/images -.-> lab-555107{{"Verwendung des docker container diff Befehls zur Untersuchung von Container-Dateisystemänderungen"}} end

Einen Nginx-Container ausführen

In diesem Schritt lernen Sie, wie Sie einen einfachen Nginx-Webserver in einem Docker-Container ausführen. Docker ermöglicht es uns, Anwendungen und ihre Abhängigkeiten in Containern zu verpacken, wodurch sie konsistent in verschiedenen Umgebungen laufen.

Zuerst müssen wir sicherstellen, dass das Nginx-Image auf unserem System verfügbar ist. Wir können das offizielle Nginx-Image von Docker Hub mit dem Befehl docker pull herunterladen. Dieser Befehl lädt das Image auf Ihren lokalen Rechner.

docker pull nginx:latest

Sie sollten eine Ausgabe sehen, die anzeigt, dass das Image heruntergeladen wird. Sobald der Download abgeschlossen ist, können Sie überprüfen, ob das Image verfügbar ist, indem Sie die Images auf Ihrem System auflisten:

docker images

In der Ausgabe sollte nginx aufgeführt sein.

Nun starten wir den Nginx-Container. Wir verwenden den Befehl docker run. Das Flag -d führt den Container im Detached-Modus (im Hintergrund) aus, und das Flag -p 80:80 bildet Port 80 auf unserem Host-Rechner auf Port 80 im Container ab. Dadurch können wir auf den Nginx-Webserver von unserem Host-Browser aus zugreifen. Wir geben dem Container auch einen Namen mit --name my-nginx-container, um ihn leichter identifizieren zu können.

docker run -d -p 80:80 --name my-nginx-container nginx

Nach Ausführung des Befehls gibt Docker eine lange Zeichenkette aus, die die Container-ID ist. Dies zeigt an, dass der Container erfolgreich im Hintergrund gestartet wurde.

Um zu überprüfen, ob der Container läuft, können Sie den Befehl docker ps verwenden, der alle laufenden Container auflistet:

docker ps

Sie sollten my-nginx-container mit dem Status Up sehen.

Abschließend greifen wir von unserem Host-Rechner auf den Nginx-Webserver zu. Da wir Port 80 abgebildet haben, können wir curl verwenden, um eine HTTP-Anfrage an localhost auf Port 80 zu senden.

curl localhost

Sie sollten das HTML der standardmäßigen Nginx-Begrüßungsseite in der Ausgabe sehen. Dies bestätigt, dass der Nginx-Container läuft und erreichbar ist.

Anfängliche Dateisystemänderungen mit docker container diff untersuchen

In diesem Schritt untersuchen wir, wie man die Dateisystemänderungen einsehen kann, die beim Start eines Docker-Containers auftreten. Docker verwendet ein geschichtetes Dateisystem, und wenn ein Container gestartet wird, wird eine neue beschreibbare Ebene über den Image-Ebenen hinzugefügt. Der Befehl docker container diff ermöglicht es uns, die Unterschiede in dieser beschreibbaren Ebene seit der Erstellung des Containers zu sehen.

Der Befehl docker container diff erwartet den Containernamen oder die Container-ID als Argument. Wir verwenden den Namen des Nginx-Containers aus dem vorherigen Schritt, nämlich my-nginx-container.

docker container diff my-nginx-container

Wenn Sie diesen Befehl unmittelbar nach dem Start des Containers ausführen, sehen Sie wahrscheinlich eine Liste von Dateien und Verzeichnissen. Die Ausgabe zeigt die Änderungen im Dateisystem des Containers relativ zum Basis-Image. Das Ausgabeformat ist typischerweise:

  • A zeigt an, dass eine Datei oder ein Verzeichnis hinzugefügt wurde.
  • C zeigt an, dass eine Datei oder ein Verzeichnis geändert wurde.
  • D zeigt an, dass eine Datei oder ein Verzeichnis gelöscht wurde.

Die anfänglichen Änderungen betreffen oft den Startprozess des Containers, wie die Erstellung temporärer Dateien, Logdateien oder Änderungen an Systemverzeichnissen. Dies sind die Dateien und Verzeichnisse, die in der beschreibbaren Ebene des Containers beim Start erstellt oder modifiziert werden.

Das Verständnis dieser anfänglichen Änderungen hilft uns zu sehen, was beim Start eines Containers im Hintergrund passiert und wie die beschreibbare Ebene befüllt wird.

Änderungen im Container vornehmen

In diesem Schritt werden wir einige Änderungen am Dateisystem im laufenden Nginx-Container vornehmen. Dies demonstriert, wie Modifikationen innerhalb eines Containers in dessen beschreibbarer Ebene aufgezeichnet werden.

Wir verwenden den Befehl docker exec, um Befehle innerhalb des Containers auszuführen. Der docker exec-Befehl ermöglicht es uns, einen Befehl in einem laufenden Container auszuführen. Dazu müssen wir den Containernamen (my-nginx-container) und den auszuführenden Befehl angeben.

Zuerst erstellen wir eine neue Datei im /tmp-Verzeichnis des Containers. Dazu verwenden wir den touch-Befehl.

docker exec my-nginx-container touch /tmp/my_new_file.txt

Dieser Befehl führt touch /tmp/my_new_file.txt im my-nginx-container aus. Bei erfolgreicher Ausführung wird keine Ausgabe angezeigt.

Als nächstes modifizieren wir die standardmäßige Nginx-Indexdatei. Die Standard-Willkommensseite von Nginx befindet sich typischerweise unter /usr/share/nginx/html/index.html im Container. Wir verwenden den echo-Befehl, um Text an diese Datei anzuhängen.

docker exec my-nginx-container echo "<h1>Hello from LabEx!</h1>" >> /usr/share/nginx/html/index.html

Dieser Befehl fügt den HTML-String "

Hello from LabEx!

" an die index.html-Datei im Container an.

Um zu überprüfen, ob die Änderungen vorgenommen wurden, können Sie erneut curl von Ihrem Host-System aus verwenden, um auf den Nginx-Server zuzugreifen.

curl localhost

Sie sollten nun den ursprünglichen Inhalt der Nginx-Willkommensseite gefolgt von "

Hello from LabEx!

" sehen. Dies bestätigt, dass die index.html-Datei im Container modifiziert wurde.

Diese Änderungen (Erstellung einer neuen Datei und Modifikation einer bestehenden) werden in der beschreibbaren Ebene des my-nginx-container aufgezeichnet. Im nächsten Schritt werden wir erneut docker container diff verwenden, um diese spezifischen Änderungen zu sehen.

Aktualisierte Dateisystemänderungen mit docker container diff untersuchen

In diesem letzten Schritt verwenden wir erneut den Befehl docker container diff, um die im vorherigen Schritt vorgenommenen Dateisystemänderungen zu beobachten. Dies zeigt deutlich, wie unsere Aktionen im Container in dessen beschreibbarer Ebene widergespiegelt werden.

Erinnern wir uns: Im vorherigen Schritt haben wir eine neue Datei /tmp/my_new_file.txt erstellt und die Datei /usr/share/nginx/html/index.html im my-nginx-container modifiziert. Führen wir nun erneut docker container diff für den Container aus.

docker container diff my-nginx-container

Diesmal sollte die Ausgabe unsere Änderungen enthalten. Sie sollten Zeilen ähnlich diesen sehen:

A /tmp/my_new_file.txt
C /usr/share/nginx/html/index.html

Die Zeile A /tmp/my_new_file.txt zeigt an, dass eine neue Datei namens my_new_file.txt im /tmp-Verzeichnis hinzugefügt (Added) wurde.
Die Zeile C /usr/share/nginx/html/index.html zeigt an, dass die Datei index.html im /usr/share/nginx/html/-Verzeichnis geändert (Changed) wurde.

Diese Ausgabe bestätigt, dass docker container diff effektiv die Änderungen am Dateisystem des Containers seit dessen Start anzeigt. Diese Änderungen werden in der beschreibbaren Ebene des Containers gespeichert, die von den Basis-Image-Ebenen getrennt ist. Dies ist ein grundlegendes Konzept von Dockers geschichtetem Dateisystem und wie Container ihren Zustand erhalten.

Wenn der Container entfernt wird, geht auch diese beschreibbare Ebene verloren, und alle im Container vorgenommenen Änderungen gehen verloren, es sei denn, sie werden über Volumes oder Bind Mounts persistiert (was Themen für ein anderes Lab sind).

Zur Bereinigung können Sie den Container stoppen und entfernen:

docker stop my-nginx-container
docker rm my-nginx-container

Damit schließen wir unsere Untersuchung von docker container diff ab. Sie haben gelernt, wie Sie die anfänglichen Dateisystemänderungen beim Start eines Containers einsehen und wie Sie die Änderungen in einem laufenden Container beobachten können.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man mit docker run einen einfachen Nginx-Container ausführt, diesen über Port-Mapping erreichbar macht und seinen Status mit docker ps überprüft. Anschließend haben wir den Befehl docker container diff untersucht, um die anfänglichen Dateisystemänderungen zu analysieren, die durch die Image-Layers des Containers bei dessen Erstellung eingeführt werden.

Daraufhin haben wir geübt, Modifikationen im Dateisystem des laufenden Containers vorzunehmen und erneut docker container diff verwendet, um zu beobachten und zu verstehen, wie diese Änderungen von Docker nachverfolgt und widergespiegelt werden. Dies verdeutlicht den Nutzen des Befehls zur Identifizierung von Unterschieden zwischen dem aktuellen Zustand des Containers und seinem Basis-Image.