はじめに
この実験では、マルチアーキテクチャイメージを作成するために不可欠な Docker マニフェストリストの管理方法を学びます。異なるプラットフォーム用のイメージを組み合わせてマニフェストリストを作成するプロセス、docker manifest inspect コマンドを使用してその存在を検証する方法、そして最後に docker manifest rm コマンドを使用してマニフェストリストを削除する方法を説明します。この実践的な演習を通じて、Docker ワークフロー内でマニフェストリストを扱う実際の経験を積むことができます。
マニフェストリストを作成する
このステップでは、Docker でマニフェストリストを作成する方法を学びます。マニフェストリストはイメージマニフェストのリストで、単一のイメージ名を使用して異なるアーキテクチャやオペレーティングシステム用のイメージを参照できるようにします。これはマルチアーキテクチャイメージを構築する際に特に有用です。
まず、マニフェストリストの作成に使用する 2 つの異なるイメージを取得しましょう。amd64 と arm64 アーキテクチャ用の alpine イメージを使用します。
docker pull alpine:latest
docker pull --platform arm64 alpine:latest
最初のコマンドは、現在のアーキテクチャ(おそらく amd64)用の alpine:latest イメージを取得します。2 番目のコマンドは、明示的に arm64 アーキテクチャ用の alpine:latest イメージを取得します。
これで、docker manifest create コマンドを使用してマニフェストリストを作成できます。構文は docker manifest create TARGET_IMAGE SOURCE_IMAGE [SOURCE_IMAGE...] です。amd64 と arm64 用の alpine:latest イメージを含む my-alpine:latest という名前のマニフェストリストを作成します。
docker manifest create my-alpine:latest alpine:latest alpine:latest --amend alpine:latest --platform arm64
このコマンドでは:
my-alpine:latestは、作成する新しいマニフェストリストの名前です。alpine:latestは、最初のソースイメージ(デフォルトのアーキテクチャ用)です。--amend alpine:latest --platform arm64は、arm64プラットフォーム用のalpine:latestイメージをマニフェストリストに追加します。
このコマンドを実行すると、ローカルにマニフェストリストが作成されます。ただし、まだレジストリにプッシュされていません。後のステップでプッシュします。
マニフェストリストの存在を確認する
前のステップで、my-alpine:latest という名前のマニフェストリストを作成しました。ここでは、このマニフェストリストが正常に作成され、ローカルに存在することを確認します。
docker manifest inspect コマンドを使用して、マニフェストリストの詳細を表示できます。このコマンドは、マニフェストリストが存在する場合、その内容を JSON 形式で出力します。
docker manifest inspect my-alpine:latest
マニフェストリスト my-alpine:latest が正常に作成されていれば、マニフェストリストを説明する JSON 出力が表示され、さまざまなアーキテクチャ用の参照イメージが含まれます。マニフェストリストが存在しない場合、コマンドはエラーを返します。
出力には、マニフェストリストに関する情報、たとえばスキーマバージョン、メディアタイプ、および含まれる各アーキテクチャのマニフェストのリストが表示されます。amd64 と arm64 の両方のアーキテクチャのエントリが表示され、これらのプラットフォーム用のイメージを参照してマニフェストリストが正しく作成されたことが確認できます。
マニフェストリストを削除する
前のステップで、my-alpine:latest という名前のマニフェストリストを作成し、その存在を確認しました。ここでは、このマニフェストリストを削除する方法を学びます。
マニフェストリストを削除するには、docker manifest rm コマンドに続けてマニフェストリストの名前を指定します。
docker manifest rm my-alpine:latest
このコマンドは、マニフェストリスト my-alpine:latest へのローカル参照を削除します。このコマンドはマニフェストリスト自体のみを削除し、マニフェストリストが参照する個々のイメージは削除しません。先ほど取得した amd64 と arm64 用の alpine:latest イメージは、依然としてシステム上に残ります。
コマンドを実行した後、マニフェストリストのタグが削除されたことを示す出力が表示されるはずです。
マニフェストリストが削除されたことを確認する
前のステップで、my-alpine:latest という名前のマニフェストリストを削除しました。ここでは、マニフェストリストが正常に削除され、ローカルに存在しなくなったことを確認します。
docker manifest inspect コマンドを使用して、マニフェストリストを再度調べることができます。マニフェストリストが正常に削除されていれば、このコマンドはマニフェストリストが見つからないことを示すエラーを返すはずです。
docker manifest inspect my-alpine:latest
マニフェストリストを削除した後にこのコマンドを実行すると、no such manifest: docker.io/library/my-alpine:latest のようなエラーメッセージが表示されるはずです。これにより、マニフェストリストがローカルの Docker 環境から削除されたことが確認できます。
まとめ
この実験では、Docker のマニフェストリストを作成し管理する方法を学びました。まず、異なるアーキテクチャ用のイメージを取得し、docker manifest create コマンドを使用してそれらを単一のマニフェストリストにまとめ、マルチアーキテクチャイメージの構築方法を実演しました。
作成後、docker manifest inspect コマンドを使用してマニフェストリストの存在を確認しました。最後に、docker manifest rm コマンドを使用してマニフェストリストを削除する方法を学び、その削除を確認しました。これにより、Docker でのマニフェストリストの基本的なライフサイクル管理を網羅しました。



