Docker-Images und ihre Layer

Ressource Docker-Images und ihre Layer (aktualisiert)

dominik

Mitglied
dominik erstellte eine neue Ressource:

Docker-Images und ihre Layer - Eine Zusammenfassung für Docker-Nerds, die den internen Aufbau von Images verstehen wollen.

Docker-Images und ihre Layer

Diese Zusammenfassung ist für alle Docker-Nerds interessant, die den Aufbau und die interne Funktionsweise von Docker-Images verstehen wollen. Für normaler Benutzer von Docker spielt dies eine untergeordnete Rolle. Hier zeige ich auf, wie sich Images aus verschiedenen Schichten, nachfolgend Layer genannt, zusammensetzen.

Die Struktur eines Images

Jedes Docker-Image besteht aus mehreren Read-Only-Layern. Beim Build eines...
Erfahre mehr über diese Ressource...
 

dominik

Mitglied
@Mat, @aligator und @JR Cologne: Ich musste eine Erklärung unter "Erstellen eines Beispiel-Images" nachträglich präzisieren. Zu der Ausgabe von docker image build hieß es:

Diese Ausgabe legt nahe, dass beim Build des Images insgesamt vier Layer involviert sind, was mit einer Inspektion des Images verifziert werden kann.
Das war etwas ungenau formuliert. Bei lokal gebauten Images werden hier nämlich temporäre Images angezeigt, und nicht die blanken Layer. Darum war auch ein "Layer" für WORKDIR vorhanden, obwohl diese Anweisung keine Modifikation am Dateisystem vornimmt. In Wahrheit war es ein temporäres Image.

Nun habe ich das etwas ausführlicher erklärt:

Diese Ausgabe gibt Auskunft über die Struktur des gebauten Images. Beim lokalen Build eines Images wird für jeden Layer, der in das zu bauende Image committed wird, ein temporäres Image erstellt.

Solche temporären Images sind in dieser Ausgabe an ihrer ID erkennbar, z. B. ---> c06adcf62f6e. Auch für Dockerfile-Anweisungen, die keine Modifikation am Dateisystem vornehmen, wird ein temporäres Image erstellt. Das ist beispielsweise bei unserer WORKDIR-Anweisung der Fall. Temporäre Images sind eine Besonderheit bei lokalen Builds und erlauben die Nutzung des Build-Caches für bessere Performance.
Das zweite Problem an dieser Formulierung war, dass sie irgendwie nicht zu der Ausgabe von docker image history gepasst hat, wo in der "Layer-Übersicht" nicht "Layer", sondern "Image" als Spaltenüberschrift steht. Den Grund dafür habe ich ebenfalls erklärt:

Das hat einerseits historische Gründe, weil vor Docker 1.10 jeder Layer tatsächlich auch einem echten Image zugeordnet war. Andererseits hat es auch mit der oben erwähnten Besonderheit bei lokalen Builds zu tun: Es handelt sich nämlich tatsächlich um (temporäre) Images, die auf dem Host vorhanden sind und für den lokalen Build genutzt wurden. Alle Einträge mit <missing> als Image stammen vom Basis-Image und sind keine temporären Images eines lokalen Builds, sondern lediglich Layer.
Ich hoffe, damit eventuelle Verwirrung beseitigt zu haben. Wer das jetzt anhand der Zitate hier nicht nachvollziehen konnte, einfach nochmal die Ressource mit den Ausgaben am Terminal durchlesen.
 
Zuletzt bearbeitet:
Oben Unten