Docker Buildx — Advanced Building With Multi-Platform Support
What Is Docker Buildx in Simple Terms?
Buildx is the advanced Docker build tool that exposes all BuildKit features through the CLI. The most useful feature is multi-platform building — you can build an image for both x86 (Intel/AMD) and ARM64 (Apple M1/M2, AWS Graviton) from a single command on a single machine, and Docker publishes a manifest that automatically serves the right architecture to each platform.
Bash
# Regular docker build — one platformdocker build -t payment-api:v3.1.0 .# Builds for your current machine's architecture only # Docker buildx — multiple platformsdocker buildx build \ --platform linux/amd64,linux/arm64 \ -t registry.razorpay.in/payment-api:v3.1.0 \ --push .# Builds for both architectures# Pushes a manifest list that serves the right image per platform# AWS Graviton instances automatically get the arm64 image# Standard x86 servers automatically get the amd64 imageSetting Up Buildx
Bash
# buildx is included with Docker Desktop and Docker Engine 20.10+docker buildx version# github.com/docker/buildx v0.12.0 # Create a new builder (for multi-platform support)docker buildx create \ --name multiarch-builder \ --driver docker-container \ --use # Inspect the builderdocker buildx inspect --bootstrap# Shows: supported platforms: linux/amd64, linux/arm64, linux/arm/v7... # List all buildersdocker buildx ls # Use a specific builderdocker buildx use multiarch-builderMulti-Platform Build in GitHub Actions
YAML
* name: Set up QEMU (for cross-platform emulation) uses: docker/setup-qemu-action@v3 * name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 * name: Build and push multi-platform uses: docker/build-push-action@v5 with: platforms: linux/amd64,linux/arm64 push: true tags: registry.razorpay.in/payment-api:v3.1.0 cache-from: type=gha cache-to: type=gha,mode=maxBuildKit Features Through Buildx
Bash
# Secret mountsdocker buildx build \ --secret id=github_token,src=$HOME/.secrets/github-token \ -t myapp:latest . # SSH mounts for private reposdocker buildx build \ --ssh default=$SSH_AUTH_SOCK \ -t myapp:latest . # Registry cache exportdocker buildx build \ --cache-from type=registry,ref=registry.razorpay.in/payment-api:cache \ --cache-to type=registry,ref=registry.razorpay.in/payment-api:cache,mode=max \ -t registry.razorpay.in/payment-api:v3.1.0 \ --push . # Bake — build multiple images in parallel from a config filedocker buildx bake# Uses docker-bake.hcl or docker-compose.yml to define build targetsPLACEMENT PRO TIP**Tip:** Always use `docker buildx build` in CI/CD pipelines instead of `docker build`. Buildx gives you better cache support (cache-from/cache-to with registry), multi-platform capability when needed, and all BuildKit features like secret mounts. The commands are nearly identical — just add `buildx` after `docker`.