Podman

aus www.kruedewagen.de, Homepage von Ralf und Judith Krüdewagen (Kruedewagen)
Zur Navigation springen Zur Suche springen

Diese Seite befasst sich mit Podman, einer Alternative zur Docker-Umgebung, um (Docker-)Images und Container zu managen und Container laufen zu lassen. Dabei kommt Podman ohne Daemon aus und benötigt daher keine Root-Rechte. Außerdem kann Podman mit Pods (bekannt aus Kubernetes) umgehen.

Es geht hier vor allem um Änderungen und Besonderheiten von Podman, wenn man damit Docker ersetzen möchte.

Artikel

apiVersion: v1
kind: Pod
metadata:
  name: guestbook
spec:
  containers:
  - name: backend
    image: "docker.io/redis:6"
    ports:
    - containerPort: 6379
  - name: frontend
    image: us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5
    privileged: true
    ports:
    - containerPort: 80
      hostPort: 8080
  env:
  - name: GET_HOSTS_FROM
    value: "env"
  - name: REDIS_SLAVE_SERVICE_HOST
    value: "guestbook-backend"

Management von Images und Containern

Podman ist fast vollständig befehls-kompatibel zu Docker. Man kann also genau wie bei Docker einen Container starten. Der "docker" Befehl wird nur gegen "podman" ausgetauscht.

Beispiel für GitLab

podman run --detach \
    --hostname gitlab.kruedewagen.de \
    --publish 9443:9443 --publish 9080:9080 --publish 9022:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

Container bei Systemstart automatisch starten

Das automatische Starten eines Containers muss wie ein normaler Service in das Linux-System eingebaut werden, da kein eigener Daemon zur Verfügung steht.

Bei systemd geht einfach mit einer eingebauten Generator (Beispiel GitLab):

podman generate systemd gitlab > /etc/systemd/system/gitlab.service
systemctl daemon-reload
systemctl enable gitlab
systemctl start gitlab

Achtung: Die systemd Service-Datei enthält Referenzen zur Container-ID. Daher muss die systemd Service-Datei nach jedem Wechsel der Container-ID neu erstellt werden (also nach Löschen und Neuerstellung des Containers, z.B. nach Update des Images).

Weblinks:

Podman API

Wenn Container auf die Podman API zugreifen müssen (z.B. über ein Socket), muss der Podman API Service laufen.

Ein Podman-Socket kann dann rückwärts-kompatibel zu Docker so in den Container hinein gereicht werden:

podman run -d --name gitlab-runner --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /run/podman/podman.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

Weblinks:

Login Shell

Tools

Siehe auch