Manifesty Docker popisují vrstvy uvnitř obrázku. Manifest umožňuje přesné srovnání dvou obrázků, i když mají přiřazeny různé značky.
Manifesty jsou vyjádřeny v JSON a obsahují informace o vrstvách a architektuře obrázku. Klient Docker používá manifesty ke zjištění, zda je obrázek kompatibilní s aktuálním zařízením. Tyto informace pak použije k určení, jak spustit nové kontejnery.
Formát manifestu
Schéma manifestu je aktuálně ve verzi 2. Úplný soubor deklaruje svou verzi schématu a poté seznam položek manifestu dostupných pro obrázek. Každá položka představuje jinou variantu obrázku, například x86 a ARM64.
Manifest libovolného obrázku můžete zobrazit pomocí docker manifest inspect
příkaz. To funguje jak s místními obrazy, tak s obrazy uloženými ve vzdáleném registru, jako je Docker Hub.
docker manifest inspect my-image:latest
Manifest je seznam vrstev zahrnutých v obrázku. Můžete vidět hash obsahu vrstvy a její celkovou velikost.
Pokud přidáte --verbose
vlajky, získáte o obrázku ještě více informací. To zahrnuje značku obrázku (v Ref
pole), jeho architekturu a operační systém.
Docker ve výchozím nastavení nenačte podrobnosti manifestu z nezabezpečených registrů. Pokud potřebujete použít nesprávně zabezpečený registr, přidejte --insecure
příznak do vašeho docker manifest
příkazy.
Manifesty a budovy s více oblouky
Historicky Docker nepodporoval více architektur obrázků. Obrázky bylo možné použít pouze na strojích se stejnou architekturou, na které byly postaveny. To se rychle ukázalo jako omezující, protože Docker našel více využití v serverových prostředích a na novějších strojích založených na ARM.
Kromě toho, že umožňují jedinečnou identifikaci obrázků, manifesty usnadňují sestavení více architektur. Pokud si prohlédnete obrázek, který podporuje více architektur, uvidíte mírně odlišný výstup manifestu:
docker manifest inspect php:latest
Spuštěním výše uvedeného příkazu se zobrazí manifest pro oficiální obrázek PHP Docker. Ze snímku obrazovky můžete vidět, že je k dispozici několik možností platformy, včetně AMD64 a ARM. Zkrátili jsme úplný seznam, který ve skutečnosti obsahuje osm různých podporovaných architektur.
Manifesty umožňují autorům obrázků inzerovat podporu pro více architektur pod jednou značkou obrázku. Klient Docker vybere vhodnou verzi obrazu pro svou platformu na základě možností v seznamu. Očekává se, že autoři budou seskupovat pouze obrázky, které nabízejí stejnou funkcionalitu – nemělo by docházet k žádným změnám nad rámec cílové architektury nebo operačního systému.
Každá architektura v seznamu odkazuje na jinou manifestu prostřednictvím digest
pole. Odkazovaný manifest bude běžný soubor s jednou architekturou. Docker porovná aktuální platformu se správným manifestem s jedním obloukem a poté tento soubor načte, aby určil konečný seznam vrstev obrázků.
Pomocí docker manifest
můžete ručně vytvářet obrazy s více architekturou příkaz. Vytvořte každý z jednotlivých obrázků a vložte je do registru. Poté použijte docker manifest create
příkaz ke spojení obrázků do nového sdíleného manifestu pod jedinou značkou.
# 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
Pomocí manifest create
pomocí --amend
flag umožňuje sloučit více nezávislých manifestů dohromady. Konečný manifest je poté odeslán do Docker Hub s latest
štítek. Uživatelé AMD64 a ARM budou moci oba vytvářet kontejnery z tohoto obrazu.
Ruční sestavování víceobloukových obrázků není povinné. Můžete použít buildx
příkaz místo toho značně zjednodušit proces.
docker buildx build --platform linux/amd64,linux/arm64/v8 --tag my-image:latest
Výsledkem tohoto jediného příkazu je obraz, který funguje na platformách AMD64 i ARM64. Pod pokličkou stále vytváří víceobloukový seznam manifestů, takže je užitečné porozumět vnitřnímu fungování toho, jak se obrázky propojují.
Anotování manifestů
Docker vám umožňuje ručně přepsat data manifestu prostřednictvím anotací. Mezi podporovaná pole patří informace o architektuře a operačním systému.
Použijte docker manifest annotate
příkaz k nastavení anotací. Pokud anotujete obrázek s jednou architekturou, zadejte značku obrázku, která na něj odkazuje. U obrázků s více oblouky budete potřebovat značku celkového obrázku i značku jednotlivého manifestu v seznamu manifestů s více oblouky.
docker manifest annotate my-image:latest my-image:amd64 --os-version linux
Tento příkaz označí AMD64 verzi my-image:latest
image jako kontejner založený na Linuxu.
Anotace není často nutné nastavovat ručně. Obvykle jsou automaticky odvozeny z prostředí sestavení. Můžete použít annotate
příkaz k přidání chybějících polí nebo změně konfigurace obrázku v budoucnu.
Přehled
Manifesty Docker popisují vrstvy obrázku a architektury, které podporuje. Manifest může být buď jednoduchá architektura, podporující konkrétní platformu, nebo multi-architektura. V druhém případě soubor obsahuje seznam odkazů na manifesty s jedním obloukem, které obsahuje.
Ruční interakce s manifesty by měla být vzácná, ale je možná pomocí docker manifest
velitelská skupina. Nyní je běžnější automatizovat sestavení více oblouků pomocí Buildx, které nabízí zjednodušené manifestní sestavení.