Zum Inhalt springen

Docker-Image-Explorer

Docker Image Explorer

Öffnet ein exportiertes Image-Tarball und zeigt für jede Schicht den Befehl, die Größe und die hinzugefügten oder gelöschten Dateien.

Öffnet ein exportiertes Docker- oder OCI-Image und zeigt, was jeder Layer tatsächlich enthält – seine Größe, den Dockerfile-Schritt, der ihn erzeugt hat, die Dateien, die er hinzufügt, und die Dateien, die er aus den Layern darunter löscht. So finden Sie heraus, warum ein Image dreihundert Megabyte groß ist.

🔒 Läuft vollständig in Ihrem Browserdockerocilayersinspect

Exportiertes Image (.tar) ablegen

Aus `docker save image:tag -o image.tar` oder podman save. Wird in diesem Tab gelesen; nichts wird hochgeladen.

Öffnet sowohl Tars aus docker save als auch OCI-Image-Layouts und ordnet jede Schicht über die History der Konfiguration ihrem Dockerfile-Schritt zu (Schritte, die mit empty_layer markiert sind — ENV, CMD, LABEL — erzeugen keine Schicht und werden getrennt aufgeführt). Löschungen werden nach der Whiteout-Konvention von OCI gelesen: ein Eintrag .wh.name entfernt name aus den Schichten darunter — die Datei liegt weiterhin in der unteren Schicht und kostet weiterhin ihre Bytes.

So funktioniert es

  1. Exportieren Sie das Image

    `docker save image:tag -o image.tar` oder das entsprechende `podman save`. Ein OCI-Image-Layout funktioniert ebenfalls.

  2. Legen Sie das Tar ab

    Es wird in einem Worker in diesem Tab geparst. Nichts wird hochgeladen, was zählt, denn ein Image-Tar enthält Ihr gesamtes Dateisystem.

  3. Öffnen Sie die großen Layer

    Jede Zeile zeigt ihre Größe als Balken und ihren Dockerfile-Schritt. Beim Aufklappen werden die größten Dateien aufgeführt, die sie hinzufügt, und getrennt davon, was sie löscht und was sie verdeckt.

Häufige Fragen

Ich habe die Datei in einem späteren RUN gelöscht – warum ist das Image immer noch groß?

Weil eine Löschung selbst ein Layer ist. Die OCI-Whiteout-Konvention schreibt einen `.wh.name`-Eintrag, der `name` aus den Layern darunter ausblendet; die Originaldatei ist noch da, wird noch ausgeliefert, wird noch gezählt. Löschen Sie im selben `RUN`, das sie erzeugt hat, oder verwenden Sie einen Multi-Stage-Build.

Warum haben manche Dockerfile-Schritte keinen Layer?

ENV, CMD, LABEL, EXPOSE und Verwandte ändern nur die Konfiguration, nicht das Dateisystem, sodass die Image-Historie sie als `empty_layer` markiert. Sie werden hier getrennt aufgeführt, damit die Layer-Nummerierung weiterhin mit dem übereinstimmt, was tatsächlich Bytes kostet.

Kann es ein Image direkt aus einer Registry öffnen?

Nein – es liest nur ein lokales Tar. Pullen würde bedeuten, dass sich diese Seite bei Ihrer Registry authentifiziert, was ein anderes Werkzeug mit einem anderen Bedrohungsmodell ist. `docker save` ist einen Befehl entfernt.

Die Größe hier stimmt nicht mit `docker images` überein.

Die messen verschiedene Dinge. `docker images` meldet die Größe auf der Platte, nachdem der Storage-Treiber gemeinsame Layer dedupliziert hat; hier wird der unkomprimierte Inhalt jedes Layers im Export gemeldet. Beides stimmt; das Zweite ist das, was Ihnen sagt, was ein `docker pull` überträgt.

Eingabe aus

Danach

Diese Tools nehmen an, was dieses hier erzeugt, das Ergebnis kann also direkt weiter.