Podman - Potentielle Alternative für Docker Desktop für Windows

calendar_month 20. März 2022 15 Wörter

Part 1: Overview – Docker Desktop - Potentielle Alternativen (Windows)

In diesem Artikel stelle ich Podman vor und berichte über meine Erfahrungen bzgl. Installation, Betrieb und ob die Lösung Minikube + Podman für mich Docker Desktop für Windows verbannen konnte.

Podman

Podman ist eine rootless/daemonless Container-Technologie, die von RedHat entwickelt und bereitgestellt wird. In der nächsten Ubuntu LTS soll Podman fester Bestandteil des Repositories sein, was die Installation etwas vereinfachen dürfte.

Ich habe Podman V3.4.2 in einem WSL2-Container installiert. Die Besonderheit von Podman ist, dass es eine komplette CLI-Alternative für Docker-ce ist. Somit bleiben die Befehle gleich, nur dass podman anstatt docker verwendet wird. Es sei noch erwähnt, dass Podman im Gegensatz zu Docker auch rootless – also ohne Root-Rechte – betrieben werden kann. Ich habe es als rootless konfiguriert, weiter unten beschreibe ich die nötigen Schritte dafür.

Podman in WSL

Für die Installation ging ich nach dieser Anleitung vor. Hier wird direkt auf VSCode eingegangen und potentielle Lösungen für Probleme werden auch behandelt. Mit dieser Anleitung hat man dann eine Podman-rootless-Installation.

Abweichend von dieser Anleitung habe ich meine Aliases in der .bash_aliases-Konfiguration gesetzt:

alias docker=podman

Was in der Anleitung auch nicht erwähnt ist, ist die container.config-Datei. Diese habe ich per

cp /etc/containers/containers.conf ~/.config/containers/containers.conf

in mein Home-Verzeichnis kopiert und dann folgende Änderungen vorgenommen:

Unter [containers] muss die Zeile mit log_driver gefunden und wieder einkommentiert werden. Achtet darauf, dass der Eintrag wie folgt aussieht:

[containers]
log_driver="k8s-file"

Direkt unter [engine] sollte der group_manager gesetzt werden:

[engine]
cgroup_manager="cgroupfs"

Weiter unten innerhalb der Engine-Kategorie ist dann der events_logger-Eintrag zu finden, dieser sollte einkommentiert und wie folgt aussehen:

[engine]
events_logger = "file"

Zusätzlich habe ich in die .bashrc folgendes als letzten Befehl hinzugefügt:

podman system renumber

Nach einem Sleep vom Host oder einem Neustart vom Host hatte ich Probleme mit den laufenden Containern. Da WSL leider kein systemd bietet, sind somit einige Probleme vorprogrammiert. Mit diesem Befehl wird beim Login mit dem User die Pods neugeordnet – das war in meinem Fall die Lösung für diesen Fehler:

ERRO[0000] Error refreshing volume 20115fd77826acd6308a6dceb6318062fcdae8e3626c7b3367de25d328e93a2f: error acquiring lock 1

Podman in Windows

Podman kann nun mit dem wsl-Befehl und dem -d (distribution, das ist der Name von der WSL-Instanz) Command auch unter Windows verwendet werden.

Der Name kann über wsl -l in Erfahrung gebracht werden:

wsl -d PodmanHost podman info

Für Windows 11 gibt es anscheinend ein init/systemd-ähnliches System, hier könnte man anders vorgehen. Hier kann der Unix-Socket eingebunden werden, sodass per Podman-Remote-Client dann eine Verbindung zum WSL aufgebaut werden kann – ähnlich zu Docker, wenn die CE irgendwo anders läuft.

Damit dieses Vorhaben möglich ist, muss im WSL der sshd-Service konfiguriert werden, inkl. der Keys. Danach muss der Socket ausgeführt werden. Hier ein Schnelldurchlauf:

Angenommen wir haben einen Podman-User in der WSL-Instanz erstellt und unser Windows-User hat aytac als Profilnamen:

  1. Check ob sshd installiert ist:
    sudo apt -qq -y install openssh-server
  2. sshd starten:
    sudo service ssh start
  3. Keys erstellen:
    export WINDOWS_HOME=/mnt/c/Users/aytac/
    ssh-keygen -b 2048 -t rsa -f $WINDOWS_HOME/.ssh/id_rsa_localhost -q -N ""
    mkdir ~/.ssh
    cat $WINDOWS_HOME/.ssh/id_rsa_localhost.pub >~/.ssh/authorized_keys
  4. ssh in diese Windows 11 Boot-Datei aufnehmen.
  5. Im WSL muss folgender Befehl bei jedem Start ausgeführt werden:
    podman system service --time=0 unix:///mnt/wslg/runtime-dir/podman/podman.sock
  6. Dann könnte in Windows 11 eine System-Connection wie folgt angelegt werden:
    podman system connection add wsl --identity C:\Users\aytac\.ssh\id_rsa_localhost ssh://podman@localhost/mnt/wslg/runtime-dir/podman/podman.sock

Einfach per podman info in Windows testen, ob es funktioniert.

In Windows 10 ist das oben beschriebene auch möglich, jedoch komplizierter und fehleranfälliger, daher spreche ich keine Empfehlung aus.

Podman + Remote Container in Visual Studio Code

Podman kann danach ganz einfach in Visual Studio Code für Remote Container eingebunden werden. Die Einstellungen sollten wie im Screenshot angepasst werden.

Danach kann ein DevContainer wie gewohnt gestartet werden.

Das war es auch schon, außer den “Try a development container sample…” lief bei mir alles.

Fazit

Mit Einrichtung, Konfiguration, potentiellen Problemen ist Podman in dieser Konstellation keine Lösung für mich. Man kann die Grundfunktionalitäten von Docker Desktop für Windows mit der Kombination Minikube + Podman + WSL2 ersetzen, ich kann nicht sagen wie lange das gut geht und ein neues Problem auftaucht.

Die Wahl zwischen dieser Lösung und Docker Desktop für Windows für einen Fünfer im Monat stellt sich für mich sehr einfach dar – ich bleibe bei Docker Desktop für Windows.

Hätte ich nichts anderes ausprobiert, wäre das sicherlich der Fall gewesen, aber ich habe ja noch zwei weitere Alternativen ausprobiert. Ansonsten werde ich mit Podman weiter auf Unixoid-Basis experimentieren, das Daemonless-Konzept dahinter ist recht interessant.


Artikel dieser Serie: