🐳 One Build, All Architectures
Intel Mac, Apple Silicon, ARM servers, AMD servers — different architectures. Docker Buildx builds for all from a single machine.
🔧 Setup Buildx
# Create new builder instance (supports multiple platforms) docker buildx create --name multiarch --use # Bootstrap builder docker buildx inspect --bootstrap # Verify platforms docker buildx ls # Build multi-platform image docker buildx build \ --platform linux/amd64,linux/arm64,linux/arm/v7 \ -t myapp:latest \ --push .
🎯 Dockerfile Best Practices
FROM --platform=$BUILDPLATFORM golang:1.21 AS builder ARG TARGETOS TARGETARCH WORKDIR /app COPY . . RUN GOOS=$TARGETOS GOARCH=$TARGETARCH go build -o app FROM alpine:latest COPY --from=builder /app/app /app CMD ["/app"] # --platform=$BUILDPLATFORM: use native platform for build stage # TARGETOS/TARGETARCH: passed automatically by Buildx
✅ GitHub Actions Integration
name: Build Multi-Platform
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v4
with:
platforms: linux/amd64,linux/arm64
push: true
tags: user/myapp:latest
💡 Tips
- Use QEMU for emulation (slower) or native builders (faster)
- Combine with GitHub Actions self-hosted runners for each arch
- Test each platform before pushing multi-arch manifest
- Use –provenance=true for SBOM attestation
“Users on Apple Silicon couldn’t run our images. One Buildx command created ARM64 builds. Now everyone can run. Zero user complaints. Universal images are the future.”
