docker buildx でマルチプラットフォームのイメージを作成する

いつのまにかビルド時にランタイム時のターゲットプラットフォームを選択できるようになっていた

昨今は ARM 系(graviton) の EC2 を使用することが多いので、これは助かります。:-)

➜ cat Dockerfile
# syntax=docker/dockerfile:1
FROM alpine:3.16
RUN apk add curl

➜ docker buildx build --platform linux/amd64 -t sample:amd64 .
(... snip ...)
➜ docker buildx build --platform linux/arm64 -t sample:arm64 .
(... snip ...)

➜ docker images | rg sample
sample                                                      arm64     92ff9bc76d35   6 minutes ago   9.88MB
sample                                                      amd64     66864ae4d60a   7 minutes ago   10.2MB

➜ docker inspect 66864ae4d60a --format='{{.Os}}/{{.Architecture}}'
linux/amd64

➜ docker inspect 92ff9bc76d35 --format='{{.Os}}/{{.Architecture}}'
linux/arm64
➜ docker buildx ls
NAME/NODE       DRIVER/ENDPOINT STATUS  BUILDKIT PLATFORMS
default *       docker
  default       default         running 20.10.24 linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
desktop-linux   docker
  desktop-linux desktop-linux   running 20.10.24 linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

macOS Ventura へ homebrew 経由で docker desktop for Mac をインストールする場合は順番に注意

macOS Ventura 13.3.1 での docker desktop for Mac は 1. cask 経由で GUI などのコンポーネントを先行してインストールしてから 2. コマンドツールの docker をインストールする必要があります。

➜ brew install --cask docker
➜ brew install docker
➜ brew install docker-buildx
➜ rm '/opt/homebrew/etc/bash_completion.d/docker'
➜ brew link --overwrite docker 
➜ docker --version
Docker version 20.10.24, build 297e128

cask を先行させずコマンドラインツールの docker を先にインストールすると 23.0.0 がインストールされてしまいます。その場合 docker image build 時に以下のようなメッセージで docker-buildx のインストールを要求されます。将来的には docker-buildx は必須のコンポーネントになってくるようです。

DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
            Install the buildx component to build images with BuildKit:
            https://docs.docker.com/go/buildx/

参考情報