TL;DR: Support for both ARM and Debian with ROS is now reflected in the Official DockerHub library!
Hello everyone!
As you might have noticed, DockerHub is beginning to support additional architectures other than amd64 [1]. So Iāve expanded upon our dockerfile maintenance infrastructure for the official ROS images to enable arm support.
Additionally while refactoring, support for multiple operating systems, i.e. debian based ROS images, has also been enabled, while also extending to supported arm architectures. To see the listing of supported suites, distros and architectures for the official DockerHub library, you can view the manifest for ROS here [2]:
Notes:
- New tags have been added to specify the operating system suite via appended suffix
- E.g.
kinetic-ros-base-xenial
,kinetic-ros-base-jessie
- E.g.
- There are no changes to the original set of tags, as they still point to the same suite
- E.g.
kinetic
<=>kinetic-ros-base
<=>kinetic-ros-base-xenial
- Additionally true for
amd64
tagged images hosted from osrf/ros automated repo
- E.g.
- The official registry will internally negotiate what arch is pulled via the manifest
- E.g. if docker-engine host is
arm64v8
,docker pull ros
should pull anarm64v8
image
- E.g. if docker-engine host is
- Multi-architecture ROS images are also mirrored under separate docker hub organizations
- E.g.
docker pull arm64v8/ros
ORdocker pull arm32v7/ros:lunar
- You may reference
<arch>/ros:<tag>
to specifically pull a target architecture
- E.g.
- There is some build scaffolding you can follow for multi-architecture image builds for ROS
This is all fairly new, so if youād like to start learning more, hereās a relatively recent article on the subject [3]:
Of course, if youād like to play around with any of the arm images, but donāt have raspberry pie or other arm based platform laying around, you can easily emulate via qemu-user and binfmt-support. By installing the necessary binfmt-support kernel module and qemu-user static binaries to the host, you can run commands within the arm environment, e.g. on your amd64
workstation. This may require forthcoming patches to your debian binfmt-support package depending upon your distribution, so should encounter runtime issues, you may follow these instructions here [4].
For example:
$ sudo apt install qemu-user-static
...
$ uname -a
Linux ubuntu 4.8.0-58-generic #63~16.04.1-Ubuntu SMP
Mon Jun 26 18:08:51 UTC 2017
x86_64 x86_64 x86_64 GNU/Linux
$ docker run -it arm64v8/ros:lunar-ros-core-stretch uname -a
Unable to find image 'arm64v8/ros:lunar-ros-core-stretch' locally
lunar-ros-core-stretch: Pulling from arm64v8/ros
774bc81cd4dd: Pull complete
...
Digest: sha256:dd88dce3f840cc963a61881a1da4f36f1c66214dd1b0029fa433580a4f5a142f
Status: Downloaded newer image for arm64v8/ros:lunar-ros-core-stretch
Linux a2a63cc39389 4.8.0-58-generic #63~16.04.1-Ubuntu SMP
Mon Jun 26 18:08:51 UTC 2017
aarch64 GNU/Linux
$ docker run -it arm64v8/ros:lunar-ros-core-stretch cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
...
If you find issues with the images, please be sure to ticket them here [5]:
Also donāt forget to share our official repo [6] so others might discover it!
best,
@ruffsl
[1] https://github.com/docker-library/official-images#architectures-other-than-amd64
[2] https://github.com/docker-library/official-images/blob/master/library/ros
[3] https://developer.ibm.com/linuxonpower/2017/07/27/create-multi-architecture-docker-image/
[4] https://github.com/computermouth/qemu-static-conf
[5] https://github.com/osrf/docker_images
[6] https://hub.docker.com/_/ros/
P.S.
Although some i386
binaries are supplied by the ROS buildfarm, Iāve deliberately omitted it for now, given:
-
i386
binaries for docker-engine are not officially shipped or supported by Docker - Current traffic for
i386
ROS packages is below that for arm