はじめに
この実験では、docker manifest inspect コマンドを使用してイメージマニフェストを表示する方法を学びます。まず、マルチアーキテクチャの Docker イメージ、具体的には alpine イメージを取得し、Docker が異なるアーキテクチャ間でイメージを扱う方法を理解します。
イメージの取得後、docker manifest inspect を使用して、マルチアーキテクチャイメージに関連付けられたマニフェストリストを調べます。次に、そのリスト内の特定のイメージマニフェストを調べて詳細を掘り下げ、最後に docker manifest inspect コマンドの詳細出力オプションを探索して、イメージマニフェストの詳細を包括的に理解します。
マルチアーキテクチャイメージを取得する
このステップでは、マルチアーキテクチャの Docker イメージを取得する方法を学びます。マルチアーキテクチャイメージとは、異なるアーキテクチャ(amd64、arm64 など)で使用できる単一のイメージタグです。マルチアーキテクチャイメージを取得すると、Docker は自動的にシステムのアーキテクチャに適したイメージレイヤーを選択します。
軽量な Linux ディストリビューションで、Docker コンテナで一般的に使用される alpine イメージを取得します。alpine イメージはマルチアーキテクチャイメージとして利用可能です。
alpine イメージを取得するには、ターミナルを開き、次のコマンドを実行します。
docker pull alpine
このコマンドは、Docker に Docker Hub から alpine イメージの最新バージョンをダウンロードするよう指示します。alpine はマルチアーキテクチャイメージであるため、Docker は LabEx VM のアーキテクチャに適したイメージレイヤーをダウンロードします。
次のような出力が表示され、Docker がイメージを取得していることがわかります。
Using default tag: latest
latest: Pulling from library/alpine
... (output showing download progress)
Digest: sha256:...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
Digest の行は、あなたのアーキテクチャ用に取得された特定のイメージマニフェストの一意の識別子を示しています。
コマンドが完了すると、alpine イメージは LabEx VM 上で利用可能になり、コンテナを実行する準備ができます。
マルチアーキテクチャイメージのマニフェストリストを調査する
前のステップでは、alpine イメージを取得しました。alpine はマルチアーキテクチャイメージであるため、タグ alpine:latest は実際には マニフェストリスト を指します。マニフェストリストとは、それぞれ異なるアーキテクチャ用のイメージマニフェストのリストです。マルチアーキテクチャイメージを取得するとき、Docker はマニフェストリストを使用してシステムに適したイメージマニフェストを見つけます。
alpine:latest イメージのマニフェストリストを表示するには、docker manifest inspect コマンドを使用できます。このコマンドを使用すると、イメージマニフェストまたはマニフェストリストの詳細を表示できます。
ターミナルで次のコマンドを実行します。
docker manifest inspect alpine:latest
このコマンドは、alpine:latest イメージのマニフェストリストを表す JSON ドキュメントを出力します。出力には manifests のリストが表示され、それぞれが異なるアーキテクチャ(amd64、arm64、arm/v7 など)に対応しています。リスト内の各マニフェストには、platform(アーキテクチャと OS)や digest(特定のアーキテクチャのイメージマニフェストの一意の識別子)などの詳細が含まれています。
次のような出力が表示されます(正確なダイジェストとマニフェストの数は異なる場合があります)。
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 528,
"digest": "sha256:...",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 528,
"digest": "sha256:...",
"platform": {
"architecture": "arm",
"os": "linux",
"variant": "v6"
}
},
...
]
}
この出力は、alpine:latest が実際には様々なアーキテクチャ用のマニフェストを含むマニフェストリストであることを確認しています。これが、マルチアーキテクチャタグを使用するときに Docker がシステムに適した特定のイメージを取得する方法です。
リスト内の特定のイメージマニフェストを調査する
前のステップでは、alpine:latest のマニフェストリストを調べました。このリストには複数のエントリが含まれており、それぞれが異なるアーキテクチャ用の特定のイメージマニフェストを指しています。では、これらの特定のイメージマニフェストの 1 つを調べてみましょう。
特定のマニフェストを調べるには、そのダイジェストが必要です。docker manifest inspect alpine:latest の出力から、あなたの LabEx VM のアーキテクチャ(amd64)に一致する digest を見つけます。ダイジェストは sha256:... のようになります。
amd64 マニフェストのダイジェストが手に入ったら、docker manifest inspect コマンドを使用して、イメージ名とダイジェストを @ 記号で区切って指定することで、そのマニフェストを調べることができます。
YOUR_AMD64_DIGEST を前のステップの出力で見つけた amd64 プラットフォームの実際のダイジェストに置き換えます。
docker manifest inspect alpine@YOUR_AMD64_DIGEST
たとえば、amd64 のダイジェストが sha256:f70734b6a266dcb51c52a820c34f3204cc6897445f6510b7a5be74d30a72f227 だった場合、コマンドは次のようになります。
docker manifest inspect alpine@sha256:f70734b6a266dcb51c52a820c34f3204cc6897445f6510b7a5be74d30a72f227
このコマンドは、amd64 アーキテクチャ用の特定のイメージマニフェストを表す JSON ドキュメントを出力します。このマニフェストには、イメージレイヤー(それぞれのダイジェストで識別される)とイメージ構成(同じくダイジェストで識別される)に関する詳細が含まれています。
次のような出力が表示されます。
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1510,
"digest": "sha256:..."
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 2803897,
"digest": "sha256:..."
}
]
}
この出力は、単一のイメージマニフェストの構造を示しており、特定のアーキテクチャ用のイメージを構成する構成とレイヤーがリストされています。
詳細出力でマニフェストを調査する
前のステップでは、マニフェストリストと特定のイメージマニフェストを調べました。docker manifest inspect のデフォルト出力は、マニフェストまたはマニフェストリストの概要を提供します。イメージの完全な構成を含むより詳細な情報を取得するには、--verbose フラグを使用できます。
alpine:latest のマニフェストリストを再度調べましょうが、今回は --verbose フラグを使用します。これにより、マニフェストリストが表示され、リスト内の各マニフェストについて、完全な構成詳細も表示されます。
ターミナルで次のコマンドを実行します。
docker manifest inspect --verbose alpine:latest
このコマンドは、より詳細な JSON ドキュメントを出力します。manifests リスト内の各エントリには、Config という追加のフィールドが表示されます。この Config フィールドには、特定のアーキテクチャ用のイメージの完全な構成が含まれており、エントリポイント、コマンド、環境変数、作業ディレクトリなどの詳細が含まれます。
次のような出力が表示されます(Config セクションの正確な詳細は異なる場合があります)。
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 528,
"digest": "sha256:...",
"platform": {
"architecture": "amd64",
"os": "linux"
},
"Config": {
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Entrypoint": [
"/bin/sh"
],
"Cmd": null,
"WorkingDir": "/",
...
}
},
...
]
}
--verbose フラグを使用すると、マニフェストリスト内のイメージの詳細な構成を確認できるため、デバッグや特定のイメージの設定方法を理解するのに役立ちます。
まとめ
この実験では、docker manifest inspect コマンドを使用してイメージマニフェストを表示する方法を学びました。まず、マルチアーキテクチャイメージである alpine を取得し、単一のタグが異なるアーキテクチャ用のイメージを表すことができることを理解しました。
次に、docker manifest inspect を使用して、マルチアーキテクチャイメージに関連付けられたマニフェストリストを表示しました。このリストには、様々なアーキテクチャに利用可能なイメージマニフェストの詳細が記載されています。最後に、リスト内の特定のイメージマニフェストを調べる方法と、詳細出力オプションを使用してより詳細な情報を取得する方法を探りました。



