Podman container engine

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

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.