Corso
I container eseguono le applicazioni e i carichi di lavoro dati del mondo. Concettualizzati per la prima volta negli anni ’70, i container offrono un modo per impacchettare tutto il necessario per eseguire un’applicazione o un workload in un unico oggetto. I container aiutano a risolvere il problema del “sul mio computer funziona” offrendo una soluzione isolata e portabile per sviluppare, testare e distribuire codice. Strumenti come Kubernetes si basano pesantemente sui container come componente chiave della propria architettura. Per ora, i container sono qui per restare.
Per eseguire questi container, ti serve una soluzione di gestione dei container. Entrano in gioco Docker e Podman.
Docker e Podman vengono usati per creare, gestire e distribuire container. Insieme, analizzeremo somiglianze e differenze tra Docker e Podman, insieme alle funzionalità specifiche di ciascuno. Esploreremo aspetti come l’architettura basata su demone o senza demone, la gestione multi-container e l’integrazione multipiattaforma. Alla fine, avrai le informazioni necessarie per scegliere la soluzione di container perfetta per le tue esigenze.
Se sei alle prime armi con questi strumenti, dai un’occhiata anche al nostro corso Introduzione a Docker e al tutorial Introduzione a Podman per il Machine Learning.
Cosa sono Podman e Docker?
Partiamo da una panoramica di questi strumenti per avviare il nostro confronto:
Panoramica di Docker
Docker è lo standard de facto per creare, eseguire e distribuire container. I container sono oggetti che combinano dipendenze a livello di sistema operativo e del codice applicativo per impacchettare ed eseguire elementi come applicazioni full-stack o pipeline ETL in un ambiente isolato. I container sono come piccoli computer che includono solo l’essenziale per eseguire un certo tipo di codice.
Docker è piuttosto giovane ed è stato rilasciato come progetto open-source nel 2013. Da allora, il progetto è esploso.
Quando si tratta di eseguire container in ambito enterprise, quasi tutti i team software e dati si affidano a Docker.
Gli sviluppatori possono eseguire Docker sui tre principali sistemi operativi, e si integra bene con quasi tutte le tecnologie moderne. Questo significa che un Data Engineer può scrivere e impacchettare una data pipeline usando un container Docker sul proprio Mac locale e inviare quel container per l’esecuzione su AWS ECS.
Strumenti come la Docker CLI, Docker Desktop e Docker Hub rendono facile iniziare per sviluppatori di ogni livello.
Se cerchi un modo più pratico per imparare Docker, abbiamo diversi progetti Docker e informazioni sulle certificazioni Docker pensate per aiutarti a far crescere le tue competenze Docker!
Panoramica di Podman
Come Docker, Podman è uno strumento open-source per sviluppare e gestire container. Podman è stato originariamente sviluppato da Red Hat come alternativa nativa Linux a Docker ed è stato rilasciato nel 2019.
In particolare, l’architettura sottostante dei due runtime per container differisce: mentre Docker sfrutta i demoni, Podman funziona senza demone (ne parleremo tra poco).
A differenza di Docker, Podman non richiede accesso root alla macchina su cui vengono eseguiti i pod che gestisce; questo rende Podman un’opzione più attenta alla sicurezza per i team che usano i container per eseguire applicazioni e carichi di lavoro.
Gli utenti Podman hanno un’esperienza d’uso simile a quella di Docker; gli sviluppatori possono utilizzare una CLI o una GUI (Podman Desktop) per interagire con Podman nel loro ambiente locale.
Gli utenti Linux, Mac e Windows possono usare Podman per creare e testare i propri container in locale prima di distribuirli in qualche ambiente remoto, come Kubernetes.
Differenze chiave tra Podman e Docker
Architettura con demone vs senza demone
La differenza più grande tra Docker e Podman è l’architettura sottostante su cui si basano. Docker si affida fortemente a un demone, mentre Podman è senza demone.
Puoi pensare a un demone come a un processo che gira in background sul sistema operativo host. Nel caso di Docker, il suo demone è responsabile della gestione degli oggetti Docker (immagini e container) e della comunicazione con altri sistemi. Per eseguire il suo demone, Docker usa un pacchetto chiamato dockerd.
Perché è importante? Innanzitutto, i demoni in genere richiedono accesso a livello root alla macchina su cui girano. Questo si presta a vulnerabilità di sicurezza: se un attore malevolo riesce ad accedere a un demone, ha accesso all’intera macchina.
L’architettura senza demone di Podman offre alcuni vantaggi. Poiché l’esecuzione di demoni richiede quasi sempre privilegi di root, un’architettura senza demone può essere considerata “rootless”. Questo significa che gli utenti che non hanno accesso a livello di sistema alla macchina su cui girano i loro container possono comunque usare Podman; non è sempre così con Docker.
Invece di un demone, Podman usa un pacchetto Linux noto come systemd. Dato che systemd è nativo del sistema operativo Linux, Podman è spesso considerato più “leggero” di Docker; gli utenti Podman in genere vedono tempi di avvio dei container più rapidi rispetto a Docker.
Creazione di immagini e container
Nonostante le architetture fondamentalmente diverse, sia Docker che Podman condividono lo stesso scopo principale: creare ed eseguire immagini e container. Tuttavia, i loro approcci a questo processo differiscono leggermente.
Con Docker, un’immagine viene creata aggiungendo innanzitutto dei comandi a un Dockerfile. Poi si esegue un comando come docker build. Questo richiama ciascuna istruzione nel Dockerfile, costruendo alla fine un’immagine. Un’immagine può poi essere “eseguita” come container. Come avrai intuito, questo si fa usando il comando docker run e specificando un ID o un tag dell’immagine. Per creare ed eseguire più container, useremo uno strumento dedicato chiamato docker-compose, che esploreremo tra poco.
Il processo di creazione delle immagini e di esecuzione come container è quasi identico in Podman. Al posto di un Dockerfile (sebbene questo nome file funzioni comunque), gli utenti Podman creeranno un Containerfile. La sintassi per comporre l’immagine è la stessa. Una volta aggiunti i comandi appropriati al Containerfile, l’immagine può essere creata ed eseguita usando la CLI di Podman.
Per la maggior parte, Podman è compatibile con la maggior parte delle cose di Docker. Troverai differenze qua e là, ma in generale la CLI di Docker può essere sostituita con la CLI di Podman senza problemi.

Podman vs Docker Desktop
Docker Desktop per un accesso semplificato multipiattaforma
Ci sono vari modi per lavorare con Docker. I professionisti esperti di software e dati tipicamente si affidano alla Docker CLI (alias client Docker) per interagire con immagini e container Docker.
Tuttavia, esiste un modo ancora più semplice per iniziare: Docker Desktop.
Docker Desktop è uno strumento gratuito basato su GUI che fornisce un’interfaccia per creare e gestire le immagini e i container che eseguono le tue applicazioni o i tuoi workload. Un data engineer può usare Docker Desktop per visualizzare le immagini disponibili sulla propria macchina e avviare quell’immagine in un container. Allo stesso modo, uno sviluppatore software può scaricare un’immagine da Docker Hub per iniziare il prossimo progetto.
L’interfaccia è semplice e intuitiva, pur mantenendo visibilità e controllo completi sul tuo ambiente Docker.
Docker Desktop, però, offre più della sola visualizzazione e gestione degli oggetti Docker.
Gli utenti possono, ad esempio, gestire (fino al byte) le risorse disponibili per i loro oggetti Docker, collegarsi a un container in esecuzione o avviare un cluster Kubernetes sulla propria macchina locale. Gli utenti Docker Desktop possono scegliere tra centinaia di estensioni o dare il via al proprio percorso Docker con tutorial utili e ambienti di esempio. Per tua fortuna, Docker Desktop è ampiamente accessibile e gira su Mac, Windows o Linux.
Funzionalità e limiti di Podman Desktop
Podman Desktop per aspetto e utilizzo è molto simile al suo equivalente Docker. Dall’interfaccia di Podman Desktop, gli utenti possono visualizzare e gestire container, immagini, pod e volumi. Come Docker, Podman supporta plugin e integrazioni per fare cose come eseguire in locale un cluster Red Hat OpenShift o lavorare con LLM tramite Podman AI Lab.
Se hai un plugin personalizzato che vuoi usare, ottimo: puoi installarlo da Podman Desktop.
Se usi sia Docker che Podman, potresti restare sorpreso nel vedere oggetti Docker e Podman dalla UI di Podman Desktop. Non è un caso! Vedremo tra poco cosa implica. Nel frattempo, questo significa che gli utenti possono interagire sia con i loro oggetti Podman SIA con quelli Docker, il tutto da un’unica interfaccia.
Il caso d’uso più comune per i container è eseguirli tramite Kubernetes. Nonostante il titolo di standard di settore di Docker per la containerizzazione, Podman offre un’esperienza Kubernetes più robusta su Podman Desktop.
La possibilità di visualizzare e gestire risorse Kubernetes come nodi, pod, deployment (e molto altro) rende l’amministrazione e lo sviluppo Kubernetes un cittadino di prima classe su Podman Desktop. Questi strumenti, più plugin come la citata integrazione con Red Hat OpenShift, differenziano Podman come strumento orientato ai team che usano Kubernetes.
Podman Compose vs Docker Compose
Definizione e gestione di app multi-container con Docker
Alcune applicazioni e workload possono essere impacchettati in un singolo container. Altri no. Per semplificare la gestione multi-container, Docker offre uno strumento chiamato Docker Compose. Docker Compose usa un singolo file YAML per definire i componenti della tua applicazione.
Poi, usando la CLI docker-compose, questi container e servizi possono essere avviati, arrestati o ricostruiti. Un file YAML di Docker Compose potrebbe assomigliare a questo:
yaml
version: '3'
services:
app:
image: python:3.10
container_name: app
command: run app --host=0.0.0.0
database:
image: postgres:13
container_name: database
ports: 5432
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data
C’è parecchio in gioco, ma ciò che Docker Compose ci consente di fare è definire un file YAML con due servizi e un volume. Poi, il comando docker-compose up avvia questi container e avremo un’app in esecuzione.
Per i team software e data che eseguono applicazioni e workload di grandi dimensioni, Docker Compose rende facile sia lo sviluppo in locale sia la distribuzione ed esecuzione del codice in produzione.
L’approccio di Podman alle applicazioni multi-container
Eseguire applicazioni multi-container con Podman ha lo stesso aspetto e la stessa sensazione di lavorare con Docker. Podman lo fa usando Podman Compose. Come Docker Compose, Podman Compose usa file YAML per definire in modo dichiarativo i componenti di un’applicazione.
La CLI podman-compose può quindi essere usata per avviare, arrestare o riavviare i servizi definiti nel file YAML.
Nella maggior parte dei casi, podman-compose può essere usato al posto di docker-compose (ci sono alcune incompatibilità qua e là). Come con Docker, usare Podman Compose consente di gestire in modo indipendente e flessibile le applicazioni multi-container.
Di seguito, vedrai una tabella che confronta Docker e Podman.
|
Funzionalità/Aspetto |
Docker |
Podman |
|
Architettura |
Docker sfrutta un demone come componente architetturale principale. |
Architettura senza demone. |
|
Sicurezza |
Richiede privilegi di root per creare, eseguire e gestire container. |
La natura senza demone dell’architettura di Podman lo rende uno strumento di gestione dei container più attento alla sicurezza. |
|
Strumenti utente |
Docker Desktop, docker CLI |
Podman Desktop, podman CLI |
|
Compatibilità |
Windows, Mac, Linux |
Nativo per Linux, disponibile per Windows e Mac. |
|
Adozione |
Standard di settore per l’orchestrazione dei container con una community enorme e compatibilità quasi universale. |
Alternativa a Docker con una community più piccola ma in crescita. |
Casi d’uso e scenari ideali per Podman vs Docker
Vediamo ora la domanda chiave che potresti porti: quando usare Docker e quando usare Podman? Diamo uno sguardo più da vicino.
Quando usare Docker
Docker è lo standard de facto per creare, eseguire e distribuire container. Se stai iniziando con la containerizzazione (soprattutto sulla tua macchina personale), prova a usare Docker.
È semplice avviare il tuo primo (o cinquantesimo) container usando strumenti come Docker Desktop o la Docker CLI. Docker ha una community enorme, e con ogni probabilità quello che stai cercando di fare è già stato fatto. Questo aiuta a rendere più semplice anche la risoluzione dei problemi.
Docker offre una maggiore coerenza multipiattaforma rispetto a Podman. Soprattutto, Docker si integra con quasi tutti i servizi basati su container, inclusi AWS ECS, Azure AKS e Google Cloud Run.
Questo significa che quando arriva il momento di eseguire i tuoi container in produzione, puoi integrarti facilmente con il servizio che preferisci. La possibilità di passare dallo sviluppo locale alla produzione è uno degli aspetti più potenti della containerizzazione del tuo codice con Docker.
Non sono solo i team di Software e Data Engineering a usare Docker. AI e ML Engineer, Data Scientist e perfino Data Analyst usano Docker per alimentare il loro lavoro!
Quando usare Podman
Per gli sviluppatori che lavorano in ambienti sensibili alla sicurezza o altamente regolamentati, Podman potrebbe essere il container manager del giorno. Ricorda, Podman è rootless, il che significa che un utente che esegue Podman in locale non richiede accesso root alla propria macchina per creare e gestire container in locale. Di seguito alcuni altri motivi per cui potrebbe avere senso orientarsi su Podman invece di Docker.
- Stai sviluppando in locale su una macchina Linux.
- Per te sono importanti l’uso delle risorse sottostanti e i tempi di avvio dei container.
- Hai in programma di distribuire i tuoi container su un cluster Kubernetes o vuoi imitare un ambiente Kubernetes sulla tua macchina locale.
Un’altra cosa da tenere a mente: per lo più, Podman e Docker sono intercambiabili. Ciò significa che se inizi a usare Docker e ti rendi conto che Podman è lo strumento giusto per te, è facile passare da un’offerta all’altra.
Conclusione
Eseguire i container richiede uno strumento per gestire questi oggetti. Insieme, abbiamo esplorato due dei tool di containerizzazione più popolari: Docker e Podman.
Standard di settore per la containerizzazione, Docker è usato da milioni di persone per eseguire applicazioni e carichi di lavoro dati in tutto il mondo. L’architettura di Docker è costruita sopra il demone Docker, che richiede accesso root al sistema su cui gira il container.
Per interagire con Docker, gli sviluppatori possono usare la Docker CLI o Docker Desktop, entrambi in grado di gestire elementi come immagini, container e volumi. L’ampia adozione di Docker significa una community grande e vivace, oltre al supporto per tutti e tre i principali sistemi operativi e quasi tutti i servizi basati su container.
Podman offre una soluzione alternativa per la gestione dei container. Podman è senza demone e rootless, il che significa che un utente non ha bisogno di accesso root alla macchina su cui sta usando Podman. Questo è interessante per i team che richiedono uno strumento di gestione dei container più attento alla sicurezza. Come Docker, Podman offre sia una CLI che una UI per creare e gestire i container. Sebbene nativo per Linux, Podman può essere eseguito sia su Windows che su Mac e si integra piuttosto bene con strumenti come AWS ECS e Azure AKS.
Indipendentemente dallo strumento che scegli, imparare a “containerizzare” il codice che scrivi è uno dei modi più rapidi per far crescere le tue skill di sviluppo. Se vuoi saperne di più su Docker e Podman, non aver paura di sporcarti le mani con corsi come Introduzione a Docker o Concetti di containerizzazione e virtualizzazione. In bocca al lupo e buon coding!
Podman vs Docker: domande frequenti
Che cos'è un container?
Un container è un oggetto che contiene tutto il necessario per eseguire un’applicazione o un carico di lavoro di dati. Puoi pensare ai container come a piccoli computer che hanno solo l’essenziale per eseguire un certo tipo di codice. Per fortuna, possiamo eseguire questi container sulle nostre macchine locali così come su server che rendono una soluzione accessibile al mondo.
Perché dovrei usare un container nel mio progetto?
Usare un container nei tuoi progetti ti permette di impacchettare il codice in un unico oggetto. Perché è importante? Significa che puoi condividere facilmente il tuo codice con altri sviluppatori o perfino distribuirlo in produzione senza dover ricreare l’intero ambiente locale.
Perché devo usare un gestore di container come Docker o Podman?
Per creare, eseguire e gestire un container hai bisogno di un gestore di container. Docker e Podman offrono strumenti per creare e testare il tuo container prima di distribuire la soluzione nel mondo. Senza uno strumento come Docker o Podman, questi compiti sarebbero piuttosto complicati.
Cosa significa senza demone (daemonless)?
Un demone è un processo che gira sempre in background. Senza demone significa che lo strumento esiste senza avere sempre un processo in esecuzione in background.
Esistono altri gestori di container oltre a Docker o Podman?
Containerd e LXC sono entrambi sistemi di gestione dei container popolari che aiutano a creare, eseguire e gestire container su larga scala.
Jake è un data engineer specializzato nella creazione di infrastrutture dati resilienti e scalabili utilizzando Airflow, Databricks e AWS. Jake è anche l’istruttore dei corsi di DataCamp Introduction to Data Pipelines e Introduction to NoSQL.


