qemu-user-static (qus) and containers
latest
  • Introduction
  • Context: containers and QEMU
  • Provided container images
  • Tests
  • Development
  • Frequently Asked Questions (FAQ)
  • Other related sources
    • multiarch/qemu-user-static
    • fkrull/docker-qemu-user-static
    • rmoriz/multiarch-test
    • linuxkit/binfmt | docker/binfmt
    • Blog posts
  • References
qemu-user-static (qus) and containers
  • »
  • Other related sources
  • Edit on GitHub

Other related sources¶

Some of these projects were developed in parallel to qus, and there has been feedback; so, some features and use cases are equivalent. Currently, the enhancements which might be unique to qus are 1) providing docker images for host architectures other than amd64; and 2) optionally, limiting the list of QEMU binaries to be registered on the host.

Tip

There is some info about QEMU and Docker at wiki.qemu.org/Testing/DockerBuild. However, it is focused on building and testing QEMU itself, and details about how to set binfmt interpreters are not explained.

multiarch/qemu-user-static¶

multiarch/qemu-user-static is the most similar to qus. Script register.sh in qus was initially based on multiarch’s. Later, qus was used as a reference by multiarch, in order to implement persistent loading. The main difference is that multiarch does not provide images for host architectures other than amd64.

[R2] is a talk by one of the maintainers of multiarch/qemu-user-static that provides an introduction to contexts where these projects are useful. See also [R8].

fkrull/docker-qemu-user-static¶

In fkrull/docker-qemu-user-static QEMU binaries are also loaded persistently. However, fkrull uses some custom Python scripts, instead of relying on qemu-binfmt-conf.sh.

rmoriz/multiarch-test¶

rmoriz/multiarch-test tries to fix moby/moby#36552 in hooks/build, but we have not found that issue in this project yet.

linuxkit/binfmt | docker/binfmt¶

Although not well documented, since version 1.13.0 (2017-01-19), QEMU is installed by default with Docker Desktop and a tool written in golang (named binfmt) is used to register interpreters in the kernel. The upstream project is linuxkit/linuxkit.

For further details about similarities/differences, see:

  • The project from docker (docker/binfmt) was deprecated in favour of github.com/linuxkit/linuxkit/tree/master/pkg/binfmt.

    • docker/binfmt#17

  • linuxkit/linuxkit#3401

  • moby/qemu

At DockerCon San Francisco 2019, a partnership with Arm was announced: Building Multi-Arch Images for Arm and x86 with Docker Desktop.

Blog posts¶

  • ownyourbits.com

    • Running and building ARM Docker containers in x86

    • Transparently running binaries from any architecture in Linux with QEMU and binfmt_misc

Previous Next

© Copyright 2019-2022, Unai Martinez-Corral.

Built with Sphinx using a theme provided by Build the Docs.