Podman
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
- siehe c't 21/19 S.130
- siehe c't 15/22 S.168 - Grundlagen zu "rootless" , https://ct.de/y5m5
- IoT und Edge-Computing mit Podman - mit Pods a la Kubernetes
- YAML Datei fehlerhaft formatiert
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"
- Frontend: image: us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5
- Siehe auch https://www.redhat.com/sysadmin/kubernetes-workloads-podman-systemd
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:
- https://documentation.suse.com/sles/15-SP2/single-html/SLES-container/index.html
- https://www.tutorialworks.com/podman-systemd/
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:
- https://docs.podman.io/en/latest/markdown/podman-system-service.1.html
- https://middlewaretechnologies.in/2020/11/how-to-use-podman-rest-api-service-to-query-and-manage-linux-containers-system.html
- https://liquidat.wordpress.com/2020/04/20/howto-using-the-new-podman-api/
Login Shell
- heise+ | Podman-Container als Login-Shell mit podmansh, mit oder ohne Änderungsrechten, c't 23/23 S.156, https://ct.de/ygy9