マルチアーキイメージとは?1 つのタグ、多くの CPU
マルチアーキイメージは、あなたの CPU に合った正しいイメージ - Intel サーバーなら amd64、Apple Silicon なら arm64 - に manifest list を介してさりげなく解決される 1 つのタグです。
docker pull ubuntu がノート PC でも異なる CPU のサーバーでもそのまま動くことに気づいたかもしれません。それがマルチアーキイメージです: manifest list がアーキテクチャごとに別々のイメージを指す単一の参照です。ランタイムは一致するものを透過的に選択します。
manifest list
1 つのイメージではなく、タグは manifest list(image index とも呼ばれる)を指します。各エントリは platform(linux/amd64、linux/arm64)と、それ向けに build されたイメージの digest を指定します。
選択の仕組み
pull すると、client は自身の platform を報告します。registry は manifest を提供し、client は一致するエントリを選びます。常に同じタグを入力すれば、正しいビットが自動的に届きます。
build する
docker buildx build --platform linux/amd64,linux/arm64 ... --push を使います。buildx は各アーキテクチャを build し、あなたのタグの下に manifest list を公開します。
なぜ欲しいのか
- arm ノート PC の開発者と amd64 の CI が同じタグを使える。
- arm64 のクラウドインスタンスは多くのワークロードでより安価。
- deploy 時にアーキ固有のタグを選ぶ条件分岐が不要。
CI におけるマルチアーキ
すべてのアーキテクチャをエミュレーション下で 1 つの runner で build するのは遅いです。各アーキテクチャをネイティブ runner で build する方がはるかに高速です。Latchkey はネイティブな arm と x86 の runner を提供するため、マルチアーキ build はエミュレーションのオーバーヘッドを回避します。
重要なポイント
- マルチアーキイメージは、アーキテクチャごとのイメージを指す manifest list です。
- ランタイムは pull 時に一致するアーキテクチャを自動的に選択します。
- buildx で build しましょう。ネイティブ runner が遅いエミュレーションを回避します。