Skip to content

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-builder
  • runnerhut-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 }}
Build per-arch by digest, then merge

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.