知らなかったのでメモしておく。
説明や利用方法はこちらの記事にまとまっている。
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: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