Podman - Potentielle Alternative für Docker Desktop für 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.
Part 1: [Overview] Docker Desktop - Potentielle Alternativen (Windows)
Part 2: Podman - Potentielle Alternative für Docker Desktop für Windows [hier]
Part 3: Docker-CE + WSL2 - Potentielle Alternative für Docker Desktop für Windows
Part 4: Ranger Desktop - Potentielle Alternative für Docker Desktop für 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. In Part1 stehen die Überlegungen und meine persönlichen Anforderungen, zudem wird auch erklärt wie der WSL Container auf Version 2 gebracht werden kann.
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 ein wenig vereinfachen drüfte.
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ähnte, 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 vollenden dieser Anleitung hat man dann eine podman rootless Installation.
Abweichend von dieser Anleitung habe ich meine Aliases in der .bash_aliases Konfiguration gesetzt.
Was in der Anleiung 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, ich habe folgenden Eintrag stehen.
[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 von dem Host, oder einem Neustart von dem 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, was in meinem Fall die Lösung für diesen error war.
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, so dass 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 mal ein Schnelldurchlauf.
Angenommen wir haben einen podman user in der WSL Instanz erstellt und unser windows user hat aytac als Profilnamen.
- Check ob sshd installiert ist:
sudo apt -qq -y install openssh-server
- sshd starten:
sudo service ssh start
- wir erstellen die keys
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
- ssh in diese Windows 11 boot Datei aufnehmen.
- Im WSL muss folgender Befehl bei jedem Start ausgeführt werden.
podman system service --time=0 unix:///mnt/wslg/runtime-dir/podman/podman.sock
- 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, ausser 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, ich kann auch nicht bestimmen wieviel Zeit ich noch investieren müsste. Die Version 4.0 ist aktuell rausgekommen, evtl. hat man hier die Möglichkeiten für die Integration etwas verbessert, Windows-Like gestalltet. Sofern das nicht der Fall sein sollte, ist diese Lösung nur Sparfüchsen oder ambitionierten Querdenkern/Tüftlern oder den experimentierfreundlichen zu Empfehlen.
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... Naja, nicht richtig, hätte ich nichts anderes ausprobiert, wäre dass sicherlich der Fall gewesen, aber ich habe ja noch 2 weitere Alternativen ausprobiert. Ansonsten werde ich mit Podman weiter auf unixoider Basis weiter experimentieren, das daemonless Konzept dahinter ist recht interessant.