マルチプラットフォームイメージビルド

このページには Docekr Buildx によるマルチプラットフォームの Docker イメージのビルド方法について書いてあります。

ホストとは異なるプラットフォーム用の Docker イメージのビルド #

Docker には異なるプラットフォーム向け(たとえば、ホストとは異なる OS や異なる CPU アーキテクチャー向けなど)の Docker イメージをビルドを行うための Docker Buildx というプラグインが実装されています。 ただし、現在は experimental 機能であるため、今後も使えるかどうかはわかりません。

機能的な説明は 公式ドキュメント ( 有志日本語翻訳版) に任せるとして、機能の有効の仕方と簡単なコマンドの使い方を説明します。

機能の対応状況 #

buildx が有効になっているかはコマンドヘルプを見ればわかります。 次のように buildx* と表示されていれば Buildx が使えるはずです。

$ docker -h
...
Management Commands:
  buildx*     Build with BuildKit (Docker Inc., v0.5.1)
...

Docker Engine Version 20.10 #

リリースノートを見ると Buildx が組み込まれるようになっていますので Version 20.10 であれば特に設定なしに使えます。

Docker Engine Version 19.03 以下 #

公式ドキュメントには、次のように記載されています。

Docker Buildx is included in Docker 19.03 and is also bundled with the following Docker Desktop releases. Note that you must enable the ‘Experimental features’ option to use Docker Buildx.

  • Docker Desktop Enterprise version 2.1.0
  • Docker Desktop Edge version 2.0.4.0 or higher You can also download the latest buildx binary from the Docker buildx repository.

Version 19.03 であれば使えそうですが、対応していなければ公式ドキュメントに従って対応が必要そうです。

Docker in dokcer (dind) #

dind については少し状況が違います。 docker:20.10.3-dind や docker:19.03-dind では Buildx は対応していませんでした。 Buildx は QEMU を利用しているため、おそらく dind のイメージに余計なパッケージを入れないために Buildx も入っていないのでしょう。

もし、dind で Buildx を使いたい場合は、 こちらの方が作られている dind イメージが参考になりそうです。

Buildx の使い方 #

使い方については 公式の GitHub リポジトリーのドキュメントを見るのが一番詳しそうです。

いろいろは試していないので、最もシンプルな使い方の例だけ書いておきます。 次の例は armv6 (Raspberry Pi Zero)用に Docker イメージを作る際の最もシンプルなコマンドです (カレントディレクトリーに Dockerfile がある想定) 。

$ docker buildx build --platform linux/arm/v6 .