Als größter Vorteil von Podman im Vergleich zu Docker wird üblicherweise die Funktion bewertet, Container ohne root-Rechte auszuführen. Übersehen wird, dass Docker seit Version 19.03 ebenfalls für den rootless-Einsatz geeignet ist; das Feature galt in dieser Version aber als experimentell und war mit erheblichen Einschränkungen verbunden. Deutlich besser sieht das in der aktuellen Version 20.10 aus: der Betrieb von Docker-Containern ohne root-Rechte ist nun eine reguläre Funktion. Bemerkenswert ist, dass die Installation von Docker innerhalb eines Benutzeraccounts erfolgt und ebenfalls ohne root-Rechte gelingt!
Installation
Für meine Tests habe ich Oracle Linux 8 verwendet. Die folgende Installationsanleitung sollte unverändert auch unter RHEL 8, unter anderen RHEL-Klones sowie unter anderen Distributionen funktionieren. (Die offizielle rootless-Docker-Anleitung listet einige distributionsspezifische Voraussetzungen auf und empfiehlt Ubuntu als Basisdistribution.)
Mit dem Script rootless
wird Docker lokal in einem Benutzeraccount installiert. Eine systemweite Docker-Installation ist nicht erforderlich! Das folgende Kommando ist in einem normalen Benutzeraccount ohne root-Rechte und ohne sudo
auszuführen!
curl -fsSL https://get.docker.com/rootless | sh
# Installing stable version 20.10.1
...
PATH=/home/kofler/bin:/home/kofler/.local/bin:/home/kofler/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
/home/kofler/bin/dockerd-rootless-setuptool.sh install
Creating /home/kofler/.config/systemd/user/docker.service
starting systemd service docker.service
+ systemctl --user start docker.service
+ sleep 3
+ systemctl --user --no-pager --full status docker.service
docker.service - Docker Application Container Engine (Rootless)
...
+ DOCKER_HOST=unix:///run/user/1000/docker.sock
+ /home/kofler/bin/docker version
Client: Docker Engine - Community
Version: 20.10.1
Server: Docker Engine - Community
Engine:
Version: 20.10.1
...
containerd:
Version: v1.4.3
...
+ systemctl --user enable docker.service
Installed docker.service successfully.
To control docker.service, run: `systemctl --user (start|stop|restart) docker.service`
To run docker.service on system startup, run: `sudo loginctl enable-linger kofler`
Make sure the following environment variables are set (or add them to ~/.bashrc):
export PATH=/home/kofler/bin:$PATH
export DOCKER_HOST=unix:///run/user/1000/docker.sock
Unter Oracle Linux ist PATH
bereits korrekt voreingestellt. Die Definition der DOCKER_HOST
-Variable ist aber vor dem ersten Start von docker
erforderlich und muss für später auch in .bashrc
eingetragen werden (oder in .zshrc
, falls Sie die ZSH verwenden).
export DOCKER_HOST=unix:///run/user/1000/docker.sock
echo "export DOCKER_HOST=unix:///run/user/1000/docker.sock" >> .bashrc
Ein kurzer Test beweist, dass alles funktioniert:
docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Die von Docker angelegten Images, Container usw. landen im Verzeichnis .local/share/docker
.
Hinweis: Um es nochmals klarzustellen: Zur Verwendung von Docker im rootless-Modus ist keine Docker-Installation auf Systemebene erforderlich. Prinzipiell macht es aber nichts, wenn eine derartige Installation bereits vorliegt — dann gibt es eben zwei Docker-Installationen, eine lokale für den rootless-Modus und eine systemweite für die Anwendung von Docker durch andere Benutzer bzw. root.
docker-compose
Um auch docker-compose
lokal zu installieren, führen Sie die folgenden Kommando aus, wobei Sie 1.27.4 durch die gerade aktuelle Version ersetzen (siehe hier):
cd
curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" \
-o bin/docker-compose
chmod +x bin/docker-compose
Fazit
Bei meinen Tests haben docker
und docker-compose
überraschend problemlos rootless funktioniert. Unter anderem habe ich mit docker-compose
mein aus LaTeX und Pandoc bestehendes Satzsystem getestet. Es besteht aus drei Container, die parallel ausgeführt werden und sich darum kümmern, meine Markdown-Texte und PNG-Bilder in eine (fast) druckfertige PDF-Datei umzuwandeln.
Beachten Sie aber, dass es nach wie vor Einschränkungen gibt. Diese kommen insbesondere dann zum Tragen, wenn Docker Änderungen an der Netzwerkkonfiguration durchführen möchte, die root-Rechte erfordern.
Warum nicht einfach podman benutzen?
Ich arbeite auf vielen Distributionen und fallweise auch unter macOS und Windows. Docker steht überall zur Verfügung. Deswegen ziehe ich Docker vor. Aber wer nur unter Fedora oder RHEL+Klone arbeitet, für den ist Podman vermutlich der einfachere Weg …
Hallo Michael,
dem muss ich ein wenig widersprechen :
https://podman.io/getting-started/installation
Podman ist auf jeder der genannten Distributionen und auch macOS , sowie Windows erhältlich.
Viele Grüsse , ein frohes neues Jahr und bleib gesund
Christian
In der Tat, die Podman-Unterstützung wird offenbar immer besser. Wobei Podman unter Windows noch immer wenig elegant ist (letztlich muss ich in einer VM oder mittels WSL zuerst eine Linux-Distribution installieren, Podman läuft dort).
Docker ist schon interessant. Würde es gerne auf einem dedizierten Server, welchen ich mieten würde, einsetzen. Allerdings hadere ich – trotz rootless – mit der Sicherheit, da ich nicht weiß wie ich meine eigenen Images dann darauf abstimme und erstelle.
Dahin gehend würde ich mich über eine ausführliche Anleitung freuen.
Die öffentliche Docker-Doku hilft mir da nicht wirklich!
Auch YouTube ist hier nicht „klar“ genug.