How do you build Multi-Architecture Docker Images (amd64, arm64) using Docker Buildx?
❓ Interview Prompt: Explain Docker Buildx, QEMU emulation, multi-arch manifest lists, and building amd64/arm64 images in CI/CD pipelines.
Modern infrastructure spans multiple CPU architectures — AWS Graviton (arm64) for cost savings and x86 (amd64) for traditional workloads. Multi-arch images allow a single docker pull to automatically download the correct binary for the host's architecture.
How Multi-Arch Images Work:
A Manifest List (OCI Image Index) is a single image tag pointing to multiple architecture-specific image manifests. Docker's client automatically selects the correct one for the host CPU.
Docker Buildx:
Buildx is Docker's CLI plugin for multi-platform builds. It supports two build strategies:
docker buildx create. Much faster for large builds.Publish a Manifest List:
Building with --platform linux/amd64,linux/arm64 and --push automatically creates and pushes a manifest list to the registry.
Code Implementation Example
# Install QEMU emulators for cross-architecture builds
docker run --privileged --rm tonistiigi/binfmt --install all
# Create a multi-platform builder instance
docker buildx create --name multibuilder --driver docker-container --use
docker buildx inspect --bootstrap
# Build for both amd64 and arm64, push manifest list to registry
docker buildx build \
--platform linux/amd64,linux/arm64 \
--tag myuser/myapp:v1.2.3 \
--tag myuser/myapp:latest \
--push \
.
# Verify the manifest list
docker manifest inspect myuser/myapp:v1.2.3
# Shows both amd64 and arm64 image digests
# In GitHub Actions CI:
# - uses: docker/build-push-action@v5
# with:
# platforms: linux/amd64,linux/arm64
# push: trueUse Docker Buildx with --platform linux/amd64,linux/arm64 to publish manifest lists — enables AWS Graviton cost savings without separate image tags per architecture.