Panoramica
Podman (contrazione di POD manager) è uno strumento open source pensato per lo sviluppo, la gestione e l'esecuzione dei container nei sistemi Linux®. Sviluppato originariamente dagli ingegneri di Red Hat® con il contributo della community open source, Podman gestisce l'intero ambiente dei container tramite la libreria libpod.
L'architettura inclusiva e daemonless fanno di Podman uno strumento per la gestione dei container più sicuro e accessibile, mentre gli strumenti e le funzionalità associati, quali Buildah e Skopeo, consentono agli sviluppatori di personalizzare gli ambienti containerizzati in base alle proprie esigenze.
Cosa sono i pod?
I pod sono gruppi di container che vengono eseguiti insieme e condividono le stesse risorse, in modo simile ai pod Kubernetes. Podman gestisce i pod tramite una semplice interfaccia a riga di comando (CLI) e la libreria libpod, che fornisce le API per la gestione di container, pod, immagini di container e volumi. La CLI di Podman crea e supporta i container Open Container Initiative (OCI), pensati per soddisfare gli standard di settore in termini di runtime e formati dei container, sebbene nel progetto complementare, Buildah, siano presenti capacità di realizzazione più avanzate. Podman può essere eseguito su varie distribuzioni Linux, quali Red Hat Enterprise Linux, Fedora, CentOs e Ubuntu.
Ogni pod è formato da un infra container e da un numero di container standard. L'infra container mantiene il pod in esecuzione e conserva gli spazi dei nomi degli utenti, isolando così i container dall'host. Gli altri container monitorano i propri processi per individuare i container non attivi, ovvero container non funzionanti che non possono essere eliminati dall'ambiente perché alcune delle risorse che contengono sono ancora in uso.
Quali sono le peculiarità di Podman rispetto agli altri motori per container?
Podman si differenzia dagli altri motori per container perché non usa i daemon. Fungendo da intermediari della comunicazione tra l'utente e il container, i daemon sono processi eseguiti in background nel sistema che si occupano del funzionamento dei container senza interfaccia utente.
Sebbene i daemon rappresentino un metodo pratico per gestire l'ambiente dei container, possono anche introdurre vulnerabilità di sicurezza. Molti daemon vengono eseguiti con privilegi root. Nei sistemi Linux, l'account root agisce come utente con privilegi avanzati con accesso amministrativo (bypassando anche la richiesta di verifica degli amministratori) per la lettura dei file, l'installazione dei programmi, la modifica delle applicazioni e altro. Per questo i daemon sono i destinatari ideali di attacchi perpetrati da criminali informatici che puntano a introdursi nel sistema host prendendo il controllo dei container.
Podman isola i daemon e consente agli utenti standard di eseguire i container senza interagire con un daemon del root oppure di utilizzare container rootless. In questa modalità, gli utenti possono creare, eseguire e gestire i container senza richiedere processi con privilegi di amministratore, il che si traduce in ambienti per container più accessibili senza compromessi per la sicurezza. Inoltre, Podman avvia ogni container con l'etichetta security-enhanced linux (SELinux), garantendo agli amministratori più controllo sulle risorse e sulle capacità fornite ai processi dei container.
In che modo Podman gestisce i container?
Gli utenti possono invocare Podman dalla riga di comando per il pull dei container da un repository e per la loro esecuzione. Per creare il container da eseguire, Podman invia una chiamata al runtime del container configurato. Se invece è presente un daemon dedicato, Podman utilizza systemd, un gestore di sistema e servizi per i sistemi operativi Linux, per effettuare gli aggiornamenti e mantenere in esecuzione i container in background. Integrando systemd e Podman puoi generare le unità di controllo per i tuoi container ed eseguirli con systemd abilitato in automatico.
Gli utenti possono gestire i propri repository nel sistema, così come le unità systemd, per controllare l'avvio automatico e la gestione dei propri container. Consentendo agli utenti di gestire le proprie risorse e di eseguire i container in modalità rootless, si scoraggiano procedure poco funzionali, ad esempio rendere modificabili /var/lib/container o altre procedure di gestione dei sistemi che possono esporre le applicazioni a ulteriori rischi di sicurezza. Ciò garantisce inoltre che ogni utente disponga di un set di container e immagini distinto e che possa utilizzare simultaneamente Podman sullo stesso host, senza interferenze con gli altri. Al termine del loro lavoro, gli utenti possono inviare le modifiche apportate a un registro comune per condividere le immagini con altri.
Per la gestione dei container, Podman si avvale di un'API RESTful (REST API). REST è l'acronimo di REpresentational State Transfer. Un'API REST è un'interfaccia di programmazione delle applicazioni conforme ai vincoli dello stile architetturale REST, che consente l'interazione con servizi web RESTful. L'API REST consente di eseguire una chiamata a Podman da piattaforme quali cURL, Postman, il client Advanced REST di Google e altri.
Cos'è Podman Desktop?
Podman Desktop è un'interfaccia grafica per Podman, che consente agli sviluppatori di lavorare con i container dal proprio laptop o dalla propria workstation. Gli sviluppatori possono creare, trasferire ed estrarre immagini e gestire le risorse Podman utilizzando una GUI disponibile sugli ambienti locali Linux, Windows e macOS. Podman Desktop consente inoltre agli sviluppatori di fornire applicazioni containerizzate pronte per essere distribuite negli ambienti Kubernetes.
Podman Desktop supporta i pacchetti di estensione, che danno accesso a ulteriori funzionalità. Ad esempio, Podman AI Lab aggiunge istruzioni per la creazione di applicazioni che lavorano con modelli linguistici di grandi dimensioni (LLM) in un ambiente locale e include un catalogo curato di LLM con licenza open source. Un altro esempio è il pacchetto di estensione Red Hat per Podman Desktop, che aiuta gli sviluppatori nell’utilizzo di specifiche tecnologie Red Hat come Red Hat OpenShift®.
Podman, Buildah e Skopeo
Podman è un motore per container modulare che, coniugato a strumenti quali Buildah e Skopeo, permette di creare e spostare i container. Con Buildah è possibile realizzare i container da zero o partendo da un'immagine. Skopeo sposta le immagini dei container tra vari tipi di sistemi di storage, permettendo la copia delle immagini tra registri come docker.io, quay.io e il registro interno o tra diversi tipi di storage nel sistema locale. L'ambiente flessibile e leggero ottenuto grazie a questo approccio modulare alla containerizzazione consente di ridurre le spese e di isolare le funzionalità necessarie per raggiungere gli obiettivi prefissi. L'evoluzione di strumenti leggeri e modulari è più rapida e permette a ognuno di essi di realizzare uno scopo specifico.
Insieme, Podman, Buildah e Skopeo, sono un set di strumenti funzionali e versatili messi a tua disposizione in grado di soddisfare le esigenze degli ambienti containerizzati. Podman è lo strumento più grande tra loro.
Per l'avvio dei container, Podman e Buildah utilizzano runC, il runtime OCI predefinito. Puoi creare ed eseguire un'immagine oppure eseguire immagini formattate in docker con runC. Questo strumento in linguaggio Go legge una specifica di runtime, configura il kernel Linux e quindi crea e avvia processi di container. Applicando alcune modifiche alla configurazione, puoi utilizzare Podman anche con altri footprint come crun.
Differenze tra Podman e Docker
Docker è una tecnologia di containerizzazione pensata per la creazione e l'utilizzo dei container Linux. La principale differenza tra Podman e Docker è l'architettura daemonless di Podman. I container Podman sono da sempre rootless, mentre Docker solo di recente ha aggiunto una modalità rootless alla propria configurazione daemon. Docker è uno strumento completo per la creazione e la gestione dei container, mentre Podman e gli strumenti associati come Buildah e Skopeo sono dedicati ad aspetti specifici della containerizzazione e permettono una personalizzazione basata sulle esigenze delle applicazioni cloud native.
Podman è una valida alternativa a Docker, ma i due strumenti possono anche operare in sinergia. Gli utenti possono passare con facilità da uno all'altro con l'aliasing da Docker a Podman (alias docker=podman) e viceversa. Inoltre, un rpm chiamato podman-docker può rilasciare un "docker" nel PATH dell'applicazione di sistema, che esegue Podman per quegli ambienti in cui il comando "docker" è necessario, facilitando la transizione da Docker. La CLI di Podman è simile al motore per container di Docker, e gli utenti che hanno familiarità con uno sapranno utilizzare senza intoppi anche l'altro.
Alcuni sviluppatori utilizzano Podman e Docker contemporaneamente, sviluppando con Docker e poi trasferendo il programma realizzato negli ambienti di runtime di Podman, per sfruttarne la sicurezza avanzata.
Podman è adatto soprattutto agli sviluppatori che eseguono i container senza Kubernetes o OpenShift Container Platform. CRI-O è un motore per container open source gestito dalla community per l'orchestrazione dei container Kubernetes, come Red Hat OpenShift® Container Platform.
Perché scegliere Podman?
Podman ha rivoluzionato il mondo dei container, offrendo le stesse capacità ad alte prestazioni dei principali motori per container e aggiungendo la flessibilità, l'accessibilità e la sicurezza avanzata, aspetti oggi sempre più importanti per i team di sviluppo. Con Podman puoi:
- Gestire le immagini e l'intero ciclo di vita dei container, incluse le fasi di esecuzione, gestione delle reti, esame dei punti di controllo e rimozione.
- Eseguire e isolare le risorse per container e pod rootless.
- Supportare immagini OCI e Docker e una CLI compatibile con Docker.
- Creare un ambiente daemonless più sicuro e con minor consumo delle risorse inutilizzate.
- Distribuire un'API REST a supporto delle funzionalità avanzate di Podman.
- Implementare la funzionalità checkpoint/restore per i container Linux con checkpoint/restore in userspace (CRIU). CRIU può congelare un container in esecuzione e salvarne i contenuti di memoria e lo stato su disco, permettendo il riavvio dei carichi di lavoro containerizzati in meno tempo.
- Aggiornare automaticamente i container. Podman rileva se un container aggiornato si arresta e ne esegue automaticamente il rollback all'ultima versione funzionante, offrendo nuovi livelli di affidabilità delle applicazioni.
Perché scegliere Red Hat?
Ogni sottoscrizione Red Hat Enterprise Linux include Podman. Questo significa che gli utenti possono eseguire container compatibili con OCI e realizzati tramite un'immagine UBI affidabile e supportata. Red Hat Enterprise Linux, riconosciuto come lo standard per l'esecuzione di container Linux negli ambienti aziendali, permette agli sviluppatori di avviare con facilità i container, di gestire i deployment e di accelerare lo sviluppo di nuove applicazioni. Eseguire l'upgrade dell'infrastruttura Red Hat Enterprise Linux può permetterti di sfruttare al massimo questi vantaggi. Senza contare che la portabilità delle applicazioni e dei container creati su Red Hat Enterprise Linux per gli ambienti di cloud ibrido e aperto garantisce l'agilità necessaria per adattarsi all'evoluzione degli obiettivi aziendali.
La web console di Red Hat Enterprise Linux, un'interfaccia web di facile utilizzo, permette di semplificare il deployment e l'amministrazione quotidiana dei sistemi e include anche Podman per aiutare i team a gestire i container e le immagini. Monitora l'utilizzo di CPU e di memoria dei container dalla dashboard della web console accedendo agli host di container e osservando i carichi sul sistema. Questo strumento web agevola tutte le attività legate alla gestione dei container, da quelle di routine alle operazioni più complesse.
Grazie agli Ansible Playbook, Red Hat Ansible® Automation Platform permette di automatizzare le funzioni di Podman quali installazione, deployment di container e altre attività che spesso richiedono molto tempo e risorse.
Podman e gli altri strumenti per container basati sugli standard open source fanno di Red Hat Enterprise Linux un host per container efficiente che fornisce supporto, stabilità e sicurezza per gli ambienti di produzione e che semplifica le iniziative di adozione di Kubernetes e Red Hat OpenShift.