docker buildx build | Docker Docs
--push
は --output=type=registry
と等価で、これは --output=type=image,push=true
のショートカット。
つまりimageとmanifestを作成して、registryにpushまでやってくれる。
マルチアーキテクチャのイメージに個別に名前をつけたい場合(あまりないと思うが…)
上記でだいたい事足りるのだが、イメージ名称をどうしてもつけたい場合以下のように手動でいろいろやる
Dockerfile
利用できる変数は Dockerfile reference | Docker Docs を参照
docker build時にecho
や apk
などを実行するタイミングで exec format error
になる
docker buildx build --platform
でplatformを指定しているのに、なんでArchitecture不一致のエラーが出るのか??
#4 [1/6] FROM public.ecr.aws/docker/library/alpine:3.19@sha256:af4785ccdbcd5cde71bfd5b93eabd34250b98651f19fe218c91de6c8d10e21c5
#4 sha256:af4785ccdbcd5cde71bfd5b93eabd34250b98651f19fe218c91de6c8d10e21c5 1.64kB / 1.64kB done
#4 sha256:cc8129666469e0512c44e1c1be9710238b05d07e91401753972d2c3ae1855655 528B / 528B done
#4 sha256:15a7f89014217cecb2385dd28c17e61aac6c04e684a364eff2e2a52cd012bda9 1.49kB / 1.49kB done
#4 sha256:d4f2d2bd5ed999e04bfbfb910f14154b488ad32abf053954bff805f47fc3ad1e 0B / 3.36MB 0.1s
#4 extracting sha256:d4f2d2bd5ed999e04bfbfb910f14154b488ad32abf053954bff805f47fc3ad1e
#4 sha256:d4f2d2bd5ed999e04bfbfb910f14154b488ad32abf053954bff805f47fc3ad1e 3.36MB / 3.36MB 0.2s done
#4 extracting sha256:d4f2d2bd5ed999e04bfbfb910f14154b488ad32abf053954bff805f47fc3ad1e 0.1s done
#4 DONE 0.4s
#6 [2/6] RUN echo "I am running on linux/amd64, building for linux/arm64" > /log
#6 0.193 exec /bin/sh: exec format error
A. 実行環境にQEMUがインストールされていなかったため
ERROR: failed to solve: process “/bin/sh · Issue #1986 · docker/buildx · GitHub や Multi-platform images | Docker Docs にあるように、QEMU がインストールされている必要がある。 これにより、異なるArchitectureの挙動をemulateできるようになる
tonistiigi/binfmt をprivilegedで実行してインストールする。