GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Was ist ein Docker-Image-Manifest?

Docker-Manifeste beschreiben die Ebenen in einem Image. Ein Manifest ermöglicht den exakten Vergleich zweier Bilder, auch wenn ihnen unterschiedliche Tags zugewiesen sind.

Manifeste werden in JSON ausgedrückt und enthalten Informationen zu den Ebenen und Architekturen des Bildes. Der Docker-Client verwendet Manifeste, um herauszufinden, ob ein Image mit dem aktuellen Gerät kompatibel ist. Anschließend verwendet es die Informationen, um zu bestimmen, wie neue Container gestartet werden.

Das Manifestformat

Das Manifestschema hat derzeit Version 2. Eine vollständige Datei deklariert ihre Schemaversion und dann eine Liste der für das Image verfügbaren Manifesteinträge. Jeder Eintrag stellt eine andere Variante des Images dar, z. B. x86 und ARM64.

Sie können das Manifest eines beliebigen Images mit docker manifest inspect anzeigen Befehl. Dies funktioniert sowohl mit lokalen Images als auch mit Images, die in einer Remote-Registry wie Docker Hub gespeichert sind.

docker manifest inspect my-image:latest

Das Manifest ist eine Liste der Ebenen, die im Bild enthalten sind. Sie können den Hash des Inhalts der Ebene und ihre Gesamtgröße sehen.

Wenn Sie --verbose hinzufügen Flagge erhalten Sie noch mehr Informationen über das Bild. Dazu gehört das Tag des Bildes (in der Ref Feld), seine Architektur und sein Betriebssystem.

Docker lädt standardmäßig keine Manifestdetails aus unsicheren Registrierungen. Wenn Sie eine nicht ordnungsgemäß gesicherte Registrierung verwenden müssen, fügen Sie --insecure hinzu -Flag in Ihr docker manifest Befehle.

Manifeste und Multi-Arch-Builds

In der Vergangenheit hat Docker mehrere Image-Architekturen nicht unterstützt. Images konnten nur auf Computern mit der gleichen Architektur verwendet werden, auf der sie erstellt wurden. Dies erwies sich schnell als einschränkend, da Docker mehr Verwendung in Serverumgebungen und auf neueren ARM-basierten Maschinen fand.

Manifeste ermöglichen nicht nur die eindeutige Identifizierung von Images, sondern erleichtern auch den Aufbau mehrerer Architekturen. Wenn Sie ein Image untersuchen, das mehrere Architekturen unterstützt, sehen Sie eine etwas andere Manifestausgabe:

docker manifest inspect php:latest

Wenn Sie den obigen Befehl ausführen, wird das Manifest für das offizielle PHP-Docker-Image angezeigt. Sie können dem Screenshot entnehmen, dass mehrere Plattformoptionen verfügbar sind, einschließlich AMD64 und ARM. Wir haben die vollständige Liste gekürzt, die tatsächlich acht verschiedene unterstützte Architekturen enthält.

Mithilfe von Manifesten können Bildautoren die Unterstützung mehrerer Architekturen unter einem Bild-Tag ankündigen. Der Docker-Client wählt basierend auf den Optionen in der Liste die geeignete Image-Version für seine Plattform aus. Es wird erwartet, dass Autoren nur Images gruppieren, die identische Funktionen bieten – es sollten keine Änderungen über die Zielarchitektur oder das Betriebssystem hinaus vorgenommen werden.

Jede Architektur in der Liste verweist auf eine andere über seinen digest manifestieren Feld. Das referenzierte Manifest ist eine reguläre Einzelarchitekturdatei. Docker gleicht die aktuelle Plattform mit dem richtigen Single-Arch-Manifest ab und lädt dann diese Datei, um die endgültige Liste der Bildebenen zu ermitteln.

Sie können Images mit mehreren Architekturen manuell erstellen, indem Sie das docker manifest verwenden Befehl. Erstellen Sie jedes der einzelnen Images und übertragen Sie sie in eine Registrierung. Verwenden Sie dann das docker manifest create Befehl, um die Bilder in einem neuen gemeinsamen Manifest unter einem einzigen Tag zu kombinieren.

# on an AMD64 machine
docker build -t my-image:amd64 .
docker push my-image:amd64

# on an ARM machine
docker build -t my-image:arm .
docker push my-image:arm

# now combine the manifests
docker manifest create my-image:latest 
--amend my-image:x64
--amend my-image:arm
docker manifest push my-image:latest

Verwenden von manifest create mit --amend Mit flag können Sie mehrere unabhängige Manifeste zusammenführen. Das endgültige Manifest wird dann mit dem latest an Docker Hub gepusht Schild. AMD64- und ARM-Benutzer können Container aus diesem Image erstellen.

Das manuelle Zusammenstellen von Multi-Arch-Bildern ist nicht obligatorisch. Sie können den buildx verwenden Befehl, um den Vorgang erheblich zu vereinfachen.

docker buildx build --platform linux/amd64,linux/arm64/v8 --tag my-image:latest

Dieser einzelne Befehl führt zu einem Image, das sowohl auf AMD64- als auch auf ARM64-Plattformen funktioniert. Unter der Haube wird immer noch eine Multi-Arch-Manifestliste erstellt, daher ist es hilfreich, die inneren Abläufe zu verstehen, wie Bilder miteinander verknüpft werden.

Manifeste kommentieren

Mit Docker können Sie Manifestdaten durch Annotationen manuell überschreiben. Zu den unterstützten Feldern gehören Architektur- und Betriebssysteminformationen.

Verwenden Sie die docker manifest annotate Befehl zum Einrichten von Anmerkungen. Wenn Sie ein Bild mit einer einzelnen Architektur kommentieren, geben Sie ein Bild-Tag an, das darauf verweist. Für Multi-Arch-Images benötigen Sie sowohl das allgemeine Image-Tag als auch das Tag des einzelnen Manifests in der Multi-Arch-Manifestliste.

docker manifest annotate my-image:latest my-image:amd64 --os-version linux

Dieser Befehl markiert die AMD64-Version von my-image:latest Image als Linux-basierten Container.

Anmerkungen müssen nicht oft von Hand gesetzt werden. Sie werden normalerweise automatisch aus der Build-Umgebung abgeleitet. Sie können den annotate verwenden Befehl, fehlende Felder hinzuzufügen oder die Bildkonfiguration in Zukunft zu ändern.

Zusammenfassung

Docker-Manifeste beschreiben die Ebenen eines Images und die unterstützten Architekturen. Ein Manifest kann entweder eine einzelne Architektur sein, die eine bestimmte Plattform unterstützt, oder mehrere Architekturen. Im letzteren Fall enthält die Datei eine Liste mit Verweisen auf die enthaltenen Single-Arch-Manifeste.

Manuelle Interaktion mit Manifesten sollte selten sein, ist aber mit dem docker manifest möglich Befehlsgruppe. Es ist jetzt üblicher, Multi-Arch-Builds über Buildx zu automatisieren, das eine vereinfachte Manifest-Assemblierung bietet.


Docker
  1. Was ist Docker (und Linux-Container?)

  2. Datei aus Docker-Image extrahieren?

  3. So verwenden Sie ein Dockerfile zum Erstellen eines Docker-Images

  4. Aktualisieren eines bereitgestellten Containers basierend auf einem Docker-Image

  5. So übertragen Sie Änderungen an einem Docker-Image

Was ist ein Docker-Image-Manifest?

Stellen Sie eine Produktions-Docker-MariaDB-Installation bereit

So reduzieren Sie die Docker-Image-Größe in Docker-Containern

Docker File vs. Docker Compose:Was ist der Unterschied?

Teilen von Docker-Images auf Docker Hub

Was tun, wenn ein Docker-Container sofort beendet wird