特定のプラットフォーム用の環境にイメージを記録する
このステップでは、Docker が異なるプラットフォーム用のイメージをどのように扱い、それらとどのようにやり取りするかを探ります。ただし、特定のプラットフォーム用の環境にイメージを明示的に「記録」することは、思ったような標準的な Docker コマンドではありません。Docker イメージは多くの場合、マルチアーキテクチャです。つまり、1 つのイメージタグには、異なる CPU アーキテクチャ(amd64
、arm64
など)用のバリアントが含まれることがあります。イメージを取得すると、Docker は自動的にシステムのアーキテクチャに適したバリアントを選択します。
特定のプラットフォーム用の環境にイメージを「記録」するという概念は、正しいイメージバリアントが利用可能または使用されることを確保することに関係しています。明示的に「記録」するわけではありませんが、ターゲットプラットフォームを指定してイメージを取得することができます。
特定のプラットフォーム用のイメージを取得する方法を実演しましょう。軽量な Linux ディストリビューションである alpine
イメージを取得し、arm64
プラットフォームを指定します。LabEx の仮想マシンはおそらく amd64
ですが、Docker は他のアーキテクチャ用のイメージも取得して保存することができます。
まず、プラットフォームを指定せずに alpine
イメージを取得し、デフォルトの動作を確認しましょう。
docker pull alpine
イメージが取得されていることを示す出力が表示されるはずです。
Using default tag: latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
次に、再度イメージを一覧表示して、alpine
イメージを確認しましょう。
docker images
リストに alpine
が表示されます。
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest ... ... ago ...kB
alpine latest ... ... ago ...MB
次に、--platform
フラグを使用して、arm64
プラットフォーム用の alpine
イメージを取得してみましょう。
docker pull --platform arm64 alpine
arm64
バリアントが取得されていることを示す出力が表示されます。
Using default tag: latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
出力は似ているように見えるかもしれませんが、Docker は arm64
バリアントを取得しています。arm64
マシン上であれば、これがデフォルトになります。amd64
マシン上では、alpine:latest
イメージの amd64
(デフォルトの取得)と arm64
の両方のバリアントがローカルに保存されます。
docker images
はデフォルトでは、一覧表示される各イメージバリアントのプラットフォームを明示的に表示しませんが、Docker は内部でそれらを管理しています。コンテナを実行すると、Docker はホストのアーキテクチャに適したイメージバリアントを使用します。
このステップでは、Docker がマルチアーキテクチャイメージをどのように扱い、--platform
フラグを使用して異なるプラットフォーム用のイメージを明示的に取得できるかを実演しています。