Podman

Podman on daemoniton konttityökalu — toisin kuin Docker, se ei tarvitse taustalla pyörivää root-oikeuksin ajettavaa palvelinprosessia. Komentorivi on suurelta osin yhteensopiva Docker CLI:n kanssa, joten moni docker ...-komento toimii sellaisenaan korvaamalla docker sanalla podman.

Peruskomennot

podman pull nginx:alpine
podman run -d --name web -p 8080:80 nginx:alpine
podman ps                    # käynnissä olevat kontit
podman ps -a                 # myös pysäytetyt
podman logs web
podman exec -it web sh
podman stop web
podman rm web

Kuvien hallinta

podman images
podman rmi nginx:alpine
podman image prune           # poista käyttämättömät, roikkuvat kuvat
podman image prune -a        # poista kaikki käyttämättömät kuvat
podman build -t oma-sovellus .

Podit — konttien ryhmittely

Pod on joukko kontteja, jotka jakavat verkko- ja IPC-nimiavaruuden ja tavoittavat toisensa localhost:n kautta. Sama käsite kuin Kubernetesin pod — siksi Podmanilla voi tuottaa ja kuluttaa Kubernetes-YAML:ia.

podman pod create --name oma-pod -p 8080:80
podman run -d --pod oma-pod --name web nginx:alpine
podman run -d --pod oma-pod --name db postgres:16
podman pod list
podman pod stop oma-pod
podman pod rm -f oma-pod

Kubernetes-YAML

podman generate kube web > web-pod.yaml     # kontista
podman generate kube oma-pod > pod.yaml     # podista
podman play kube pod.yaml                   # aja YAML:sta
podman play kube --down pod.yaml            # pysäytä ja poista

Rootless-turvallisuusmalli

Podman ajaa koko konttipinon tavallisena käyttäjänä — kontin sisäinen root (UID 0) kuvataan /etc/subuid-alueelta löytyvään oikeudettomaan UID:iin isäntäkoneella. Ei root-omisteista taustaprosessia eikä setuid-polkua, joten kontista karkaaminen päätyy oikeudettomaksi "nobody"-käyttäjäksi isännällä root-oikeuksien sijaan.

Podman Machine (macOS/Windows)

Kontit vaativat Linux-ytimen, joten macOS/Windows-koneella Podman ajaa kevyttä Linux-VM:ää taustalla:

podman machine init --cpus 4 --disk-size 50 --memory 4096
podman machine start
podman machine list
podman machine stop
podman machine rm            # nollaa VM, jos se korruptoituu

VM on oletuksena rootless-tilassa. Jos kontti tarvitsee root-oikeuksia (esim. portti < 1024) tai yhteensopivuusongelmia ilmenee:

podman machine set --rootful

Docker Compose -yhteensopivuus

Podman ei paljasta Docker-yhteensopivaa APIa macOS:ssä oletuksena. Yksinkertaisin tapa käyttää olemassa olevia docker-compose.yml -tiedostoja on Podmanin sisäänrakennettu compose-komento:

podman compose up -d

Vaihtoehtoisesti virallinen Docker Compose -CLI saadaan puhumaan Podmanin kanssa asettamalla DOCKER_HOST osoittamaan Podman-koneen socketiin:

export DOCKER_HOST=unix://$(podman machine inspect --format '{{.ConnectionInfo.PodmanSocket.Path}}')
docker compose up -d

Systemd-integraatio: Quadlet

Podmanilla ei ole daemonia käynnistämässä kontteja uudelleen käynnistyksen tai kaatumisen jälkeen — tämä hoidetaan systemdillä. Quadlet on nykyaikainen tapa määritellä kontti deklaratiivisena yksikkötiedostona:

~/.config/containers/systemd/web.container    # rootless
/etc/containers/systemd/web.container         # rootful

Tiedoston muokkauksen jälkeen:

systemctl --user daemon-reload      # rootless
sudo systemctl daemon-reload        # rootful

systemctl --user start web.service
systemctl --user enable web.service

Rootless-palvelujen pitää pysyä käynnissä myös ilman kirjautunutta istuntoa (esim. palvelimella):

sudo loginctl enable-linger $UID

Automaattiset kuvapäivitykset

systemctl --user enable --now podman-auto-update.timer