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.