Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Eingehende Analyse der Docker-Dateischichtung (detaillierte Beispiele)

Eingehende Analyse der Docker-Dateischichtung (detaillierte Beispiele)

WBOY
WBOYnach vorne
2022-01-28 17:09:333665Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über die Docker-Dateischichtung. In diesem Artikel werden einige Prinzipien der Docker-Dateischichtung beschrieben.

Eingehende Analyse der Docker-Dateischichtung (detaillierte Beispiele)

Wissensvorbereitung

  • Docker nutzt tatsächlich einige Funktionen des Linux-Kernels, um eine Ressourcenisolation zu erreichen. Das Dateisystem ist eines davon, aber um Ressourcen effizienter zu machen, verwendet Docker eine hierarchische Dateisystemstruktur um das Dateisystem des Containers zu implementieren.
  • Ich persönlich denke, dass das Prinzip ein bisschen dem Konzept der Paralleluniversen ähnelt. Manche Leute glauben, dass es in unserem Universum Paralleluniversen gibt, das heißt, dass die verschiedenen Entscheidungen, die wir treffen, unterschiedliche Universen verteilen und weiterlaufen kann zwischen diesen Paralleluniversen schwimmen. Hier ist es etwas ähnlich: Nachdem wir ein Image gepackt und über Docker Run ausgeführt haben, wird auf dieser Basis tatsächlich ein anderes Universum erstellt. Während der Container weiter ausgeführt wird, ist der Inhalt des Containers derselbe wie der des Originalimages. Die Dinge werden viele Abweichungen und Unterschiede aufweisen und nach und nach ein eigenes Universum bilden.

Docker-Dateisystem

Sie können den Dateisystem-Layering-Status jedes Containers von docker inspect [container-id] --format={{.GraphDriver}}

{map[LowerDir:/var/lib/docker/overlay2/52f456f455215e56b77087495a5d35323fbf1c0e0391f45349f386006c75865b-init/diff:/var/lib/docker/overlay2/e4b90240aa77212dde6499a49c421d26977ed9fe8a1f6fcbaaaf77d85c67654e/diff MergedDir:/var/lib/docker/overlay2/52f456f455215e56b77087495a5d35323fbf1c0e0391f45349f386006c75865b/merged UpperDir:/var/lib/docker/overlay2/52f456f455215e56b77087495a5d35323fbf1c0e0391f45349f386006c75865b/diff WorkDir:/var/lib/docker/overlay2/52f456f455215e56b77087495a5d35323fbf1c0e0391f45349f386006c75865b/work] overlay2}

Es gibt hauptsächlich vier Typen

LowerDir

Das bedeutet, dass alle auf diesem Image basierenden Container auf dasselbe Dateisystem verweisen, das die Image-Ebene darstellt. Alle Container verwenden diese Ebene.

Woher kommt diese Ebene? Wir können uns das Bild ansehen, das wir verwenden

MergedDir

Dies ist ein anderer Container, der die untere Ebene und die obere Ebene kombiniert, um das endgültige Dateisystem im Container bereitzustellen

UpperDir

Dies dient dazu, die Vorgänge verschiedener Container aufzuzeichnen. Anschließend kann durch den Vergleich der unteren Ebene eine Zusammenführungsebene generiert werden der Spiegelschicht

docker run -d alpine:latest
docker inspect alpine --format={{.GraphDriver}}

Beachten Sie, dass UpperDir die obere Ebene des Bildes ist, das heißt, wir können auf dieser Ebene Änderungen vornehmen, die sich auf den später erstellten Container auswirken

Zeigen Sie die Dateisysteminformationen des Containers an

{map[MergedDir:/var/lib/docker/overlay2/e4b90240aa77212dde6499a49c421d26977ed9fe8a1f6fcbaaaf77d85c67654e/merged UpperDir:/var/lib/docker/overlay2/e4b90240aa77212dde6499a49c421d26977ed9fe8a1f6fcbaaaf77d85c67654e/diff WorkDir:/var/lib/docker/overlay2/e4b90240aa77212dde6499a49c421d26977ed9fe8a1f6fcbaaaf77d85c67654e/work] overlay2}
docker inspect 9a118484ba --format={{.GraphDriver}}

Sie Sie können die untere Ebene des Containers sehen, d. h. In der oberen Ebene des Bildes werden die von uns am Container vorgenommenen Änderungen in der oberen Ebene widergespiegelt und die zusammengeführte Ebene wird organisiert und im Container angezeigt.

Wir können die Änderungen im Container-Dateisystem über die Befehlszeile überprüfen

{map[LowerDir:/var/lib/docker/overlay2/3d3f32727c4f7867d43c1e61d635ac0ed22e95ff39c66240166dd6614b81fe14-init/diff:/var/lib/docker/overlay2/e4b90240aa77212dde6499a49c421d26977ed9fe8a1f6fcbaaaf77d85c67654e/diff MergedDir:/var/lib/docker/overlay2/3d3f32727c4f7867d43c1e61d635ac0ed22e95ff39c66240166dd6614b81fe14/merged UpperDir:/var/lib/docker/overlay2/3d3f32727c4f7867d43c1e61d635ac0ed22e95ff39c66240166dd6614b81fe14/diff WorkDir:/var/lib/docker/overlay2/3d3f32727c4f7867d43c1e61d635ac0ed22e95ff39c66240166dd6614b81fe14/work] overlay2}

Da wir den Container nicht bedient haben, gibt es keinen Unterschied zwischen diesem Container und dem Image

Wir starten einen anderen Container und lassen ihn für 300 schlafen Gehen Sie dann in den Container, um einige Dateiinformationen zu ändern

docker diff 9a118484ba

Überprüfen Sie die Änderungen im Container-Dateisystem

# docker exec -it ca91bb /bin/sh

/ # echo "helloWorld" > /tmp/hello.txt

Sie können sehen, dass diese Änderungen, die wir am Dateisystem vorgenommen haben, aufgezeichnet wurden

Diese Inhalte befinden sich tatsächlich im Verzeichnis von UpperDir

docker diff ca91bbffb801

C /root
C /root/.ash_history
C /tmp
A /tmp/hello.txt

Ändern Sie den Containerinhalt vom Host

Aus den obigen Experimenten können wir erkennen, dass die obere Ebene der hinzugefügte Inhalt ist und mit der unteren Ebene zusammengeführt wird, um die Änderungen im Container widerzuspiegeln. Können wir also die obere Ebene direkt ändern, um den Container zu betreiben?

Wir fügen ein Verzeichnis demo in dem Verzeichnis hinzu, in dem sich Upper befindet, und berühren eine Datei darin Wenn wir diesen Container initialisieren möchten, können wir den gesamten Inhalt der oberen Ebene direkt löschen.

    Anwendung
  • Software-Installationsspuren finden

    Im Verlauf früherer Projekte mussten Kunden uns immer mitteilen, welche Inhalte unsere Agentensoftware ändern wird, aber wir haben nie einen besseren Weg gefunden, den Kunden bereitzustellen Durch die Anwendung dieser Docker-Layer-Datei können wir den Agenten in einem Container bereitstellen und dann auf einen Blick klar erkennen, welche Verzeichnisse und Dateien die Software ändern wird.

    ... Video-Tutorial

Das obige ist der detaillierte Inhalt vonEingehende Analyse der Docker-Dateischichtung (detaillierte Beispiele). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen