Docker for Mac でコンテナイメージをクロスビルドする
これまで Tinker Board 用のコンテナイメージは実機上でビルドしてきたのだけど、日常的に使っている Mac でも手軽にビルドする方法はないかを調べてみたところ、Docker for Mac で簡単にビルドできることが分かった。
具体的には Arm 向けのイメージを Docker Hub などから Pull してきて、それをベースイメージに指定して新しいコンテナイメージをビルドするだけ。ドキュメントによると Docker for Mac は異なるアーキテクチャ向けにビルドされたバイナリーを透過的に QEMU 経由で実行してくれるらしい。これは binfmt_misc を使って実現しているとのこと。少し前に Cloudflare が同じように binfmt_misc を使って Go のコードをそのまま実行できるようにする記事が出ていたのであわせて読みたい。
今のところ OpenJDK を扱うコンテナイメージのビルド時に JRE がクラッシュする不具合が見つかっているものの、それ以外のコンテナイメージは全て Docker for Mac 上でビルドできている。とても便利。