Lilipod is a simple container manager, able to download, unpack and use OCI images from various container registries.
Lilipod is a simple container manager, able to download, unpack and use OCI images from various container registries.
Lilipod aims to be a very simple (as in few features) container and image manager.
Sounds like little-pod, and I like it.
Lilipod is a very simple container manager with minimal features to:
It tries to keep a somewhat compatible CLI interface with Podman/Docker/Nerdctl
…
Warning This is beta quality software, it's not heavily used and tested like other alternatives. Be aware.
Well...superficially yes; Sure you have a separate user, mount (and optionally network, pid, ipc) namespaces, and the processes are in a pivotroot jail, but this does not manage anything else, so:
If you need full blown containers, look no further than Podman or Nerdctl for your needs.
Lilipod wants to be:
This tool does not aim to be a full replacement for Podman, Docker, Nerdctl or similar tools
Well, I felt the need to go deeper in how to download a container image from a registry... then one thing lead to another... and here we are.
Also this is a nice fallback for Distrobox when no container-manager is found, or when it's not possible to install one.
Being a fully self-contained binary that lives in one directory (LILIPOD_HOME) it makes it easy to install and remove without package managers.
Download the binary from the release page, and use it.
make
This will create a statically compiled binary.
By itself Lilipod depends only on some Linux utilities (nsenter, tar, cp, ps etc etc), those will be sourced from a bundled busybox static binary. This ensures working dependencies even on atypical systems.
But be aware that to work in a rootless manner, you need to have a working installation of the uidmap package.
Citing their README:
newuidmap and newgidmap need to be installed on the host. These commands are provided by the uidmap package on most distributions.
/etc/subuid and /etc/subgid should contain more than 65536 sub-IDs. e.g. penguin:231072:65536. These files are automatically configured on most distributions.
See also https://rootlesscontaine.rs/getting-started/common/subuid/
Which commands are available:
…
Pull an image:
…
Run a container and remove it afterwards:
:~$ lilipod run --rm -ti alpine cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.18.3
PRETTY_NAME="Alpine Linux v3.18"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"
Create the first container:
:~$ lilipod create --name first-lilipod docker.io/alpine:latest /bin/sh -l
f1c35f7b7de161116abb3157bd125f06
Start the container:
:~$ lilipod start -ti first-lilipod
first-lilipod:/#
Exec a command in an existing container:
:~$ lilipod exec -ti first-lilipod cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.18.3
PRETTY_NAME="Alpine Linux v3.18"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"
Stop the container:
:~$ lilipod stop first-lilipod
first-lilipod
Inspect the container:
…
Inspect the image:
…
Delete the container:
:-$ lilipod rm first-lilipod
first-lilipod
For more advanced use, you can always use --help to have information about the commands to launch.
You can always set the log level to warn error or debug by using the --log-level flag:
…
Doing like 1/20th of what Podman or Nerdctl do, at least it tries to be fast...
There are some basic entering speed for an execution:
:~$ time (for i in {1..20}; do podman exec -ti --user luca-linux fedora-rawhide whoami >/dev/null 2>/dev/null; done)
real 0m4.690s
user 0m2.178s
sys 0m0.829s
:~$ time (for i in {1..20}; do ./lilipod exec -i --user luca-linux fedora-rawhide whoami >/dev/null 2>/dev/null; done)
real 0m0.741s
user 0m0.458s
sys 0m0.450s
:~$ time (for i in {1..20}; do podman run --rm -ti alpine:latest whoami >/dev/null 2>/dev/null; done)
real 0m10.125s
user 0m2.606s
sys 0m1.744s
:~$ time (for i in {1..20}; do ./lilipod run --rm -ti alpine:latest whoami >/dev/null 2>/dev/null; done)
real 0m6.157s
user 0m3.545s
sys 0m2.613s
It takes about 5~8ms to enter a container and execute stuff
This obviously is a completely useless and arbitrary metric compared to the difference of utility of the two tools.
You can set LILIPOD_HOME to force lilipod to create images/containers/volumes in a specific directory.
Else lilipod will use XDG_DATA_HOME or fallback to $HOME/.local/share/lilipod
overlayfs so there is no deduplication between container's rootfs, but image layer deduplication is presentslirp4netns probably)No open issues yet, or sync has not completed.