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
# 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 infoSpuštění prvního rootless kontejneru
# 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 webRootless 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.
# 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# ~/.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# Reload systemd and start the container unit
systemctl --user daemon-reload
systemctl --user enable --now web.service
systemctl --user status web.serviceBezpeč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í.