Verwendung des docker buildx imagetools inspect Befehls zur Untersuchung von Image-Details

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 buildx imagetools inspect verwenden, um detaillierte Informationen von Docker-Images zu untersuchen. Wir behandeln die Inspektion von Single-Platform- und Multi-Platform-Images und zeigen, wie Sie deren Konfiguration, Layer und Metadaten einsehen können.

Sie werden außerdem lernen, wie Sie die Ausgabe der Inspektion mit Go-Templates für individuelle Ansichten formatieren und wie Sie das rohe JSON-Manifest eines Images anzeigen, um dessen Struktur vollständig zu verstehen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/inspect -.-> lab-555058{{"Verwendung des docker buildx imagetools inspect Befehls zur Untersuchung von Image-Details"}} docker/pull -.-> lab-555058{{"Verwendung des docker buildx imagetools inspect Befehls zur Untersuchung von Image-Details"}} end

Ein Single-Platform-Image untersuchen

In diesem Schritt lernen Sie, wie Sie ein Single-Platform-Docker-Image mit dem Befehl docker image inspect untersuchen können. Dieser Befehl liefert detaillierte Informationen über ein Image, einschließlich seiner Konfiguration, Layer und Metadaten.

Zuerst laden wir ein einfaches Single-Platform-Image herunter. Für dieses Beispiel verwenden wir das hello-world-Image.

docker pull hello-world

Sie sollten eine Ausgabe sehen, die anzeigt, dass das Image heruntergeladen wird.

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Nachdem wir das Image haben, können wir es untersuchen. Verwenden Sie den Befehl docker image inspect gefolgt vom Image-Namen.

docker image inspect hello-world

Dieser Befehl gibt ein großes JSON-Objekt aus, das verschiedene Details über das hello-world-Image enthält. Sie sehen Informationen wie die Image-ID, das Erstellungsdatum, die Architektur, das Betriebssystem und die Konfiguration.

[
    {
        "Id": "sha256:...",
        "RepoTags": [
            "hello-world:latest"
        ],
        "RepoDigests": [
            "hello-world@sha256:..."
        ],
        "Parent": "",
        "Comment": "",
        "Created": "...",
        "Container": "...",
        "ContainerConfig": {
            ...
        },
        "DockerVersion": "...",
        "Author": "",
        "Config": {
            ...
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": ...,
        "VirtualSize": ...,
        "GraphDriver": {
            ...
        },
        "RootFS": {
            ...
        },
        "Metadata": {
            ...
        }
    }
]

Die Ausgabe ist ein JSON-Array, selbst wenn Sie nur ein einzelnes Image untersuchen. Dies liegt daran, dass der Befehl mehrere Image-Namen als Argumente akzeptieren kann.

Ein Multi-Platform-Image untersuchen

In diesem Schritt lernen Sie, wie Sie ein Multi-Platform-Docker-Image untersuchen können. Multi-Platform-Images sind für die Ausführung auf verschiedenen Architekturen und Betriebssystemen konzipiert. Wenn Sie ein Multi-Platform-Image herunterladen, wählt Docker automatisch das passende Image für Ihre Systemarchitektur aus.

Lassen Sie uns ein Multi-Platform-Image herunterladen. Wir verwenden das alpine-Image, eine schlanke Linux-Distribution.

docker pull alpine

Sie sehen eine ähnliche Ausgabe wie im vorherigen Schritt, die den Download des Images anzeigt.

Using default tag: latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Nun untersuchen wir das alpine-Image mit dem Befehl docker image inspect.

docker image inspect alpine

Die Ausgabe ist wieder ein JSON-Objekt. Beachten Sie die Felder Architecture und Os. Diese zeigen die Architektur und das Betriebssystem des für Ihre Umgebung heruntergeladenen Images an.

[
    {
        "Id": "sha256:...",
        "RepoTags": [
            "alpine:latest"
        ],
        "RepoDigests": [
            "alpine@sha256:..."
        ],
        "Parent": "",
        "Comment": "",
        "Created": "...",
        "Container": "...",
        "ContainerConfig": {
            ...
        },
        "DockerVersion": "...",
        "Author": "",
        "Config": {
            ...
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": ...,
        "VirtualSize": ...,
        "GraphDriver": {
            ...
        },
        "RootFS": {
            ...
        },
        "Metadata": {
            ...
        }
    }
]

Während der inspect-Befehl die Details des für Ihre Plattform heruntergeladenen spezifischen Images anzeigt, werden in dieser Standardansicht nicht direkt Informationen über alle unterstützten Plattformen des Images angezeigt. In einem späteren Schritt werden wir untersuchen, wie Sie weitere Details über das Image-Manifest einsehen können.

Ausgabe mit Go-Templates formatieren

In diesem Schritt lernen Sie, wie Sie die Ausgabe des docker image inspect-Befehls mit Go-Templates formatieren können. Dies ermöglicht es Ihnen, spezifische Informationen aus der umfangreichen JSON-Ausgabe zu extrahieren und in einem besser lesbaren Format anzuzeigen.

Der docker image inspect-Befehl unterstützt das Flag --format, das einen Go-Template-String als Argument akzeptiert. Go-Templates ermöglichen den Zugriff auf Felder innerhalb der JSON-Ausgabe mittels Punktnotation.

Lassen Sie uns das alpine-Image erneut untersuchen, diesmal jedoch die Ausgabe so formatieren, dass nur die Image-ID und die Architektur angezeigt werden.

docker image inspect --format 'ID: {{.Id}}, Architecture: {{.Architecture}}' alpine

In diesem Befehl greift {{.Id}} auf das Id-Feld und {{.Architecture}} auf das Architecture-Feld der JSON-Ausgabe zu.

Sie sollten eine ähnliche Ausgabe wie diese sehen, die die ID und Architektur des heruntergeladenen Images anzeigt:

ID: sha256:..., Architecture: amd64

Sie können auch verschachtelte Felder abrufen. Um beispielsweise das Betriebssystem, das sich im Hauptobjekt befindet, zu erhalten, würden Sie {{.Os}} verwenden. Lassen Sie uns versuchen, die ID, Architektur und das Betriebssystem anzuzeigen.

docker image inspect --format 'ID: {{.Id}}, Architecture: {{.Architecture}}, OS: {{.Os}}' alpine

Die Ausgabe enthält nun auch das Betriebssystem:

ID: sha256:..., Architecture: amd64, OS: linux

Go-Templates bieten erweiterte Funktionen wie Schleifen und bedingte Anweisungen, aber für die einfache Extraktion von Feldern ist die Punktnotation ausreichend. Diese Formatierung ist besonders nützlich, wenn Sie Operationen basierend auf bestimmten Image-Eigenschaften automatisieren möchten.

Das rohe JSON-Manifest anzeigen

In diesem Schritt lernen Sie, wie Sie das rohe JSON-Manifest eines Docker-Images einsehen können. Das Manifest enthält detaillierte Informationen über das Image, einschließlich der Layer und Konfigurationen für verschiedene Architekturen im Fall eines Multi-Platform-Images.

Um das rohe Manifest anzuzeigen, können Sie den Befehl docker manifest inspect verwenden. Dieser Befehl ist besonders nützlich, um Multi-Platform-Images zu verstehen.

Lassen Sie uns das Manifest für das zuvor heruntergeladene alpine-Image untersuchen.

docker manifest inspect alpine

Dieser Befehl gibt ein JSON-Objekt aus, das das Image-Manifest repräsentiert. Für ein Multi-Platform-Image wie alpine ist dieses Manifest eine "Manifest-Liste" (auch als "Index" bekannt). Diese Liste enthält Einträge für jede unterstützte Architektur, die auf das spezifische Image-Manifest für diese Architektur verweisen.

Sie sehen eine ähnliche Ausgabe wie diese (der genaue Inhalt kann je nach Image-Version und Ihrer Docker-Konfiguration leicht variieren):

{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": ...,
         "digest": "sha256:...",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": ...,
         "digest": "sha256:...",
         "platform": {
            "architecture": "arm",
            "os": "linux",
            "variant": "v6"
         }
      },
      ...
   ]
}

Beachten Sie das manifests-Array. Jedes Objekt in diesem Array repräsentiert ein spezifisches Image für eine bestimmte Plattform (Architektur und Betriebssystem). Sie können das platform-Feld sehen, das die Architektur und das Betriebssystem für jeden Eintrag angibt. Das digest-Feld ist der eindeutige Identifikator für das Manifest dieses spezifischen Plattform-Images.

Dieses rohe Manifest bietet tiefere Einblicke in die Struktur von Multi-Platform-Images und ermöglicht es Ihnen, alle verfügbaren Varianten unter einem einzigen Tag zu sehen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie den Befehl docker image inspect verwenden, um Details von Docker-Images zu untersuchen. Sie begannen mit der Inspektion eines Single-Platform-Images, speziell des hello-world-Images, und sahen, wie der Befehl eine umfassende JSON-Ausgabe liefert, die Informationen wie Image-ID, Architektur, Betriebssystem und Konfiguration enthält.

Anschließend untersuchten Sie ein Multi-Platform-Image und verstanden, dass die Ausgabe für solche Images Details zu den unterstützten Plattformen enthält. Abschließend erkundeten Sie, wie Sie die Ausgabe mit Go-Templates formatieren können, um spezifische Informationen zu extrahieren, und wie Sie das rohe JSON-Manifest einsehen können, um die Struktur des Images genauer zu analysieren.