Podman vs Docker: quale scegliere?
Pubblicato: 2022-11-23Se sei nel mondo della virtualizzazione e della containerizzazione, probabilmente hai incontrato Podman e Docker e ti starai chiedendo in cosa differiscono l'uno dall'altro.
In questo post esploreremo le differenze tra Docker e Podman e cercheremo di trovare quale sarà la scelta giusta per te!
Docker

Docker è una tecnologia di containerizzazione che facilita la gestione delle dipendenze all'interno di un progetto a tutti i livelli (sviluppo e distribuzione).
Disponibile su Linux, Windows e Mac OS, il meccanismo di Docker è incentrato sui container e sulla loro orchestrazione, ed è qui che la containerizzazione differisce dalla virtualizzazione.
Docker ha due componenti principali: Docker CLI e Docker Daemon.
Demone Docker:
È un processo in background costante che aiuta a gestire immagini Docker, contenitori, reti e volumi di archiviazione. Docker utilizza la sua API REST Docker Engine per interagire con il daemon Docker, accessibile tramite protocollo HTTP.
CLI di Docker:

È il client della riga di comando Docker per l'interazione con il daemon Docker. È quello che usi quando esegui qualsiasi comando Docker.
Il funzionamento di Docker si basa sul kernel Linux e sulle funzioni di questo kernel, come cgroup e namespace. Queste funzioni separano i processi in modo che possano essere eseguiti in modo indipendente, poiché lo scopo dei contenitori è eseguire più processi e applicazioni separatamente.
Questo è ciò che permette di ottimizzare l'utilizzo dell'infrastruttura senza ridurre il livello di sicurezza rispetto ai sistemi separati.
Tutti gli strumenti container come Docker sono dotati di un modello di distribuzione basato su immagini. Questo modello semplifica la condivisione di un'applicazione o di un insieme di servizi in più ambienti.
Inoltre, Docker aiuta ad automatizzare la distribuzione delle applicazioni all'interno di un ambiente container. Con questi vari strumenti, gli utenti ottengono l'accesso completo alle applicazioni e possono accelerare l'implementazione, controllare le versioni e assegnarle.
Podmann
Podman (POD MANager ) crea, esegue e gestisce i contenitori OCI e le immagini dei contenitori. È stato sviluppato da Red Hat e originariamente destinato al suo Linux 8 aziendale. Viene utilizzato per la gestione dei container e funge da successore ufficiale di Docker.

Di conseguenza, Red Hat ha interrotto il supporto per Docker, ma ha assicurato che il passaggio sarebbe stato facile per gli utenti poiché Podman è basato su Docker sebbene originariamente fosse inteso solo come strumento di debug.
Gestisce l'intero ecosistema di container utilizzando la libreria libpod. Poiché Podman funziona solo su piattaforme Linux, un'API REST e client sono attualmente in fase di sviluppo per consentire ai sistemi Mac e Windows di chiamare il servizio.
Tuttavia, attualmente esiste un client remoto basato su Varlink che funziona su piattaforme Mac o Windows che consente la comunicazione remota con un server Podman basato su Linux. La libreria libpod supporta più metodi per caricare le immagini in modo sicuro, inclusa la verifica dell'affidabilità e dell'immagine.
Supporta anche i pod per gestire gruppi di contenitori insieme e più formati di immagine, inclusi i formati di immagine OCI e Docker.
In ambienti molto piccoli e gestibili, Podman può persino fungere da precursore di Kubernetes. Colma il divario tra la gestione singolare delle singole istanze dai primi anni dell'hype dei container e l'orchestrazione moderna con Kubernetes.
Gli utenti di container ambiziosi possono già godersi il livello successivo con i pod. La costruzione e il funzionamento di un cluster Kubernetes non sono più necessari. Nel caso più semplice, i pod di nuova concezione possono essere testati e migliorati nelle singole operazioni. È possibile anche un successivo trasferimento a Kubernetes.
Il comando podman generate kube
fornisce i file di configurazione corrispondenti. Questi servono quindi uno a uno come input per lo strumento Kubernetes kubectl.
Le versioni attuali di Podman possono persino creare file di configurazione per systemd, una delizia per chiunque utilizzi l'onnipresente successore init per l'orchestrazione dei container.

Podman vs Docker: differenze
Docker si è rapidamente affermato come cavallo di battaglia per la gestione dei container. Tuttavia, Docker presenta molti vantaggi e, soprattutto, il repertorio di immagini in rapida crescita, nonché svantaggi e possibili rischi per la sicurezza. Inoltre, Docker non è più supportato come contenitore per Kubernetes.
Il fatto che i container, contrariamente ai sistemi virtuali, non richiedano il loro kernel è solitamente visto come uno dei grandi vantaggi. Tuttavia, rappresenta un grave rischio per la sicurezza con Docker perché i contenitori Docker possono essere eseguiti solo con privilegi di root.
Consente ai processi in esecuzione nei contenitori di accedere al kernel con privilegi di root e quindi attaccare il sistema host.

La prima distinzione è evidente quando lo si utilizza per la prima volta. Sebbene Docker richieda l'avvio del daemon Docker, un contenitore Podman può essere avviato direttamente dalla riga di comando. Quindi non esiste alcun processo in background e l'applicazione viene eseguita solo quando necessario.
Dal punto di vista della sicurezza, questo è positivo perché Podman è meno vulnerabile agli attacchi se il demone non deve essere eseguito 24 ore su 24, 7 giorni su 7 con privilegi di superutente. Podman non richiede un processo in background a causa dell'architettura, che differisce sostanzialmente da Docker.
Mentre Docker segue il modello client-server, in cui il client Docker comunica con il demone Docker tramite un'API, Podman segue il modello fork-exec. Ogni contenitore viene eseguito come processo figlio di Podman.
Uno spazio dei nomi utente viene creato al primo utilizzo quando Podman viene eseguito con normali privilegi utente. Nello spazio dei nomi utente, Podman viene eseguito con privilegi di root e dispone dei diritti per montare file system e creare contenitori.
Di conseguenza, il contenitore Podman ha solo i diritti che ha l'utente che esegue. L'uso degli spazi dei nomi utente significa che ogni utente può creare e gestire i propri contenitori, ma questi non sono visibili agli altri utenti e al superutente.
Poiché Podman è gestito indipendentemente da Docker, gli sviluppatori hanno un ampio margine di manovra e possono rispondere ai desideri della comunità. Aggiunte interessanti a Podman includono il comando mount/unmount e l'integrazione di systemd.
L'host può utilizzare il comando mount/unmount per montare il file system del contenitore, ad esempio, per accedere o modificare i file e quindi smontarli nuovamente.
Mentre il monitoraggio dei container tramite systemd non funziona a causa del demone in Docker con Podman, i container possono essere avviati, monitorati e persino riavviati tramite systemd.
Inoltre, Podman fornisce il comando podman generate systemd
, che genera un corrispondente servizio systemd per il rispettivo contenitore e quindi solleva l'utente dalla creazione dei servizi systemd, il che significa che l'integrazione sul sistema host è disponibile.
Un'altra differenza cruciale tra Podman e Docker è che quest'ultimo non modifica le regole del firewall o l'attuale installazione di dnsmasq grazie alla sua capacità di creare una rete interna. Al contrario, Docker deve sovrascrivere le regole del firewall per abilitare la comunicazione tra container.
Podmann | Docker | |
Architettura | Demone | Demone di meno |
Gestione Servizi | Systemd | Motore Docker |
Compatibilità firewall | Sovrascrive le regole del firewall | Rispetta le regole del firewall |
piattaforma | Supporto nativo per Linux | Linux, Windows e Mac |
Quando dovresti migrare da Docker a Podman
Se stai distribuendo container in un ambiente basato su RHEL, in tal caso non hai molte opzioni se non quella di utilizzare Podman in quanto è nativo di RHEL. Puoi anche migrare o scegliere Podman su Docker se disponi di piccole distribuzioni con pochi container.
Tuttavia, se vuoi diventare più complesso di così, disponi di più contenitori e una pila di contenitori coordinati con docker-compose/podman-compose su una rete. È meglio usare Docker in quanto gestisce molto meglio la rete.
Allo stesso modo, se stai appena iniziando a entrare nel mondo dei container, in tal caso, Docker è un'opzione migliore in quanto è stabile, ben consolidata con una documentazione adeguata e ha una curva di apprendimento superficiale rispetto a Podman, che manca ancora di stabilità e non ha una documentazione ben definita.
Migrazione da Podman a Docker
Se sei sulla riga di comando, è abbastanza facile passare da Docker Engine a Podman. Nella sua forma più semplice, un comando $ alias docker=podman
la maggior parte delle volte funziona.
Naturalmente, ciò presuppone che sul sistema sia installato il software appropriato. Nel caso di Linux, neanche questo è un problema; sono disponibili pacchetti software già pronti per le distribuzioni disponibili in commercio.
Windows o macOS non sono tra i sistemi operativi supportati. L'approccio alias funziona perché molti comandi Docker hanno un equivalente Podman.
Ma ci sono anche delle eccezioni in quanto alcuni comandi Docker non hanno una controparte nel mondo Podman. Allo stesso modo, alcuni comandi si comportano in modo diverso in Docker rispetto all'universo Podman. Al momento, ciò riguarda solo la gestione dei volumi che sono già stati impostati.
Il passaggio è un po' più difficile quando si utilizzano strumenti grafici come Docker Desktop. Dovrebbe interessare in particolare quegli sviluppatori che lavorano con Windows o macOS.
Gli utenti di Docker Desktop dovranno abituarsi alla riga di comando e lo stesso vale per la composizione di Docker. Tuttavia, esiste il progetto podman-compose. Scritto in Python, il software sostituisce Docker Compose.
Parole finali
La sostituzione di Docker con Podman può considerarsi quasi compiuta. Per utenti e amministratori, la maggior parte degli aspetti di questo cambiamento è semplice. Molte funzionalità di Docker hanno equivalenti identici in Podman.
Un vero vantaggio è la mancanza di un singolo processo daemon e dei privilegi di root, per non parlare dell'uso naturale dei gruppi di contenitori. Tuttavia, vale la pena ricordare che Docker rimane la tecnologia principale per quanto riguarda i container, ma molto probabilmente cambierà nel lungo periodo.
Puoi anche esplorare alcuni comandi Docker per gestire i contenitori.