--- /dev/null
+# Based on https://netfuture.ch/2020/05/multi-arch-docker-image-easy/
+#
+# Example: make -f Makefile.docker docker-multiarch
+
+REGISTRY = cznic
+BASETAG = ${REGISTRY}/knot-resolver
+PLATFORMS = linux/amd64,linux/arm/v7,linux/arm64/v8
+
+RELEASE = $(shell git describe --abbrev=0 --exact-match)
+RELTAG = $(shell [ -n "${RELEASE}" ] && echo "-t ${BASETAG}:${RELEASE}" || echo "")
+
+BUILDXDETECT = ${HOME}/.docker/cli-plugins/docker-buildx
+QEMUDETECT = /proc/sys/fs/binfmt_misc/qemu-m68k
+
+docker-multiarch: qemu buildx docker-multiarch-builder
+ docker login
+ docker buildx build --no-cache --builder docker-multiarch --pull --push \
+ --platform ${PLATFORMS} ${RELTAG} ..
+
+qemu: ${QEMUDETECT}
+${QEMUDETECT}:
+ docker pull multiarch/qemu-user-static
+ docker run --privileged multiarch/qemu-user-static --reset -p yes
+ docker ps -a | sed -n 's, *multiarch/qemu-user-static.*,,p' \
+ | (xargs docker rm 2>&1 || \
+ echo "Cannot remove docker container on ZFS; retry after next reboot") \
+ | grep -v 'dataset is busy'
+
+buildx: ${BUILDXDETECT}
+${BUILDXDETECT}:
+ @echo
+# Output of `uname -m` is too different
+ @echo '*** `docker buildx` missing. Install binary for this machine architecture'
+ @echo '*** from `https://github.com/docker/buildx/releases/latest`'
+ @echo '*** to `~/.docker/cli-plugins/docker-buildx` and `chmod +x` it.'
+ @echo
+ @exit 1
+
+docker-multiarch-builder: qemu buildx
+ if ! docker buildx ls | grep -w docker-multiarch > /dev/null; then \
+ docker buildx create --name docker-multiarch && \
+ docker buildx inspect --builder docker-multiarch --bootstrap; \
+ fi
+
+.PHONY: qemu buildx docker-multiarch docker-multiarch-builder
\ No newline at end of file