Podman Compose: un'alternativa rootless a Docker Compose
Podman Compose è uno strumento basato su Python che legge i file Docker Compose ed esegue applicazioni multi-container usando l'architettura rootless e senza demone di Podman per ambienti di sviluppo orientati alla sicurezza.
Poniamo che tu abbia un file docker-compose.yml che funziona da mesi. Ma ora dovresti usare Podman al posto di Docker e non sai se devi modificare il file o ripartire da zero. Il tuo ambiente di sviluppo locale dipende da quel file Compose e rifare tutto da capo non è esattamente qualcosa per cui hai tempo.
La buona notizia è che Podman Compose ti permette di eseguire i file Compose esistenti con Podman invece di Docker. È un livello di compatibilità basato su Python che traduce le definizioni Compose in comandi Podman, così puoi continuare a usare il flusso di lavoro multi-container a cui sei abituato.
In questo articolo ti mostro cos'è Podman Compose, come installarlo e come avviare la tua prima applicazione multi-container. Se sei alle prime armi con alcuni dei concetti trattati qui, iscriviti al nostrocorso Containerization and Virtualization Concepts per apprendere le basi.
Che cos'è Podman Compose?
Podman Compose è uno strumento basato su Python che legge i tuoi file docker-compose.yml e li traduce in comandi Podman.
Continui a scrivere un normale fileDocker Compose con servizi, reti e volumi. Podman Compose analizza quel file ed esegue i comandi podman equivalenti per avviare i container. Fa il lavoro di traduzione al posto tuo, così non devi convertire manualmente la sintassi Compose in comandi della CLI Podman.
È importante notare che Podman Compose non è un sostituto drop-in di Docker Compose.
È un livello di compatibilità. Alcune funzionalità di Docker Compose funzionano subito, altre richiedono aggiustamenti e alcune non funzionano affatto. L'obiettivo è la compatibilità, ma non replica ogni singolo comportamento di Docker Compose.
Un altro modo per pensarci: Docker Compose parla direttamente con il demone Docker. Podman Compose parla con la CLI di Podman, che poi gestisce i container senza un demone. Il risultato sembra simile, ma la meccanica sottostante è diversa.
Questo significa che puoi riutilizzare la maggior parte dei file Compose esistenti, ma devi capire dove emergono le differenze.
Perché usare Podman Compose?
Podman Compose ti permette di eseguire applicazioni multi-container senza installare Docker.
Rispetto a Docker, ottieni container rootless di default. Podman esegue i container senza richiedere privilegi di root. In parole povere, c'è meno rischio se un container viene compromesso. Docker richiede che il demone giri come root, anche se sopra stai eseguendo container rootless.
Questo rende Podman Compose più adatto ad ambienti orientati alla sicurezza. Se lavori su server Linux blindati o in contesti dove non è consentito eseguire un demone a livello root, Podman Compose ti offre il flusso di lavoro multi-container di cui hai bisogno.
È utile anche per sviluppo e test. Puoi avviare ambienti locali, testare configurazioni dei container e convalidare i file Compose senza avere Docker installato. È ideale per deployment leggeri dove non ti serve un orchestratore completo.
Detto ciò, Podman Compose non è ideale in ogni situazione.
Se esegui carichi produttivi su larga scala, vorrai usare Kubernetes o Docker Swarm. Podman Compose ha anche un supporto più debole su macOS e Windows rispetto a Linux, quindi l'esperienza cross-platform non sarà altrettanto fluida. E se il tuo team è già investito nell'ecosistema Docker con plugin e tool personalizzati, passare a Podman Compose significa ricostruire parte di quel flusso di lavoro.
In conclusione, usa Podman Compose quando ti servono container rootless, ambienti security-first o un setup di sviluppo senza Docker.
Installare Podman Compose
Podman Compose dà il meglio su Linux, dove Podman gira nativamente.
Puoi installarlo su macOS e Windows, ma dovrai prima eseguire Podman dentro una macchina virtuale. Questo aggiunge complessità e non è fluido come su Linux. Su macOS o Windows, aspettati passaggi extra di setup e possibili stranezze di rete.
Installazione su Linux
Il modo più semplice per installare Podman Compose è tramite pip.
Le versioni dei gestori pacchetti tendono a essere in ritardo rispetto a PyPI, quindi potresti non ottenere subito le funzionalità più recenti.
Installazione su macOS e Windows
Su macOS e Windows, prima devi configurare Podman Desktop o usare podman machine per creare una VM Linux. Una volta avviata, installa Podman Compose con pip all'interno di quell'ambiente.
Quindi il primo passaggio è connettersi alla macchina:
Questo processo in due passaggi significa che non stai eseguendo Podman Compose direttamente sul tuo OS host: lo stai eseguendo dentro la VM Linux creata da Podman.
Verifica dell'installazione
Esegui questo comando per verificare che Podman Compose sia stato installato correttamente:
Dovresti vedere il numero di versione stampato nel terminale. Se ottieni un errore "command not found", assicurati che la directory bin di Python sia nel tuo PATH.
Questo è tutto ciò che ti serve per iniziare a usare Podman Compose.
Eseguire un file Compose con Podman Compose
Hai installato Podman Compose: ora ti mostro come eseguire un'applicazione reale.
Usare un file Docker Compose esistente
Podman Compose legge i file standard docker-compose.yml. Non devi rinominare nulla o cambiare formato.
Ecco una semplice applicazione FastAPI definita in un file Compose:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return{"message":"Hello from FastAPI"}
@app.get("/health")
def health_check():
return{"status":"healthy"}Offerto da
La maggior parte delle funzionalità di Docker Compose funziona subito con Podman Compose. Questo include:
Pull delle immagini e creazione dei container
Mapping delle porte
Mount dei volumi (sia volumi nominati che bind mount)
Variabili d'ambiente
Networking di base tra servizi
Ma alcune funzionalità richiedono aggiustamenti. Se il tuo file Compose usa plugin specifici di Docker, driver di rete personalizzati o argomenti di build avanzati, probabilmente dovrai modificare quelle sezioni.
Anche il networking di Podman Compose è diverso: i servizi non si risolvono automaticamente per nome nello stesso modo di Docker Compose.
Questo esegue il pull delle immagini, crea i container e avvia tutto ciò che è definito nel file Compose. Aggiungi -d per eseguire in modalità detached se non vuoi i log in streaming nel terminale.
Output di Podman
Ora puoi aprire l'app sulla porta 8000 della tua macchina (o su un'istanza Ubuntu remota come sto usando io). Vedrai quanto segue:
I comandi rispecchiano la sintassi di Docker Compose, quindi se conosci già docker-compose, ti sentirai a casa.
Podman Compose vs Docker Compose e altri
Podman Compose e Docker Compose puntano allo stesso obiettivo, ma funzionano in modo diverso sotto il cofano. Ti spiego come.
Esecuzione rootless
Docker Compose richiede che il demone Docker giri come root. Anche quando configuri container rootless, il demone stesso ha bisogno di privilegi elevati. Podman Compose gira interamente senza accesso root di default. I container partono come tuo utente, non come servizio di sistema, riducendo le superfici d'attacco e rendendo Podman Compose più sicuro in ambienti multiutente.
Comportamento del networking
Docker Compose crea una rete bridge predefinita per i servizi. I container possono raggiungersi per nome del servizio in automatico.
Podman Compose usa invece il networking basato su pod. Tutti i container del file Compose vengono raggruppati in un singolo pod di Podman e condividono lo stesso namespace di rete. Questo significa che i container comunicano su localhost anziché per nomi di servizio, cosa che può sorprendere gli utenti Docker.
Se la tua app si aspetta di raggiungere un database a db:5432, dovrai cambiarlo in localhost:5432 quando esegui con Podman Compose.
Raggruppamento basato su pod
Docker Compose gestisce container individuali. Podman Compose crea un pod, un raggruppamento ispirato a Kubernetes in cui i container condividono la rete e possono condividere lo storage. Questo modello allinea Podman Compose ai pattern di Kubernetes, semplificando una futura migrazione se ti serve l'orchestrazione.
Integrazione con systemd
Podman si integra con systemd per gestire i container come servizi di sistema. Puoi generare unit file systemd dai container in esecuzione e gestirli come qualsiasi altro servizio Linux. Docker non offre un'integrazione nativa con systemd a livello di container.
Altre opzioni
Se Podman Compose non fa al caso tuo, hai queste alternative:
Podman nativo con systemd ti consente di gestire i container come servizi senza file Compose
Kubernetes ti offre un'orchestrazione completa se esegui carichi produttivi su larga scala, anche se è molto più pesante degli strumenti in stile Compose
Podman Compose si colloca tra comandi container semplici e orchestrazione completa. Ti offre workflow multi-container senza il requisito del demone di Docker.
Reti e volumi in Podman Compose (cosa cambia)
Gli utenti Docker che passano a Podman Compose di solito si lamentano di due cose: networking e volumi. In questa sezione passo in rassegna le differenze.
Comunicazione tra servizi
In Docker Compose ti connetti ad altri servizi per nome del servizio. Se hai un servizio web e un database chiamato db, la tua app si connette a db:5432.
Podman Compose mette tutti i servizi in un singolo pod. I container nello stesso pod condividono un namespace di rete, il che significa che usano tutti localhost. La stringa di connessione al database cambia da db:5432 a localhost:5432.
Questo coglie molti di sorpresa. La tua app parte, prova a connettersi a db:5432 e fallisce perché quell'hostname non si risolve. Dovrai aggiornare le stringhe di connessione o le variabili d'ambiente per usare localhost.
Reti predefinite
Docker Compose crea una rete bridge per i servizi. Ogni container ottiene il proprio indirizzo IP su quella rete e il resolver DNS di Docker gestisce la risoluzione dei nomi dei servizi.
Podman Compose non crea reti separate di default. Il modello a pod fa sì che i container condividano la rete a un livello più basso. Se definisci reti personalizzate nel file Compose, Podman Compose proverà a crearle, ma il comportamento potrebbe non coincidere esattamente con Docker.
Comportamento di volumi e bind mount
Volumi e bind mount funzionano per lo più allo stesso modo tra Docker Compose e Podman Compose. Li definisci nel file Compose e Podman li crea.
Ma c'è un aspetto legato ai permessi.
Podman gira rootless di default, quindi proprietà dei file e permessi possono comportarsi in modo diverso. Un bind mount che in Docker funziona senza problemi potrebbe darti errori di permesso in Podman perché l'utente nel container non corrisponde all'UID del tuo utente host.
Noterai anche posizioni dei volumi differenti. Docker conserva i volumi in /var/lib/docker/volumes/mentre Podman li conserva in ~/.local/share/containers/storage/volumes/ per i container rootless.
Le correzioni sono semplici se sai cosa succede. Quindi adegua le stringhe di connessione per il networking e verifica i permessi dei file per problemi con i volumi.
Limitazioni comuni e insidie
Podman Compose funziona bene per setup multi-container di base, ma ha limitazioni che dovresti conoscere prima di adottarlo.
Funzionalità Compose non supportate
Non tutte le funzionalità di Docker Compose si traducono in Podman Compose. Le build con contesti e argomenti complessi spesso falliscono o si comportano diversamente. I plugin ed estensioni di Docker Compose non funzionano affatto. Funzionalità come il passthrough GPU, health check avanzati e alcune modalità di rete non funzionano o richiedono workaround.
Se il tuo file Compose fa ampio uso delle funzionalità della versione 3.x di docker-compose.yml, aspettati un po' di tentativi ed errori.
Aspettative di rete diverse da Docker
I servizi non comunicano per nome del servizio: usano invece localhost. Questo rompe le app che codificano in duro i nomi dei servizi nelle stringhe di connessione.
Le reti bridge personalizzate non si comportano come in Docker. La risoluzione DNS funziona diversamente a causa del modello a pod.
Aspettati di dedicare un po' di tempo ad aggiornare configurazioni e variabili d'ambiente per allinearti al modello di rete di Podman, ma è un'operazione una tantum.
Limitazioni di piattaforma su macOS/Windows
Podman Compose funziona al meglio su Linux. Su macOS e Windows, esegui tutto dentro una VM Linux, aggiungendo livelli di complessità. La sincronizzazione dei file tra host e VM può essere più lenta. Il networking tra host e container richiede configurazioni extra.
Se il tuo team usa macOS o Windows per lo sviluppo, Docker Compose è di solito l'opzione più fluida.
Maturità dello strumento e lacune nell'ecosistema
Podman Compose è più giovane di Docker Compose. La community è più piccola, quindi trovare risposte a problemi specifici richiede più ricerca. Gli strumenti di terze parti e le integrazioni sono costruiti prima per Docker, poi per Podman (se mai). Il supporto negli IDE e gli strumenti GUI sono indietro rispetto all'ecosistema Docker.
Non troverai così tante risposte su Stack Overflow o issue su GitHub per problemi di Podman Compose.
Queste limitazioni non rendono Podman Compose inutilizzabile, ma sono aspetti da considerare prima di adottarlo. Gli utenti di Docker Compose non incontrano affatto queste frizioni.
Best practice per usare Podman Compose
Ecco come evitare i problemi più comuni con Podman Compose.
Parti da file Compose semplici. Non migrare per primo il setup Docker più complesso. Inizia con un'app a singolo servizio, verifica che funzioni, poi aggiungi altro. Così isoli i problemi man mano che emergono.
Testa presto il networking rootless. Avvia un'app multi-servizio e verifica che i container comunichino su localhost. Cambia le stringhe di connessione dai nomi dei servizi a localhost. Se la rete non funziona come ti aspetti, lo scoprirai subito.
Sii esplicito con volumi e porte. Non affidarti ai default. Specifica i percorsi completi per i bind mount. Definisci i mapping delle porte. Imposta esplicitamente i permessi dei file se monti directory dell'host. Il modello rootless di Podman significa che assunzioni valide in Docker qui possono fallire.
Usa Podman Compose soprattutto per sviluppo e produzione leggera. Gestisce bene ambienti di sviluppo locali e piccoli deployment. Per la produzione su larga scala, ti servirà Kubernetes o un'altra piattaforma di orchestrazione. Podman Compose non è pensato per cluster ad alta disponibilità o service mesh complessi.
Conclusione
Podman Compose ti offre un modo pratico per eseguire applicazioni multi-container con Podman invece di Docker. Legge i file Compose esistenti e li traduce in comandi Podman, così non devi imparare un flusso di lavoro completamente nuovo. Ma non è un clone perfetto di Docker Compose. Il networking funziona in modo diverso, alcune funzionalità non sono supportate e dovrai adeguare stringhe di connessione e configurazioni al modello basato su pod di Podman.
Infine, ti consiglio di approfondire le differenze tra Docker e Podman per saperne di più sui rispettivi approcci architetturali e sulla compatibilità.
Senior Data Scientist con base in Croazia. Top Tech Writer con oltre 700 articoli pubblicati, per più di 10 milioni di visualizzazioni. Autore del libro Machine Learning Automation with TPOT.
Docker Compose: domande frequenti
Che cos'è Podman Compose?⌄
Podman Compose è uno strumento basato su Python che legge i file Docker Compose e li traduce in comandi Podman. Ti permette di eseguire applicazioni multi-container usando Podman invece di Docker, offrendoti lo stesso workflow di Compose senza richiedere un demone o privilegi di root.
Posso usare i file Docker Compose con Podman Compose?⌄
Sì, Podman Compose legge i file standard docker-compose.yml. La maggior parte delle funzionalità di base di Docker Compose funziona subito, anche se dovrai cambiare le stringhe di connessione dai nomi dei servizi a localhost a causa del modello di rete basato su pod di Podman.
Qual è la principale differenza tra Podman Compose e Docker Compose?⌄
Podman Compose gira rootless di default e non richiede un demone, mentre Docker Compose ha bisogno del demone Docker in esecuzione come root. Podman Compose usa anche il networking basato su pod, dove i container condividono localhost, mentre Docker Compose assegna a ogni servizio il proprio hostname.
Perché i miei servizi non riescono a connettersi quando uso Podman Compose?⌄
Podman Compose mette tutti i servizi in un singolo pod che condivide un namespace di rete, quindi i container comunicano su localhost invece che per nomi di servizio. Dovrai cambiare le stringhe di connessione come db:5432 in localhost:5432 nelle configurazioni della tua applicazione.
Podman Compose funziona su macOS e Windows?⌄
Sì, ma prima dovrai eseguire Podman dentro una VM Linux usando Podman Desktop o podman machine. Questo aggiunge complessità rispetto a Linux, dove Podman gira nativamente, e potresti incontrare sincronizzazione file più lenta e stranezze di rete.
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Poniamo che tu abbia un file
docker-compose.ymlche funziona da mesi. Ma ora dovresti usare Podman al posto di Docker e non sai se devi modificare il file o ripartire da zero. Il tuo ambiente di sviluppo locale dipende da quel file Compose e rifare tutto da capo non è esattamente qualcosa per cui hai tempo.La buona notizia è che Podman Compose ti permette di eseguire i file Compose esistenti con Podman invece di Docker. È un livello di compatibilità basato su Python che traduce le definizioni Compose in comandi Podman, così puoi continuare a usare il flusso di lavoro multi-container a cui sei abituato.
In questo articolo ti mostro cos'è Podman Compose, come installarlo e come avviare la tua prima applicazione multi-container. Se sei alle prime armi con alcuni dei concetti trattati qui, iscriviti al nostro corso Containerization and Virtualization Concepts per apprendere le basi.
Che cos'è Podman Compose?
Podman Compose è uno strumento basato su Python che legge i tuoi file
docker-compose.ymle li traduce in comandi Podman.Continui a scrivere un normale file Docker Compose con servizi, reti e volumi. Podman Compose analizza quel file ed esegue i comandi
podmanequivalenti per avviare i container. Fa il lavoro di traduzione al posto tuo, così non devi convertire manualmente la sintassi Compose in comandi della CLI Podman.È importante notare che Podman Compose non è un sostituto drop-in di Docker Compose.
È un livello di compatibilità. Alcune funzionalità di Docker Compose funzionano subito, altre richiedono aggiustamenti e alcune non funzionano affatto. L'obiettivo è la compatibilità, ma non replica ogni singolo comportamento di Docker Compose.
Un altro modo per pensarci: Docker Compose parla direttamente con il demone Docker. Podman Compose parla con la CLI di Podman, che poi gestisce i container senza un demone. Il risultato sembra simile, ma la meccanica sottostante è diversa.
Questo significa che puoi riutilizzare la maggior parte dei file Compose esistenti, ma devi capire dove emergono le differenze.
Perché usare Podman Compose?
Podman Compose ti permette di eseguire applicazioni multi-container senza installare Docker.
Rispetto a Docker, ottieni container rootless di default. Podman esegue i container senza richiedere privilegi di root. In parole povere, c'è meno rischio se un container viene compromesso. Docker richiede che il demone giri come root, anche se sopra stai eseguendo container rootless.
Questo rende Podman Compose più adatto ad ambienti orientati alla sicurezza. Se lavori su server Linux blindati o in contesti dove non è consentito eseguire un demone a livello root, Podman Compose ti offre il flusso di lavoro multi-container di cui hai bisogno.
È utile anche per sviluppo e test. Puoi avviare ambienti locali, testare configurazioni dei container e convalidare i file Compose senza avere Docker installato. È ideale per deployment leggeri dove non ti serve un orchestratore completo.
Detto ciò, Podman Compose non è ideale in ogni situazione.
Se esegui carichi produttivi su larga scala, vorrai usare Kubernetes o Docker Swarm. Podman Compose ha anche un supporto più debole su macOS e Windows rispetto a Linux, quindi l'esperienza cross-platform non sarà altrettanto fluida. E se il tuo team è già investito nell'ecosistema Docker con plugin e tool personalizzati, passare a Podman Compose significa ricostruire parte di quel flusso di lavoro.
In conclusione, usa Podman Compose quando ti servono container rootless, ambienti security-first o un setup di sviluppo senza Docker.
Installare Podman Compose
Podman Compose dà il meglio su Linux, dove Podman gira nativamente.
Puoi installarlo su macOS e Windows, ma dovrai prima eseguire Podman dentro una macchina virtuale. Questo aggiunge complessità e non è fluido come su Linux. Su macOS o Windows, aspettati passaggi extra di setup e possibili stranezze di rete.
Installazione su Linux
Il modo più semplice per installare Podman Compose è tramite
pip.Installazione di Podman compose su Linux
Questo installa l'ultima versione da PyPI. Non devi preoccuparti della gestione della versione di Python: se hai Python 3 installato, sei a posto.
Alcune distribuzioni Linux includono anche Podman Compose nei propri repository. Su Fedora, RHEL e CentOS puoi usare:
Su sistemi Ubuntu e Debian, esegui quanto segue:
Le versioni dei gestori pacchetti tendono a essere in ritardo rispetto a PyPI, quindi potresti non ottenere subito le funzionalità più recenti.
Installazione su macOS e Windows
Su macOS e Windows, prima devi configurare Podman Desktop o usare
podman machineper creare una VM Linux. Una volta avviata, installa Podman Compose conpipall'interno di quell'ambiente.Quindi il primo passaggio è connettersi alla macchina:
Accesso via SSH alla VM Podman
Poiché la VM è basata su Fedora, puoi eseguire questo comando per installare Podman Compose:
Installazione di Podman Compose
Questo processo in due passaggi significa che non stai eseguendo Podman Compose direttamente sul tuo OS host: lo stai eseguendo dentro la VM Linux creata da Podman.
Verifica dell'installazione
Esegui questo comando per verificare che Podman Compose sia stato installato correttamente:
Verifica dell'installazione di Podman Compose
Dovresti vedere il numero di versione stampato nel terminale. Se ottieni un errore "command not found", assicurati che la directory
bindi Python sia nel tuo PATH.Questo è tutto ciò che ti serve per iniziare a usare Podman Compose.
Eseguire un file Compose con Podman Compose
Hai installato Podman Compose: ora ti mostro come eseguire un'applicazione reale.
Usare un file Docker Compose esistente
Podman Compose legge i file standard
docker-compose.yml. Non devi rinominare nulla o cambiare formato.Ecco una semplice applicazione FastAPI definita in un file Compose:
Con il codice dell'applicazione in
src/main.py:La maggior parte delle funzionalità di Docker Compose funziona subito con Podman Compose. Questo include:
Ma alcune funzionalità richiedono aggiustamenti. Se il tuo file Compose usa plugin specifici di Docker, driver di rete personalizzati o argomenti di build avanzati, probabilmente dovrai modificare quelle sezioni.
Anche il networking di Podman Compose è diverso: i servizi non si risolvono automaticamente per nome nello stesso modo di Docker Compose.
Comandi di base di Podman Compose
Ora puoi avviare i servizi con questo comando:
Questo esegue il pull delle immagini, crea i container e avvia tutto ciò che è definito nel file Compose. Aggiungi
-dper eseguire in modalità detached se non vuoi i log in streaming nel terminale.Output di Podman
Ora puoi aprire l'app sulla porta 8000 della tua macchina (o su un'istanza Ubuntu remota come sto usando io). Vedrai quanto segue:
Applicazione FastAPI in esecuzione tramite Podman
Per interrompere i servizi in esecuzione, esegui:
Questo arresta e rimuove i container. I volumi restano a meno che tu non aggiunga
--volumesper rimuoverli.Per controllare i log dei servizi, esegui questo comando:
Aggiungi
-fper seguirli in tempo reale o specifica un nome di servizio per vedere i log solo di quel container.Per pulire tutto, inclusi container, reti e volumi, esegui:
I comandi rispecchiano la sintassi di Docker Compose, quindi se conosci già
docker-compose, ti sentirai a casa.Podman Compose vs Docker Compose e altri
Podman Compose e Docker Compose puntano allo stesso obiettivo, ma funzionano in modo diverso sotto il cofano. Ti spiego come.
Esecuzione rootless
Docker Compose richiede che il demone Docker giri come root. Anche quando configuri container rootless, il demone stesso ha bisogno di privilegi elevati. Podman Compose gira interamente senza accesso root di default. I container partono come tuo utente, non come servizio di sistema, riducendo le superfici d'attacco e rendendo Podman Compose più sicuro in ambienti multiutente.
Comportamento del networking
Docker Compose crea una rete bridge predefinita per i servizi. I container possono raggiungersi per nome del servizio in automatico.
Podman Compose usa invece il networking basato su pod. Tutti i container del file Compose vengono raggruppati in un singolo pod di Podman e condividono lo stesso namespace di rete. Questo significa che i container comunicano su
localhostanziché per nomi di servizio, cosa che può sorprendere gli utenti Docker.Se la tua app si aspetta di raggiungere un database a
db:5432, dovrai cambiarlo inlocalhost:5432quando esegui con Podman Compose.Raggruppamento basato su pod
Docker Compose gestisce container individuali. Podman Compose crea un pod, un raggruppamento ispirato a Kubernetes in cui i container condividono la rete e possono condividere lo storage. Questo modello allinea Podman Compose ai pattern di Kubernetes, semplificando una futura migrazione se ti serve l'orchestrazione.
Integrazione con systemd
Podman si integra con systemd per gestire i container come servizi di sistema. Puoi generare unit file systemd dai container in esecuzione e gestirli come qualsiasi altro servizio Linux. Docker non offre un'integrazione nativa con systemd a livello di container.
Altre opzioni
Se Podman Compose non fa al caso tuo, hai queste alternative:
Podman Compose si colloca tra comandi container semplici e orchestrazione completa. Ti offre workflow multi-container senza il requisito del demone di Docker.
Reti e volumi in Podman Compose (cosa cambia)
Gli utenti Docker che passano a Podman Compose di solito si lamentano di due cose: networking e volumi. In questa sezione passo in rassegna le differenze.
Comunicazione tra servizi
In Docker Compose ti connetti ad altri servizi per nome del servizio. Se hai un servizio web e un database chiamato
db, la tua app si connette adb:5432.Podman Compose mette tutti i servizi in un singolo pod. I container nello stesso pod condividono un namespace di rete, il che significa che usano tutti
localhost. La stringa di connessione al database cambia dadb:5432alocalhost:5432.Questo coglie molti di sorpresa. La tua app parte, prova a connettersi a
db:5432e fallisce perché quell'hostname non si risolve. Dovrai aggiornare le stringhe di connessione o le variabili d'ambiente per usarelocalhost.Reti predefinite
Docker Compose crea una rete bridge per i servizi. Ogni container ottiene il proprio indirizzo IP su quella rete e il resolver DNS di Docker gestisce la risoluzione dei nomi dei servizi.
Podman Compose non crea reti separate di default. Il modello a pod fa sì che i container condividano la rete a un livello più basso. Se definisci reti personalizzate nel file Compose, Podman Compose proverà a crearle, ma il comportamento potrebbe non coincidere esattamente con Docker.
Comportamento di volumi e bind mount
Volumi e bind mount funzionano per lo più allo stesso modo tra Docker Compose e Podman Compose. Li definisci nel file Compose e Podman li crea.
Ma c'è un aspetto legato ai permessi.
Podman gira rootless di default, quindi proprietà dei file e permessi possono comportarsi in modo diverso. Un bind mount che in Docker funziona senza problemi potrebbe darti errori di permesso in Podman perché l'utente nel container non corrisponde all'UID del tuo utente host.
Noterai anche posizioni dei volumi differenti. Docker conserva i volumi in
/var/lib/docker/volumes/mentre Podman li conserva in~/.local/share/containers/storage/volumes/per i container rootless.Le correzioni sono semplici se sai cosa succede. Quindi adegua le stringhe di connessione per il networking e verifica i permessi dei file per problemi con i volumi.
Limitazioni comuni e insidie
Podman Compose funziona bene per setup multi-container di base, ma ha limitazioni che dovresti conoscere prima di adottarlo.
Funzionalità Compose non supportate
Non tutte le funzionalità di Docker Compose si traducono in Podman Compose. Le build con contesti e argomenti complessi spesso falliscono o si comportano diversamente. I plugin ed estensioni di Docker Compose non funzionano affatto. Funzionalità come il passthrough GPU, health check avanzati e alcune modalità di rete non funzionano o richiedono workaround.
Se il tuo file Compose fa ampio uso delle funzionalità della versione 3.x di
docker-compose.yml, aspettati un po' di tentativi ed errori.Aspettative di rete diverse da Docker
I servizi non comunicano per nome del servizio: usano invece
localhost. Questo rompe le app che codificano in duro i nomi dei servizi nelle stringhe di connessione.Le reti bridge personalizzate non si comportano come in Docker. La risoluzione DNS funziona diversamente a causa del modello a pod.
Aspettati di dedicare un po' di tempo ad aggiornare configurazioni e variabili d'ambiente per allinearti al modello di rete di Podman, ma è un'operazione una tantum.
Limitazioni di piattaforma su macOS/Windows
Podman Compose funziona al meglio su Linux. Su macOS e Windows, esegui tutto dentro una VM Linux, aggiungendo livelli di complessità. La sincronizzazione dei file tra host e VM può essere più lenta. Il networking tra host e container richiede configurazioni extra.
Se il tuo team usa macOS o Windows per lo sviluppo, Docker Compose è di solito l'opzione più fluida.
Maturità dello strumento e lacune nell'ecosistema
Podman Compose è più giovane di Docker Compose. La community è più piccola, quindi trovare risposte a problemi specifici richiede più ricerca. Gli strumenti di terze parti e le integrazioni sono costruiti prima per Docker, poi per Podman (se mai). Il supporto negli IDE e gli strumenti GUI sono indietro rispetto all'ecosistema Docker.
Non troverai così tante risposte su Stack Overflow o issue su GitHub per problemi di Podman Compose.
Queste limitazioni non rendono Podman Compose inutilizzabile, ma sono aspetti da considerare prima di adottarlo. Gli utenti di Docker Compose non incontrano affatto queste frizioni.
Best practice per usare Podman Compose
Ecco come evitare i problemi più comuni con Podman Compose.
Parti da file Compose semplici. Non migrare per primo il setup Docker più complesso. Inizia con un'app a singolo servizio, verifica che funzioni, poi aggiungi altro. Così isoli i problemi man mano che emergono.
Testa presto il networking rootless. Avvia un'app multi-servizio e verifica che i container comunichino su
localhost. Cambia le stringhe di connessione dai nomi dei servizi alocalhost. Se la rete non funziona come ti aspetti, lo scoprirai subito.Sii esplicito con volumi e porte. Non affidarti ai default. Specifica i percorsi completi per i bind mount. Definisci i mapping delle porte. Imposta esplicitamente i permessi dei file se monti directory dell'host. Il modello rootless di Podman significa che assunzioni valide in Docker qui possono fallire.
Usa Podman Compose soprattutto per sviluppo e produzione leggera. Gestisce bene ambienti di sviluppo locali e piccoli deployment. Per la produzione su larga scala, ti servirà Kubernetes o un'altra piattaforma di orchestrazione. Podman Compose non è pensato per cluster ad alta disponibilità o service mesh complessi.
Conclusione
Podman Compose ti offre un modo pratico per eseguire applicazioni multi-container con Podman invece di Docker. Legge i file Compose esistenti e li traduce in comandi Podman, così non devi imparare un flusso di lavoro completamente nuovo. Ma non è un clone perfetto di Docker Compose. Il networking funziona in modo diverso, alcune funzionalità non sono supportate e dovrai adeguare stringhe di connessione e configurazioni al modello basato su pod di Podman.
Infine, ti consiglio di approfondire le differenze tra Docker e Podman per saperne di più sui rispettivi approcci architetturali e sulla compatibilità.