Podman vs Docker: guida completa a installazione, differenze e container rootless

Podman vs Docker

Negli ultimi anni, la containerizzazione è diventata uno standard per lo sviluppo e il deployment di applicazioni. Se Docker è stato il pioniere e il nome più noto in questo settore, oggi esiste un’alternativa che sta guadagnando sempre più terreno: Podman. Ma di cosa si tratta esattamente? E perché sempre più team stanno considerando di sostituire Docker con Podman?

Podman (acronimo di Pod Manager) è un motore per container open-source sviluppato da Red Hat. Come Docker, permette di creare, eseguire e gestire container secondo gli standard OCI (Open Container Initiative). Ma a differenza di Docker, Podman adotta un’architettura “senza demone” (daemonless) : non esiste un processo centrale che gira in background con privilegi di root. Ogni container viene avviato come un processo figlio indipendente, rendendo il sistema più stabile, sicuro e leggero.

In questa guida andremo a trattare:

  1. Cos’è Podman e perché sta diventando popolare
  2. Le differenze principali con Docker: architettura, sicurezza e pod
  3. Installazione di Podman su Linux (con esempi su Ubuntu Server)
  4. I comandi base per iniziare a usare Podman
  5. Container rootless: la killer feature per la sicurezza
  6. Quando scegliere Podman e quando restare su Docker?
  7. Considerazioni finali e best practice

Cos’è Podman e perché sta diventando popolare?

Podman nasce dall’esigenza di superare alcune limitazioni architetturali di Docker, specialmente in contesti enterprise dove sicurezza e stabilità sono priorità assolute. La sua architettura “senza demone” lo rende intrinsecamente più robusto: se Docker dipende da un unico processo dockerd che, se si blocca, può causare il crash di tutti i container in esecuzione, con Podman ogni container è un processo indipendente.

Inoltre, Podman è stato progettato per essere un “drop-in replacement” di Docker. La sua interfaccia a riga di comando è volutamente molto simile, tanto che è possibile creare un alias alias docker=podman e usare i comandi che già conosci.

Un’altra caratteristica che sta spingendo molti sviluppatori verso Podman è il supporto nativo ai pod, ispirati a Kubernetes. Un pod è un gruppo di container che condividono lo stesso network e gli stessi volumi, esattamente come funziona in Kubernetes. Questo permette di sviluppare e testare localmente applicazioni che in produzione verranno eseguite su Kubernetes.

Differenze principali con Docker

Per capire bene Podman, è utile confrontarlo direttamente con Docker su alcuni aspetti chiave.

Architettura: Daemonless vs Client-Server

Docker utilizza un’architettura client-server. La CLI (docker) invia comandi al demone dockerd, che è un processo che gira in background con privilegi di root. Se il demone si blocca, l’intero sistema dei container può andare in crisi.

Podman, invece, adotta un’architettura senza demone. Non c’è un processo centrale in ascolto. Quando esegui un comando, Podman avvia il container come un processo figlio del tuo terminale. Questo approccio rende il sistema più stabile e leggero, e riduce drasticamente la superficie di attacco.

Sicurezza: Rootless by default

Docker: Il demone dockerd gira come root. Di conseguenza, i container che crea hanno, di default, privilegi elevati, aumentando il rischio in caso di vulnerabilità che permettano la fuga dal container.

Podman: Supporta nativamente i container “rootless”. Un utente normale può creare e gestire container senza bisogno di permessi di root. All’interno del container, l’utente è root, ma sull’host è mappato a un utente non privilegiato. In caso di compromissione del container, l’attaccante non otterrebbe i permessi di root del sistema host.

I Pod: Un concetto nativo

Docker si concentra sul container singolo. Per gestire gruppi di container, devi usare strumenti esterni come Docker Compose o Kubernetes.

Podman, invece, ha il concetto di pod integrato. Un pod è un gruppo di container che condividono lo stesso network e gli stessi volumi.

Esempio pratico:

# Crea un pod
podman pod create --name webapp -p 80:80
# Aggiungi Nginx al pod
podman run -d --pod webapp --name nginx nginx
# Aggiungi MySQL al pod
podman run -d --pod webapp --name mysql -e MYSQL_ROOT_PASSWORD=secret mysql:8.0

Il vantaggio? Puoi esportare questa configurazione in un file YAML per Kubernetes:

podman generate kube webapp > webapp-pod.yaml

Installazione di Podman su Linux

Installare Podman è semplice e richiede meno di 5 minuti.

Nota: Questa guida è stata testata su Ubuntu Server 22.04 LTS e 24.04 LTS, quest’ultima installata sul YouYeeToo K1, ma i comandi funzionano anche su Debian, RHEL, Fedora e Rocky Linux con le dovute variazioni.

Installazione su Ubuntu / Debian

Apriamo il terminale, assicurandoci di avere i permessi di root e lanciamo:

# Aggiorniamo la lista dei pacchetti
sudo apt update
# Installiamo Podman
sudo apt install -y podman
# Per la compatibilità con Docker Compose:
sudo apt install -y podman-compose
# Verfifica della versione
podman --version

Comandi essenziali per iniziare con Podman

La CLI di Podman è quasi identica a Docker. Se conosci docker, puoi iniziare subito.

Azione Comando Docker Comando Podman
Eseguire un container docker run -d nginx podman run -d nginx
Listare i container attivi docker ps podman ps
Fermare un container docker stop <id> podman stop <id>
Rimuovere un container docker rm <id> podman rm <id>
Eseguire un comando in un container docker exec -it <id> bash podman exec -it <id> bash

Pro-tip: Puoi creare un alias per una transizione immediata ( solo se docker non è presente effettivamente nel sistema ):

alias docker=podman

Container rootless: come funziona

La caratteristica più importante di Podman è il supporto nativo ai rootless containers. Ma come funziona tecnicamente?

Quando un utente normale esegue podman run, Podman crea un user namespace che mappa l’utente root all’interno del container su un utente non privilegiato sull’host. Se un attaccante riesce a “fuggire” dal container, sull’host avrà i permessi dell’utente che ha avviato il container, non di root.

Vantaggi dei container rootless:

  1. Sicurezza: Riduce la superficie di attacco
  2. Conformità: Soddisfa i requisiti di sicurezza di molti standard
  3. Multi-tenancy: Più utenti possono eseguire container sullo stesso host
  4. Nessun sudo: Semplifica l’automazione e i script CI/CD

Attenzione: I container rootless hanno alcune limitazioni. Ad esempio, non possono mappare porte privilegiate (1-1024) sull’host a meno di configurazioni aggiuntive.

Proviamo subito a eseguire un container rootless:

# Esegui Nginx in background sulla porta 8080
podman run -d --name webserver -p 8080:80 nginx
# Verifica che sia in esecuzione (nota: nessun sudo!)
podman ps
# Verifica il webserver
curl http://localhost:8080

Attenzione: Abbiamo appena eseguito un container web senza permessi di root. Su Docker avremmo dovuto usare sudo o aggiungere la nostra utenza al gruppo docker.

Quando scegliere Podman e quando restare su Docker?

Scegli Podman se:

  • La sicurezza è prioritaria
  • Stai migrando a Kubernetes
  • Hai un server di produzione e vuoi evitare il single point of failure
  • Lavori in ambienti enterprise

Scegli Docker se:

  • Hai già investito molto in Docker (file compose, pipeline CI/CD)
  • Hai bisogno di Docker Swarm
  • L’ecosistema di terze parti è più maturo su Docker
  • Sviluppi su macOS/Windows (anche se Podman Desktop è un’ottima alternativa)

Considerazioni finali e best practice

Abbiamo esplorato Podman, un motore per container moderno e sicuro che si pone come un’alternativa valida e in molti casi superiore a Docker. La sua architettura senza demone e il supporto nativo ai container rootless lo rendono ideale per ambienti in cui la sicurezza e la stabilità sono cruciali.

La containerizzazione con Podman consente di svincolare le applicazioni dal sistema operativo, semplificando aggiornamenti e portabilità. È una scelta particolarmente adatta a chi desidera ambienti coerenti, facilmente replicabili e pronti per l’automazione DevOps.

Con le giuste attenzioni alla configurazione, Podman può diventare la vostra scelta predefinita per la containerizzazione, coniugando la potenza e la flessibilità dei container con la sicurezza e l’efficienza di un’architettura moderna.

FAQ – Domande frequenti su Podman

1. Posso usare Podman con i file docker-compose.yml?
Sì! Installa podman-compose e usa podman-compose up -d.

2. Podman supporta le immagini Docker?
Sì. Podman è compatibile con le immagini OCI e Docker.

3. È possibile migrare da Docker a Podman?
Sì. Puoi esportare le immagini con docker save e importarle con podman load.

4. Podman è più veloce di Docker?
Generalmente sì, perché non ha un demone sempre in esecuzione che consuma risorse.

5. Esiste un’alternativa a Docker Desktop con Podman?
Sì, Podman Desktop è un’applicazione GUI gratuita e open-source per Windows, macOS e Linux.

 

Happy dev!