Introduzione
La containerizzazione offre agli sviluppatori un modo per testare, creare e distribuire applicazioni in modo semplificato. I vantaggi dei container includono portabilità, coerenza, efficienza e meno sovraccarico rispetto alle macchine virtuali tradizionali.
Per molto tempo Docker è stato il motore di gestione dei container più popolare sul mercato. Tuttavia, poiché la containerizzazione è diventata la norma nel mondo DevOps, sono emersi concorrenti come Podman.
Questo articolo metterà a confronto due motori di gestione dei container:Docker e Podman. Ti aiuterà anche a scegliere il motore giusto per le tue esigenze.
Podman vs Docker:Definizioni
Cos'è Docker?
Docker è una piattaforma popolare per la creazione, la distribuzione e la gestione di container. I contenitori Docker consentono agli sviluppatori di applicare un approccio indipendente dal sistema alla distribuzione del software. Poiché Docker esegue gli stessi container Docker su qualsiasi sistema operativo, le applicazioni containerizzate sono multipiattaforma.
Cos'è Podman?
Podman è un motore container senza daemon e root sviluppato da RedHat, progettato come alternativa a Docker. Il design modulare consente a Podman di utilizzare i singoli componenti del sistema solo quando necessario. Il suo approccio rootless alla gestione dei container consente ai container di essere eseguiti da utenti non root.
Podman vs. Docker:confronto
Nella sezione seguente, l'articolo approfondirà le somiglianze e le differenze tra Podman e Docker.
Docker | Podman | |
---|---|---|
Demone | Utilizza il demone Docker | Architettura senza demoni |
Radice | Esegue i contenitori solo come root | Esegue i contenitori come root e come non root |
Immagini | Può creare immagini contenitore | Utilizza Buildah per creare immagini contenitore |
Piattaforma monolitica | Sì | No |
Sciame Docker | Supportato | Non supportato |
Docker-componi | Supportato | Supportato |
Funziona in modo nativo su | Linux, macOS, Windows | Linux, macOS, Windows (con WSL) |
Architettura
Docker utilizza l'architettura client-server. Il daemon Docker è un processo in background persistente che gestisce i contenitori e mantiene la comunicazione tra il client e il server. L'output della docker version
comando mostra sezioni separate per le versioni client e server.
Podman gestisce i contenitori utilizzando il modello fork-exec. Poiché Podman è un processo e non utilizza il paradigma client-server, non richiede l'esecuzione di un demone. I contenitori Podman sono processi figlio del processo Podman principale. Utilizzando la podman version
comando mostra che Podman elenca solo un numero di versione.
L'unità principale dell'architettura Podman è un contenitore. Tuttavia, Podman introduce anche il concetto di pod. Come i pod Kubernetes, i pod Podman sono gruppi di uno o più contenitori che condividono le stesse risorse di sistema. Il pod è costituito dal contenitore principale e dai contenitori sidecar che lo supportano.
Facilità d'uso
Docker dispone di un set completo di comandi diretti e intuitivi. Utilizzando Docker, gli sviluppatori possono creare, distribuire e gestire facilmente applicazioni containerizzate.
Uomo Pod è stato creato per sostituire perfettamente Docker in un flusso di lavoro di sviluppo software, quindi i suoi comandi sono per lo più gli stessi di Docker. Ad esempio, il docker pull
il comando diventa podman pull
:
A parte Podman che eredita la facilità d'uso di Docker, la somiglianza tra i due strumenti significa anche che la migrazione da Docker a Podman richiede poco sforzo.
Privilegi root
Docker richiede i privilegi di root per comunicare con il demone poiché il demone viene sempre eseguito come utente root. Se un utente non è un membro della docker
gruppo Unix, devono eseguire i comandi Docker usando il comando sudo. È possibile eseguire Docker in modalità rootless, ma richiede l'installazione di pacchetti aggiuntivi e driver di archiviazione specifici.
Uomo Pod è senza radici per progettazione. Grazie alla sua architettura modulare, è possibile concedere privilegi diversi a utenti diversi.
Creazione di immagini
Docker utilizza la docker build
comando per creare immagini del contenitore da un file docker e un contesto di compilazione. Il contesto di compilazione è un insieme di file specificato nel dockerfile utilizzato nella creazione del contenitore.
Podman presenta la podman build
comando che funziona utilizzando una sintassi simile a docker build
.
Tuttavia, Podman usa Buildah , un altro strumento open source, per eseguire il processo di costruzione. Quando podman build
viene eseguito, il buildah bud
(build-using-dockerfile) viene chiamato per emulare il docker build
comando.
Contenitori in esecuzione
Quando Docker riceve il comando di esecuzione della finestra mobile, esegue più azioni:
- Verifica se l'immagine specificata dall'utente esiste localmente. In caso contrario, estrae l'immagine dai registri configurati.
- Crea un livello contenitore scrivibile sopra l'immagine.
- Avvia il contenitore.
Contenitori in esecuzione con Podman viene eseguito utilizzando il podman run
comando, che funziona allo stesso modo di docker run
. Uno dei principali vantaggi di Podman rispetto a Docker è che Podman si integra completamente con systemd per impostazione predefinita. Ciò consente a Podman di eseguire systemd all'interno del contenitore immediatamente.
Docker Swarm e Docker Compose
Sciame Docker è una piattaforma di orchestrazione di container utilizzata per gestire i container Docker. Consente agli sviluppatori di eseguire un cluster di nodi Docker e distribuire un'applicazione scalabile senza altre dipendenze richieste.
Podman non supporta Docker Swarm. Tuttavia, gli utenti Podman possono utilizzare strumenti come Nomad, che viene fornito con un driver Podman.
Docker Compose è uno strumento per la gestione di ambienti applicativi multi-container. Automatizza l'avvio e la gestione dei container, il che lo rende utile come parte di un ciclo di vita di sviluppo software (SDLC).
A partire dalla versione 3.0, Podman supporta Docker Compose. Le versioni precedenti di Podman non avevano un modo per simulare il demone Docker necessario per il funzionamento di Docker Compose, quindi utilizzavano alternative meno intuitive come Podman Compose. Tuttavia, Podman 3.0 introduce podman.socket
, un socket UNIX che sostituisce il demone Docker.
Sicurezza
Docker è, per progettazione, considerato uno strumento sicuro, soprattutto quando i processi vengono eseguiti da utenti non privilegiati. L'esecuzione di contenitori in modalità privilegiata non è consigliata dal punto di vista della sicurezza.
Come con qualsiasi altro strumento, Docker diventa ancora più sicuro se gli utenti applicano le migliori pratiche di sicurezza. La sicurezza di Docker può essere ulteriormente aumentata abilitando AppArmor, SELinux e GRSEC.
Uomo Pod L'architettura fork-exec lo rende una soluzione ancora più sicura di Docker. Il modello fork-exec consente al sistema di registrare correttamente l'utente che modifica i file di sistema, mentre l'approccio client-server utilizzato da Docker no. Pertanto, Podman consente una registrazione dell'audit più approfondita.
I container senza root sono un'altra caratteristica di Podman che migliora la sicurezza generale del sistema. La possibilità di assegnare privilegi specifici a utenti specifici consente agli amministratori di avere un migliore controllo dell'accesso ai componenti critici del server.
Podman vs Docker:come scegliere
Scegli Docker se:
- Preferisci uno strumento ben documentato . Il principale vantaggio di Docker rispetto a Podman è il suo uso diffuso. Una grande quantità di supporto relativo a Docker disponibile online significa che la ricerca in Internet può risolvere molti potenziali problemi.
- Hai bisogno del supporto per l'orchestrazione dei container . Il supporto di Docker Swarm è un altro importante vantaggio di Docker. Gli utenti che desiderano orchestrare contenitori Podman devono ricorrere a alternative che non siano così ricche di funzionalità come Docker Swarm o tuffarsi in Kubernetes, che ha una curva di apprendimento ripida e potrebbe rivelarsi troppo complessa per progetti più semplici.
Scegli Podman se:
- Dai risalto alla sicurezza . L'architettura di Podman è intrinsecamente più sicura di quella di Docker.
- Hai intenzione di trasferirti a Kubernetes in futuro . Podman introduce il concetto di pod, che lo rende un buon punto di partenza per Kubernetes.
Poiché sia Docker che Podman sono conformi a OCI, è anche possibile utilizzarli fianco a fianco. Ad esempio, la robustezza di Docker può essere impiegata su macchine di sviluppo, mentre gli ambienti dev, int e prod possono trarre vantaggio dalla maggiore sicurezza di Podman.