Was ist Podman?
Podman ist ein open-source Projekt welches auf den meisten Linux Distris zur Verfügung steht. Mit Podman kann man OCI Container entwickeln, managen und laufen lassen. Podman kann als Docker-kompatibler Ersatz direkt verwendet werden in dem man einen Alias setzt.
alias docker=podman
Der größte Vorteil ist das man Container im Userspace ohne Rootrechte laufen lassen kann. Wer ein grafisches Interface benötigt kann auf cockpit-podman zurückgreifen.
Ich möchte hier eine kleine Anleitung für den Einstieg schreiben um die ersten Gehversuche zu erleichtern 🙂
Podman installieren
Folgende Pakete müssen für Podman installiert werden, die Abhängigkeiten werden automatisch aufgelöst.
[lab@fedora ~]$ sudo dnf install podman Last metadata expiration check: 0:09:09 ago on Fri May 21 22:03:22 2021. Dependencies resolved. ======================================================================================================================== Package Architecture Version Repository Size ======================================================================================================================== Installing: podman x86_64 3:3.1.2-3.fc34 updates 12 M Installing dependencies: conmon x86_64 2:2.0.27-2.fc34 updates 53 k container-selinux noarch 2:2.160.0-2.fc34 updates 47 k containernetworking-plugins x86_64 1.0.0-0.1.rc1.fc34 updates 9.0 M containers-common noarch 4:1-16.fc34 updates 60 k criu x86_64 3.15-3.fc34 fedora 521 k criu-libs x86_64 3.15-3.fc34 fedora 31 k crun x86_64 0.19.1-1.fc34 updates 173 k libbsd x86_64 0.10.0-7.fc34 fedora 106 k libnet x86_64 1.2-2.fc34 fedora 58 k Installing weak dependencies: catatonit x86_64 0.1.5-4.fc34 fedora 305 k fuse-overlayfs x86_64 1.5.0-1.fc34 fedora 75 k podman-plugins x86_64 3:3.1.2-3.fc34 updates 1.3 M slirp4netns x86_64 1.1.9-1.fc34 fedora 57 k Transaction Summary ======================================================================================================================== Install 14 Packages Total download size: 24 M Installed size: 116 M Is this ok [y/N]:
Das erste Ausführen eines Containers
Der Container wird komplett im Userspace ausgeführt.
Mit „podman search <search>“ kann man bei docker.io und quay.io suchen, beide stellen Images bereit.
[lab@fedora ~]$ podman search alpine INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/library/alpine A minimal Docker image based on Alpine Linux... 7442 [OK] ...
Mit „podman pull <name>“ kann man das Image herunterladen.
[lab@fedora ~]$ podman pull docker.io/library/alpine:latest Trying to pull docker.io/library/alpine:latest... Getting image source signatures Copying blob 540db60ca938 done Copying config 6dbb9cc540 done Writing manifest to image destination Storing signatures 6dbb9cc54074106d46d4ccb330f2a40a682d49dda5f4844962b7dce9fe44aaec
„podman images“ zeigt die verfügbaren Images auf dem System an.
[lab@fedora ~]$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/alpine latest 6dbb9cc54074 5 weeks ago 5.88 MB
Um den Container direkt zu starten folgenden Befehl ausführen: „podman -it <name>“
[lab@fedora ~]$ podman run -it docker.io/library/alpine:latest / # cat /etc/os-release NAME="Alpine Linux" ID=alpine VERSION_ID=3.13.5 PRETTY_NAME="Alpine Linux v3.13" HOME_URL="https://alpinelinux.org/" BUG_REPORT_URL="https://bugs.alpinelinux.org/"
Hurra wir sind in einem Container 🙂
Mit „exit“ kann der Container verlassen werden, um die laufenden/existierenden Container anzuzeigen kann man das Kommando „podman ps -a“ verwenden.
[lab@fedora ~]$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e7fb0b4ec4b8 docker.io/library/alpine:latest /bin/sh 4 minutes ago Exited (0) 9 seconds ago romantic_carson
Um den Container zu löschen verwendet man „podman rm <id>“
[lab@fedora ~]$ podman rm e7fb0b4ec4b8
Einen einfachen Webserver im Container betreiben
Standardmäßig ist Selinux aktiv auf Fedora/Redhat weshalb man beim mappen aufpassen muss damit der Container auf den gemappten Ordner zugreifen kann.
Persistenten Ordner anlegen und „Testwebseite“ anlegen
[lab@fedora ~]$ mkdir ~/web [lab@fedora ~]$ echo "Hallo Welt" >> ~/web/index.html
Erstellen des Containers
„-d“ startet den Container „detached“ im Hintergrund. „–name“ legt einen Namen für den Container fest. „-p <public_port>:<container_inside_port>“ fügt ein Portmapping hinzu. „-v <outside_volume>:<in_container_path>:Z“ mappt einen persistenten Ordner. Das Z am Ende des peristenten Volumes ist für Selinux die Anweisung dem Container den Zugriff auf den Share zuzulassen. Sollte Selinux nicht aktiviert sein kann darauf verzichtet werden. Am Ende wird der Image Name angegeben welcher für den Container verwendet werden soll.
[lab@fedora ~]$ podman run -d --name webserver -p 8080:8080 -v ~/web:/var/www/html:Z registry.fedoraproject.org/f29/httpd 447bd346dd6fd307d630cda5a985670798b53166afdcb8882c370bc9d4f7ec07
Zustand des Containers prüfen
[lab@fedora ~]$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f0018bd14746 registry.fedoraproject.org/f29/httpd /usr/bin/run-http... About a minute ago Up About a minute ago 0.0.0.0:8081->8080/tcp webserver [lab@fedora ~]$ podman port -a f0018bd14746 8080/tcp -> 0.0.0.0:8080 [lab@fedora ~]$ curl http://localhost:8080/index.html Hallo Welt
Den Container automatisch starten auch im Userspace
Um einen oder mehrere Container im Userspace zu starten müssen ein paar Dinge erledigt werden.
Erstellen eines Ordners für die Systemd Service Dateien
[lab@fedora ~]$ mkdir -p ~/.config/systemd/user/
Erstellen des Systemd Services mit podman
[lab@fedora ~]$ cd ~/.config/systemd/user [lab@fedora user]$ podman generate systemd --name webserver --files --new /home/lab/.config/systemd/user/container-webserver.service
Systemd Deamon neu laden
[lab@fedora user]$ systemctl --user daemon-reload
Container Autostart aktivieren
[lab@fedora user]$ systemctl --user enable --now container-webserver.service Created symlink /home/lab/.config/systemd/user/multi-user.target.wants/container-webserver.service → /home/lab/.config/systemd/user/container-webserver.service. Created symlink /home/lab/.config/systemd/user/default.target.wants/container-webserver.service → /home/lab/.config/systemd/user/container-webserver.service.
Linger Mode aktivieren für den User
Eine User Session wird erzeugt nach dem Booten und wird erhalten nach einem ausloggen, in dieser User Session läuft dann der Container.
[lab@fedora user]$ loginctl enable-linger [lab@fedora user]$ loginctl show-user lab ... Linger=yes
Cockpit-podman Web tool zur Container Administration
Für Cockpit ist auch eine Erweiterung für podman verfügbar.
[lab@fedora ~]$ sudo dnf install cockpit-podman Last metadata expiration check: 1:26:07 ago on Fri May 21 22:03:22 2021. Dependencies resolved. ========================================================================================================================================= Package Architecture Version Repository Size ========================================================================================================================================= Installing: cockpit-podman noarch 30-1.fc34 updates 385 k Transaction Summary ========================================================================================================================================= Install 1 Package Total download size: 385 k Installed size: 484 k Is this ok [y/N]: y Downloading Packages: cockpit-podman-30-1.fc34.noarch.rpm 682 kB/s | 385 kB 00:00 ----------------------------------------------------------------------------------------------------------------------------------------- Total 367 kB/s | 385 kB 00:01 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : cockpit-podman-30-1.fc34.noarch 1/1 Verifying : cockpit-podman-30-1.fc34.noarch 1/1 Installed: cockpit-podman-30-1.fc34.noarch Complete!
Das Cockpit Portal ist über https://<server_ip>:9090 erreichbar. Nach der Installation von cockpit-podman steht es links im Menü zur Verfügung.
Mit dem Cockpit Modul lassen sich neue Maschinen starten, bestehende neu starten, usw.
Hier ein paar Impressionen
Übersicht der Container / Images
Konsole eines Containers
Erstellen eines neuen Containers