WalT image registries¶
Overview¶
Image registries allow to share WalT images, a major feature for reproducibility and/or team working.
The following is a list of image registries walt can use.
WalT internal repository¶
The WalT server internally manages the images by using podman
,
buildah
and skopeo
tools.
When using walt image search
, WalT will list images of this internal
repository, with a clone URL starting with walt:
. However, it will
only list images belonging to other users, since images belonging to the
calling user are those printed when typing walt image show
. It is
therefore obvious to import images built by teammates into one’s own
working set by using walt image clone <url>
.
Docker Hub¶
In their default configuration, WalT servers are configured to publish and clone images to/from the docker hub at hub.docker.com.
The WalT development team publishes default images for various kinds of WalT nodes there:
waltplatform/rpi-*-default:latest
: default images for various Raspberry Pi modelswaltplatform/pc-x86-64-default:latest
: default image for 64-bit PCswaltplatform/pc-x86-32-default:latest
: default image for 32-bit PCs
When using walt image search
, WalT will list these remote images
with a clone URL starting with hub:
, and this clone URL can be used
to download them using walt image clone <url>
.
The command walt image publish
can be used to publish images on the
Docker Hub. Referencing the resulting clone URL in a research paper can
help reproducibility.
Since the Docker Hub is a public registry, its use may not match all needs (e.g., a private company may not want to publish images involving industrial secrets). It is possible to reconfigure WalT to use a local registry instead of the Docker Hub, or to use both the Docker Hub and a local registry, as described next.
Docker local registry¶
As an alternative to the Docker Hub, one can install its own docker image registry by using the documented procedure.
Basically, running this command on a machine equipped with the
docker
engine is enough:
[registry-machine]$ docker run -d -p 5000:5000 --restart=always --name registry registry:2
Host registry-machine
now has an image registry server listening on
port 5000.
WalT can be reconfigured to use this registry server by using:
root@walt-server:~$ walt-server-setup --edit-conf
A network configuration editor will be displayed first, and the
configuration editor for registries next. Using this configuration
editor to declare the new registry server available on
registry-machine
should be obvious.
Using this configuration editor, one might also disable the Docker Hub, but it is not recommended, because of the default images stored there. The first time a new kind of node is detected, WalT has to download a default image for it. This image can usually be found on the Docker Hub, but WalT will also try the local registry if any. If all fails, then the WalT server will not be able to manage this new node. As a consequence, disabling the Docker Hub should only be done after all needed default images are downloaded (at least one node of each kind could boot at least once), and keeping in mind that the WalT server will not be able to manage new kinds of nodes in the future, unless a default image is made available for them in the local registry.
When configuring a local registry, a label should be given on the editor
interface. This label is then used in the clone URL of
walt image search
, walt image clone
, and possibly for the
--registry
option of walt image publish
. For instance, if the
label “local” is chosen, then clone URLs of images stored in the local
registry will be prefixed with local:
, and one can use
walt image publish --registry local <image-name>
to upload an image
into this local registry.
Docker daemon on walt server¶
Many WalT users create their images in an incremental way, by using
various walt image shell
or walt image cp
steps.
However, for better reproducibility and self-documentation, it is also possible to generate a WalT image from a Dockerfile. For instance:
FROM waltplatform/pc-x86-64-default:latest
RUN apt install -y ...
[...]
And then create the image with walt image build
. See
walt help show image-build.
Since the WalT server is also equipped with the docker command, users
can also use a plain docker build
there to create an image. Non-root
users must be added to the docker
group beforehand. In this case the
resulting image will be owned by the docker
daemon, not directly by
WalT. When using walt image search
, WalT will indicate a clone URL
starting with docker:
, and then using walt image clone <url>
it
is easy to import it into WalT internal repository.