知らなかったのでメモしておく。

説明や利用方法はこちらの記事にまとまっている。
Dockerのマルチアーキテクチャイメージについて調べてみた|Developers.IO

・単一のDockerイメージで複数種類のOSやCPUアーキテクチャをサポートさせることができる。
・このイメージを起動させると、Dockerが実行されているホストのアーキテクチャに応じて適切なイメージが自動で選択される。
・Docker Hub上の公式イメージの多くはマルチアーキテクチャをサポートしている。

作成方法は公式ドキュメントに書かれている。
Leverage multi-CPU architecture support|Docker Documentation

Experimental な buildx サブコマンドを使う。Docker Engine 19.03.8 から使える。

Docker for Mac の場合、Settings > Command Line から experimental features を有効にする必要がある。

Settings > Docker Engine で以下も設定する必要もあるかも。私はすでにこうなっていた。

{
  "debug": true,
  "experimental": true
}

前述の公式ドキュメントの通りにやると Docker Hub に masutaka/demo:latest が push される。

https://hub.docker.com/repository/docker/masutaka/demo/tags

masutaka/demo on Docker Hub

※ masutaka/demo:default は $ docker build -t masutaka/demo:default . で普通にビルドした Docker Image。

builder は忘れずに元に戻しておく。

$ docker buildx ls
NAME/NODE    DRIVER/ENDPOINT             STATUS  PLATFORMS
mybuilder    docker-container
  mybuilder0 unix:///var/run/docker.sock running linux/amd64, linux/arm64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
default *    docker
  default    default                     running linux/amd64, linux/arm64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

$ docker buildx use default

$ docker buildx ls
NAME/NODE    DRIVER/ENDPOINT             STATUS  PLATFORMS
mybuilder    docker-container
  mybuilder0 unix:///var/run/docker.sock running linux/amd64, linux/arm64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
default *    docker
  default    default                     running linux/amd64, linux/arm64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6