Podman: lโalternativa a Docker che ogni sysadmin Linux dovrebbe conoscere
Per anni Docker รจ stato il default indiscusso quando si parlava di container su Linux. Ma lโarchitettura basata su un daemon centrale che gira come root ha sempre lasciato sul tavolo un problema di superficie dโattacco: se qualcuno compromette dockerd, ha di fatto accesso root allโintero host. Podman nasce proprio per chiudere questo gap, offrendo un motore container daemonless, compatibile con le immagini OCI e con la CLI Docker, che si integra in modo molto piรน nativo con systemd e con il modello di permessi di Linux.
Vediamo come installarlo, come si differenzia realmente da Docker oltre gli slogan, e come portarlo in produzione con systemd e le Quadlet, che sono probabilmente la ragione migliore per prenderlo sul serio.
Cosโรจ Podman, in pratica
Podman (da Pod Manager) รจ un motore container open source senza demone centrale. Ogni container gira come processo figlio dellโutente che lo ha avviato, non come figlio di un servizio di sistema con privilegi elevati. Questo significa che รจ possibile eseguire container completamente rootless, senza mai invocare sudo, riducendo drasticamente cosa un container compromesso puรฒ effettivamente toccare sullโhost.
Sotto il cofano Podman usa gli stessi runtime OCI di Docker e parla lo stesso formato immagine, quindi la stragrande maggioranza dei comandi Docker funziona invariata sostituendo semplicemente il nome del binario (o creando un alias docker=podman, oppure installando il pacchetto podman-docker che fa da shim trasparente).
Un concetto che Docker non ha nativamente รจ quello di pod: gruppi di uno o piรน container che condividono rete e storage, concettualmente vicini ai pod di Kubernetes. Comodo quando si vogliono far girare insieme piรน container che devono comunicare come se fossero sulla stessa macchina.
Installazione
# Debian/Ubuntu (Debian 11+, Ubuntu 20.10+)
sudo apt-get update
sudo apt-get -y install podman
# Fedora/CentOS/RHEL 8+
sudo dnf -y install podman
# openSUSE
sudo zypper install podman
# Arch/Manjaro
sudo pacman -S podman
Verifica dellโinstallazione:
podman --version
podman info
podman run hello-world
Se lโultimo comando restituisce il messaggio di benvenuto di Podman, lโinstallazione รจ a posto.
Uso quotidiano: i comandi non cambiano quasi nulla
Shell interattiva dentro un container Ubuntu:
podman run -it ubuntu bash
Servizio in background, con Nginx esposto sulla porta 8080 dellโhost:
podman run -d --name web -p 8080:80 nginx
podman ps
Il resto della CLI ricalca Docker praticamente 1:1: podman pull, podman images, podman stop/start, podman rm/rmi. Dietro le quinte, podman build รจ in realtร un wrapper attorno a Buildah, mentre lo spostamento di immagini tra registry passa per Skopeo: strumenti separati che Podman orchestra per te, senza che serva conoscerli nel dettaglio per lโuso base.
Dove Docker e Podman divergono davvero
La compatibilitร รจ alta ma non totale, e i problemi emergono quasi sempre dal modello rootless. Il caso piรน comune sono i bind mount: poichรฉ i container rootless usano user namespace e mapping subuid/subgid, una directory montata dallโhost non sempre ha la proprietร che il container si aspetta. Su sistemi con SELinux attivo serve anche il suffisso :z o :Z per far ri-etichettare correttamente i file:
podman run -v /host/path:/container/path:Z myimage
:z minuscolo condivide il volume tra piรน container, :Z maiuscolo lo rende privato per un singolo container. Se serve far coincidere esattamente la proprietร con quella dellโhost, lโopzione --uidmap permette un controllo fine, oppure si puรฒ far girare il container in modalitร rootful per replicare il comportamento di Docker.Altri attriti da conoscere prima di migrare: lโaccesso GPU da container rootless รจ limitato (NVIDIA richiede nvidia-container-toolkit e setup CDI, con i container da ricreare a ogni aggiornamento driver), e i Docker secrets insieme ad alcune configurazioni di rete non hanno una corrispondenza 1:1. Niente di bloccante, ma va testato prima di assumere che la migrazione sia un semplice โfind and replaceโ.
Container come servizi systemd: le Quadlet
Questo รจ probabilmente il motivo migliore per scegliere Podman in un contesto server. Invece di lasciare un demone in background a gestire lo stato dei container, si delega tutto a systemd, che diventa responsabile di avvio, riavvio e supervisione, esattamente come per qualsiasi altro servizio di sistema.
Il meccanismo si chiama Quadlet: un file dichiarativo con estensione .container che Podman traduce automaticamente in una unit systemd. Per un servizio utente rootless, il file va in ~/.config/containers/systemd/. Esempio minimo per Nginx:
[Container]
ContainerName=web
Image=docker.io/library/nginx:latest
PublishPort=8080:80
[Install]
WantedBy=default.target
Attivazione:
systemctl --user daemon-reload
systemctl --user start web
Da questo momento il container รจ gestito da systemd come un servizio qualsiasi: si riavvia in caso di crash, si integra con i log di journald, si puรฒ abilitare al boot. Aggiungendo lโetichetta AutoUpdate=registry a un container, inoltre, podman auto-update puรฒ controllare periodicamente nuove versioni dellโimmagine e riavviare il servizio in automatico, senza bisogno di Watchtower o strumenti equivalenti.
Migrare da Docker Compose
Chi ha unโinfrastruttura basata su Compose ha due strade percorribili. La prima รจ continuare a usare Compose cosรฌ comโรจ: il binario standalone docker compose puรฒ puntare al socket di Podman senza toccare i file docker-compose.yml esistenti:
systemctl --user enable --now podman.socket
La seconda รจ convertire i file Compose in Quadlet, cosรฌ che sia systemd a gestire tutto nativamente. Scrivere le unit a mano รจ tedioso, quindi conviene usare podlet, un tool che legge un docker-compose.yml e genera i file Quadlet corrispondenti. Cโรจ una curva di apprendimento, ma รจ comunque piรน veloce che partire da zero.
Docker resta rilevante
Nonostante i vantaggi di Podman, Docker non sta scomparendo. Lโecosistema attorno a Docker (Compose, Swarm, e tutta la tooling che si integra con esso, inclusi molti sistemi CI/CD giร configurati per il socket Docker) resta enorme, e non tutte le piattaforme gestiscono bene le peculiaritร rootless di Podman. Se un team รจ giร standardizzato su Docker, spesso ha piรน senso restare sullโesistente piuttosto che affrontare una migrazione per un guadagno marginale.
Dove Podman convince davvero รจ quando si parte da zero: setup piรน sicuro per default, nessun demone da tenere sotto controllo, integrazione diretta con systemd per la gestione del ciclo di vita dei servizi.
Conclusione
Podman รจ un motore container completo, compatibile con Docker, che funziona senza demone e senza bisogno di privilegi root. Per lโuso quotidiano รจ quasi un drop-in replacement: si installa dal repository della distribuzione, si usano gli stessi comandi (o si crea lโalias docker=podman), e si ottengono benefici di sicurezza concreti senza dover reimparare nulla. I limiti di compatibilitร , soprattutto su bind mount, GPU e secrets, vanno conosciuti e testati prima di una migrazione in produzione, ma per chi sta impostando nuovi ambienti containerizzati su Linux, specialmente se pensa di gestirli con systemd e Quadlet, vale decisamente la pena valutarlo.
Fonte originale: Hayden James, โDocker Alternative: Podman on Linuxโ, LinuxBlog.io.
This article is inspired by our LinuxCommunity.io forum discussion thread (thanks to users @tmick and @shybry747 for the feedback). Let's walk through
Hayden James (LinuxBlog.io)
macfranc
in reply to Concorsipedia • • •