Skip to content
Latchkey

マルチアーキイメージとは?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/amd64linux/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 が遅いエミュレーションを回避します。

関連ガイド