Runners
Multi-platform Docker builds
Build linux/amd64 and linux/arm64 images natively on their own architecture and push a single manifest list.
Specifications
- Strategy
- Native per-arch, no QEMU
- Output
- OCI manifest list
- Speedup vs QEMU
- 5× – 40×
Runner labels
runnerhut-docker-builderrunnerhut-docker-builder-arm
There are two ways to produce a multi-arch image. One emulates arm64 on an x64 host with QEMU and is catastrophically slow for anything that compiles. The other builds each architecture on its own hardware and stitches the results into a manifest list.
yaml
jobs: build: strategy: matrix: include: - platform: linux/amd64 runner: runnerhut-8vcpu-ubuntu-2404 - platform: linux/arm64 runner: runnerhut-8vcpu-ubuntu-2404-arm runs-on: ${{ matrix.runner }} steps: - uses: docker/build-push-action@v6 with: platforms: ${{ matrix.platform }} outputs: type=image,push-by-digest=true merge: needs: build runs-on: runnerhut-2vcpu-ubuntu-2404 steps: - run: docker buildx imagetools create -t ghcr.io/acme/api:latest \ ghcr.io/acme/api@${{ needs.build.outputs.digest }}Your next build could be twice as fast, at half the price
Start free. Migrating away is the same one line, and we publish that diff too.