Zpět na blog
Kontejnery22. ledna 2025Michael Hettwer10 min čtení

Podman jako alternativa k Dockeru: Průvodce pro produkční nasazení

Architektura Podmanu bez roota a bez démona z něj dělá přesvědčivou alternativu k Dockeru pro bezpečnostně uvědomělé týmy. Zde je návod, jak hladce migrovat.

Docker změnil způsob, jakým nasazujeme software. Podman chce změnit způsob, jakým provozujeme kontejnery – bez privilegovaného démona sedícího mezi vaší aplikací a jádrem. Pokud provozujete kontejnery v produkci na Linuxu, pochopení Podmanu stojí za váš čas.

Proč Podman?

  • Žádný démon: každý kontejner je přímým potomkem procesu uživatele, který ho spustil
  • Rootless ve výchozím nastavení: kontejnery běží bez root oprávnění na hostiteli
  • OCI-kompatibilní: spouští stejné obrazy jako Docker (z Docker Hub, GHCR nebo libovolného OCI registru)
  • Drop-in kompatibilita s Docker CLI: alias docker=podman a většina skriptů prostě funguje
  • Nativní integrace se systemd: generujte unit soubory přímo z definic kontejnerů
  • Podpora podů: seskupujte kontejnery jako Kubernetes pody, bez Kubernetes overhead

Instalace

bash
# Debian / Ubuntu
apt update && apt install -y podman

# RHEL / AlmaLinux / Rocky (already included in most RHEL 8+ images)
dnf install -y podman

# Verify
podman version
podman info

Spuštění prvního rootless kontejneru

bash
# Pull and run nginx (rootless — no sudo needed)
podman run -d --name web -p 8080:80 docker.io/library/nginx:alpine

# List running containers
podman ps

# Check logs
podman logs web

# Stop and remove
podman stop web && podman rm web
Poznámka:

Rootless kontejnery nemohou bez úprav schopností jádra přistupovat k portům pod 1024. Při vývoji používejte porty >= 1024 a v produkci nginx/HAProxy reverzní proxy.

Migrace z Docker Compose

Podman podporuje Docker Compose soubory prostřednictvím podman-compose (komunitní projekt) nebo vestavěného systému Quadlet. Pro produkci je Quadlet – který generuje systemd unit soubory z definic kontejnerů – spolehlivější cestou.

bash
# Install podman-compose for development parity
pip3 install podman-compose

# Run an existing docker-compose.yml
podman-compose up -d

# For production: generate systemd units via Quadlet
# Place a .container file in ~/.config/containers/systemd/
mkdir -p ~/.config/containers/systemd
ini
# ~/.config/containers/systemd/web.container
[Unit]
Description=Nginx web server
After=network-online.target

[Container]
Image=docker.io/library/nginx:alpine
PublishPort=8080:80
Volume=/srv/www:/usr/share/nginx/html:ro,Z

[Service]
Restart=always

[Install]
WantedBy=default.target
bash
# Reload systemd and start the container unit
systemctl --user daemon-reload
systemctl --user enable --now web.service
systemctl --user status web.service

Bezpečnostní aspekty

  • Používejte :Z nebo :z štítky volume mount, aby SELinux povolil kontejneru přístup k hostitelským cestám
  • Spouštějte s --security-opt no-new-privileges, abyste zabránili eskalaci oprávnění uvnitř kontejnerů
  • Kde je to možné, nastavte --read-only na souborový systém kontejneru
  • Specifikujte --user uvnitř kontejneru, abyste se vyhnuli běhu jako UID 0 i v rámci jmenného prostoru kontejneru
  • Pravidelně auditujte obrazy pomocí podman image scan nebo trivy

Podman je připraven pro produkci a široce nasazen, včetně Red Hat OpenShift. Migrace z Dockeru je typicky práce na půl dne pro většinu zásobníků. Bezpečnostní a provozní výhody – žádný privilegovaný démon, nativní integrace se systemd, rootless operace – tuto investici ospravedlňují.