2.2 KiB
🪞 QEMU binfmt Mirror
A mirror of tonistiigi/binfmt hosted on a self-hosted Gitea Container Registry to speed up multi-platform Docker builds in CI/CD pipelines.
Why?
When building Docker images for multiple platforms (e.g. linux/amd64 + linux/arm64) on an amd64-only runner, QEMU emulation is required. The setup-qemu-action pulls tonistiigi/binfmt from Docker Hub on every run — which can take 4–5 minutes depending on network conditions.
By mirroring the image locally, the pull happens at LAN speed and reduces this step to a few seconds.
Usage
In your Gitea Actions workflow, point setup-qemu-action to this mirror:
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
image: git.mrunk.de/mrunknownde/binfmt:latest
Full example workflow with multi-platform build:
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
image: git.mrunk.de/mrunknownde/binfmt:latest
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
cache-binary: true
- name: Build and push
uses: docker/build-push-action@v5
with:
platforms: linux/amd64,linux/arm64
push: true
tags: your-registry/your-image:latest
Keeping the Mirror Up to Date
This repo includes an automated workflow that re-mirrors the image every Monday at 03:00 UTC.
To trigger a manual update:
- Go to Actions in this repository
- Select Mirror QEMU Image
- Click Run workflow
Mirror Workflow
name: Mirror QEMU Image
on:
schedule:
- cron: '0 3 * * 1'
workflow_dispatch:
jobs:
mirror:
runs-on: ubuntu-latest
steps:
- uses: docker/login-action@v3
with:
registry: git.mrunk.de
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_TOKEN }}
- name: Mirror tonistiigi/binfmt
run: |
docker pull tonistiigi/binfmt:latest
docker tag tonistiigi/binfmt:latest git.mrunk.de/mrunknownde/binfmt:latest
docker push git.mrunk.de/mrunknownde/binfmt:latest
Credits
Original image: tonistiigi/binfmt — MIT License