Dockerマニフェストは、イメージ内のレイヤーを記述します。マニフェストを使用すると、異なるタグが割り当てられている場合でも、2つの画像を正確に比較できます。
マニフェストはJSONで表現され、画像のレイヤーとアーキテクチャに関する情報が含まれています。 Dockerクライアントはマニフェストを使用して、イメージが現在のデバイスと互換性があるかどうかを判断します。次に、その情報を使用して、新しいコンテナを開始する方法を決定します。
マニフェストスキーマは現在バージョン2です。完全なファイルはそのスキーマバージョンを宣言し、次にイメージで使用可能なマニフェストエントリのリストを宣言します。各エントリは、x86やARM64などの画像のさまざまなバリエーションを表します。
docker manifest inspect
を使用して、任意の画像のマニフェストを表示できます 指図。これは、ローカルイメージとDockerHubなどのリモートレジストリに保存されているイメージの両方で機能します。
docker manifest inspect my-image:latest
マニフェストは、画像に含まれるレイヤーのリストです。レイヤーのコンテンツのハッシュと全体のサイズを確認できます。
--verbose
を追加した場合 フラグを立てると、画像に関するさらに多くの情報が得られます。これには、画像のタグが含まれます(Ref
内) フィールド)、そのアーキテクチャ、およびそのオペレーティングシステム。
Dockerは、デフォルトでは、安全でないレジストリからマニフェストの詳細をロードしません。不適切に保護されたレジストリを使用する必要がある場合は、--insecure
を追加してください docker manifest
にフラグを立てます コマンド。
これまで、Dockerは複数のイメージアーキテクチャをサポートしていませんでした。イメージは、それらが構築されたものと同じアーキテクチャのマシンでのみ使用できました。 Dockerがサーバー環境や新しいARMベースのマシンでより多くの用途を見つけたため、これはすぐに制限を示しました。
マニフェストは、画像の一意の識別を可能にするだけでなく、マルチアーキテクチャの構築を容易にします。複数のアーキテクチャをサポートする画像を調べると、微妙に異なるマニフェスト出力が表示されます。
docker manifest inspect php:latest
上記のコマンドを実行すると、公式のPHPDockerイメージのマニフェストが表示されます。スクリーンショットから、AMD64やARMなどのいくつかのプラットフォームオプションが利用可能であることがわかります。サポートされている8つの異なるアーキテクチャを実際に含む完全なリストを切り捨てました。
マニフェストを使用すると、画像の作成者は1つの画像タグで複数のアーキテクチャのサポートを宣伝できます。 Dockerクライアントは、リスト内のオプションに基づいて、プラットフォームに適したイメージバージョンを選択します。作成者は、同一の機能を提供するイメージのみをグループ化することが期待されます。ターゲットのアーキテクチャまたはオペレーティングシステム以外に変更を加えることはできません。
リスト内の各アーキテクチャは、別のを参照しています。 digest
を介してマニフェスト 分野。参照されるマニフェストは、通常の単一アーキテクチャファイルになります。 Dockerは、現在のプラットフォームを適切な単一アーチマニフェストと照合し、そのファイルを読み込んで、画像レイヤーの最終的なリストを決定します。
docker manifest
を使用して、マルチアーキテクチャイメージを手動で作成できます 指図。個々のイメージをそれぞれ作成し、レジストリにプッシュします。次に、docker manifest create
を使用します 1つのタグの下で画像を新しい共有マニフェストに結合するコマンド。
# 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
manifest create
の使用 --amend
を使用 フラグを使用すると、複数の独立したマニフェストをマージできます。次に、最終的なマニフェストがlatest
を使用してDockerHubにプッシュされます。 鬼ごっこ。 AMD64とARMの両方のユーザーは、このイメージからコンテナーを作成できます。
マルチアーチ画像を手動で組み立てる必要はありません。 buildx
を使用できます 代わりに、プロセスを大幅に簡素化するコマンド。
docker buildx build --platform linux/amd64,linux/arm64/v8 --tag my-image:latest
この単一のコマンドにより、AMD64プラットフォームとARM64プラットフォームの両方で機能するイメージが生成されます。内部的には、まだ複数のアーチのマニフェストリストが作成されているため、画像がどのようにリンクされるかについての内部の仕組みを理解するのに役立ちます。
Dockerを使用すると、アノテーションを使用してマニフェストデータを手動でオーバーライドできます。サポートされているフィールドには、アーキテクチャとオペレーティングシステムの情報が含まれます。
docker manifest annotate
を使用する 注釈を設定するコマンド。単一のアーキテクチャの画像に注釈を付ける場合は、それを参照する画像タグを指定します。マルチアーチ画像の場合、全体的な画像タグと、マルチアーチマニフェストリスト内の個々のマニフェストのタグの両方が必要になります。
docker manifest annotate my-image:latest my-image:amd64 --os-version linux
このコマンドは、AMD64バージョンのmy-image:latest
をマークします Linuxベースのコンテナとしてのイメージ。
多くの場合、注釈を手動で設定する必要はありません。これらは通常、ビルド環境から自動的に推測されます。 annotate
を使用できます 不足しているフィールドを追加したり、将来的に画像構成を変更したりするコマンド。
Dockerマニフェストは、イメージのレイヤーとそれがサポートするアーキテクチャを記述します。マニフェストは、特定のプラットフォームをサポートする単一のアーキテクチャ、またはマルチアーキテクチャのいずれかです。後者の場合、ファイルには、組み込まれている単一アーチマニフェストへの参照のリストが含まれています。
マニフェストを手動で操作することはまれですが、docker manifest
を使用すると可能です。 コマンドグループ。簡素化されたマニフェストアセンブリエクスペリエンスを提供するBuildxを介してマルチアーチビルドを自動化することがより一般的になりました。