- Podman è senza demone, compatibile con OCI e consente operazioni senza root con maggiore sicurezza.
- UBI, Buildah e Skopeo costituiscono una solida piattaforma per la creazione, la firma e la distribuzione di immagini.
- Pod, Kubernetes YAML e unità systemd semplificano il passaggio da una distribuzione locale a una stabile.

Se il tuo obiettivo è lanciare contenitori leggeri in Linux Con la massima sicurezza e controllo, Podman è una delle migliori carte che si possano giocare. Condivide l'ecosistema OCI, offre una CLI molto familiare per chi proviene da Docker e, soprattutto, elimina il demone centrale, riducendo la superficie di attacco e il consumo di risorse.
Questo tour pratico e approfondito riunisce i più rilevanti guide per Red Hat, SUSE e strumenti correlati Come Buildah e Skopeo, imparerai a installare, configurare e gestire container e pod, a creare immagini efficienti (incluso UBI), a generare file YAML per unità Kubernetes o systemd e, nel frattempo, a gestire log, policy di attendibilità, controlli di integrità ed eventi con facilità.
Cos'è Podman e perché si distingue per i suoi contenitori leggeri?
Podman è un motore contenitore senza demone È conforme alle specifiche OCI e consente di eseguire, creare e gestire immagini e container con una sintassi praticamente identica a quella di Docker. La grande differenza è di natura architettonica: non esiste un processo master. radice in background a cui è possibile inviare le richieste, semplificando la sicurezza e il modello operativo.
Un altro asset fondamentale è il supporto di senza radici: Gli utenti senza privilegi possono creare ed eseguire container senza elevare i permessi. Questo non solo è più sicuro, ma migliora anche la tracciabilità, perché le azioni sono associate all'utente di sistema reale e non a un demone in esecuzione come root.
Il supporto Docker CLI è molto raffinato. Puoi usare comandi come build podman, podman corri o immagini di podman Quasi la stessa cosa. Esiste persino un pacchetto podman-docker che crea un alias in modo che l'esecuzione di Docker invochi Podman in modo trasparente, il che è utile quando si hanno script legacy.
Podman adotta il concetto di baccelli Kubernetes: raggruppamento di più container che condividono una rete e determinati namespace. È ideale per comporre servizi cooperanti (ad esempio, un database e il suo client) e per generare descrizioni portabili per Kubernetes utilizzando YAML, ad esempio Integrare Docker in Kubernetes.
Nell'ecosistema aziendale, Red Hat ha sostituito Motore Docker su RHEL 8 per uno stack senza daemon basato su Podman, Buildah e Skopeo. Promuove anche Immagini UBI ridistribuibili per costruire una base RHEL di qualità senza vincoli di abbonamento.
Installazione e requisiti per distribuzione

In RHEL 8 e derivati, è più conveniente abilitare il modulo contenitore-strumenti, che supporta Podman, Buildah e Skopeo. Dopo aver registrato il sistema, se applicabile, installa il modulo disponibile e avrai il pacchetto pronto per funzionare con i container in modo integrato.
Su Fedora, il pacchetto si trova nei repository e viene installato con il consueto gestore di pacchetti. Ubuntu (20.04 in poi) può essere installato con APT dai repository standard o aggiungendo il PPA stabile libcontainers per essere aggiornato. LES MicroPodman è di serie e, se mancante, può essere aggiunto seguendo la documentazione ufficiale SUSE.
Controllare l'ambiente con informazioni su Podman per vedere i dettagli di immagazzinamento, cgroup, compatibilità rootless e plugin. A Boot Il verificatore di rete e DNS veloce e leggero consiste nell'eseguire un contenitore Alpine in modo interattivo con un semplice podman run –rm -it alpine sh.
Se si prevede di compilare o utilizzare immagini Red Hat protette (ad esempio in registro.redhat.io), ricorda che hai bisogno autenticazione con credenziali del portale valide, mentre registry.access.redhat.com offre accesso non autenticato a una parte del suo catalogo.
Lavorare in modalità rootless: configurazione e limiti pratici
La modalità rootless è una delle funzionalità più interessanti di Podman. Per abilitarla correttamente, è necessario impostare spazi dei nomi utente e mappe subuid e subgid. Se provieni da sistemi più vecchi o account preesistenti, controlla i file. /ecc/sottosuolo y /etc/sottogid per assegnare intervalli sufficienti a ciascun utente.
L'ordine podman non condivide Permette di accedere allo spazio dei nomi dell'utente e di verificare le mappature UID e GID effettive. Questo è utile per diagnosticare il motivo per cui un contenitore rootless non riesce ad accedere a determinati file o perché un volume remoto si blocca con quell'utente.
Ci sono importanti restrizioni: un contenitore in modalità rootless non può porte aperte inferiori a 1024Negli scenari di sviluppo, è possibile modificare il parametro del kernel per abilitare porte senza privilegi inferiori o utilizzare l'inoltro delle porte sull'host per accedere a 80 o 443 senza elevare le autorizzazioni.
Esistono anche servizi che richiedono privilegi globali, come impostazioni dell'ora di sistemaSe esegui ntpd all'interno di un contenitore rootless e gli concedi capacità inappropriate, potresti finire per compromettere l'host. È preferibile mantenere questi daemon sul sistema o utilizzare pod/servizi con limiti appropriati.
Un dettaglio operativo: l'archiviazione dei container senza root deve risiedere in un file system localeI montaggi remoti spesso causano problemi con gli spazi dei nomi utente. Inoltre, se l'autenticazione utente proviene da LDAP o Active Directory, sarà necessario mantenere gli intervalli subuid e subgid statici localmente affinché la mappatura funzioni correttamente.
Criteri di ricerca, estrazione e attendibilità nei log
Podman interroga per impostazione predefinita i registri elencati in /etc/containers/registries.confCome root puoi modificare le impostazioni di sistema; come utente non privilegiato, puoi sovrascriverle creando il tuo file in $HOME/.config/containers/registries.conf per regolare le priorità, i mirror o contrassegnare i record non sicuri nella sessione.
Per localizzare le immagini utilizzare ricerca podmanPuoi cercare tutti i record definiti o limitarli per dominio e, se hai bisogno di risultati completi, aggiungi –no-troncamentoSe un annuncio richiede credenziali, effettua prima l'accesso in modo che l'annuncio visualizzi i repository privati accessibili.
La politica di fiducia consente di verificare le firme delle immagini. È definito in /etc/containers/policy.json e nello YAML di /etc/containers/registries.d/Red Hat pubblica le firme per le sue immagini; è possibile aggiungere sezioni specifiche per registry.access.redhat.com e registry.redhat.io, specificando gli URL sigstore che il sistema deve consultare durante l'estrazione.
Se si modifica la politica predefinita in rifiutare, potrai estrarre dati solo da ambiti firmati o esplicitamente consentiti. Questo è utile per rafforzare i server di build o gli ambienti regolamentati. Puoi verificare la policy attiva visualizzando il JSON della policy e testandola con un ubi8-minimal per vedere come viene convalidata la firma durante l'estrazione.
Si consiglia vivamente di utilizzare i nomi pienamente qualificato Durante l'estrazione, specifica il registro, lo spazio dei nomi, il repository e il tag. In questo modo eviterai di falsificare i nomi brevi e, allo stesso tempo, documenterai meglio l'origine di ogni immagine nei tuoi script.
Immagini di base UBI e costruzione con Buildah
Le UBI (Immagini di base universali) RHEL 8 è una base ufficiale con licenza di ridistribuzione libera. Sono disponibili le versioni standard, minimal e init, oltre a immagini runtime per ogni linguaggio (come Python, PHP, Ruby o Node.js). L'obiettivo è consentirti di creare la tua applicazione su una base RHEL di qualità e di distribuirla senza essere vincolato a un abbonamento presso la destinazione.
L'immagine ubi8 standard offre un solido set di strumenti per la maggior parte degli scenari. Al contrario, ubi8-minimal Riduci le dimensioni al minimo e includi solo l'essenziale; puoi aggiungere pacchetti con microdnf durante la compilazione se hai bisogno di dipendenze aggiuntive.
Variante ubi8-init integra systemd come PID 1 e imposta un Segnale di arresto speciale, poiché systemd ignora i segnali di uscita convenzionali. Questo è utile quando si desidera eseguire servizi gestiti da systemd all'interno del contenitore, in modo più fedele rispetto a una macchina tradizionale.
Sugli host RHEL sottoscritti, il contenitore UBI standard può vedere sia i repository host che i repository UBI, quindi hai l'intero catalogo dei pacchettiSe si desidera che l'immagine risultante sia ridistribuibile, disabilitare i repository non UBI durante la compilazione per garantire che vengano inclusi solo gli RPM distribuiti gratuitamente.
Per costruire, Costruisci Ti fornisce due percorsi: da un Dockerfile utilizzando costruire un germoglio, o in modo più granulare creando un contenitore funzionante, montando il suo file system, copiando i file ed eseguendo le configurazioni con configurazione buildah. Con ubi8-minimal ricordatevi di usare microdnf invece di yum.
Gestione di contenitori e immagini con Podman
Per le esecuzioni una tantum, è possibile avviare comandi brevi con podman run –rmAd esempio, visualizzando il sistema di base di un'immagine con cat / etc / os-release oppure aprire una shell bash interattiva per analizzare il contenuto del contenitore ed eseguire test senza persistenza.
L'ispezione è molto completa: con podman ispeziona È possibile visualizzare i metadati dei contenitori e delle immagini e formatear l'output per ottenere campi specifici come Impostazioni di rete.Indirizzo IP, .Config.ExposedPorts o Stato.Pid di processo.
Se devi entrare in un contenitore che è già in azione, utilizza dirigente di Podman con una shell e non si interrompe il processo principale. Questo è ideale per osservare cosa sta effettivamente facendo un'applicazione mentre gestisce il traffico o elabora i processi.
Per mantenere e condividere i dati, Podman supporta volumiÈ possibile creare un volume, montarlo su un contenitore e quindi conservare i file anche se si elimina e si ricrea il contenitore. È preferibile eseguire il montaggio in base al nome del volume anziché in base al percorso host interno, per evitare eliminazioni accidentali con prune.
Le immagini e i contenitori vengono gestiti con immagini di podman, podman rmi, podman ps, podman rm e compagnia. Per spostare le immagini tra le macchine, salvare con salvataggio podman a un catrame e ricaricare con carico podman. La coppia esportazione / importazione Esiste anche se si desidera acquisire il file system di un contenitore specifico.
Generazione di pod e YAML per Kubernetes
Un baccello raggruppa i contenitori e fornisce loro un contenitore infrastrutturale che gestisce i loro namespace. È possibile crearli con podman pod create, elenco con podman pod ps ed eseguire contenitori all'interno indicando –baccelloÈ un modo naturale per impostare distribuzioni con più elementi cooperanti.
Una volta definito un pod a tuo piacimento, puoi generarne il manifesto. kubernetes con podman genera kubeOtterrai un file YAML portabile che descrive il pod e i container. Successivamente, potrai ricreare il set sullo stesso host con podman gioca a kube o portarlo in un cluster con kubectl u oc.
Tieni presente che la generazione non riflette i volumi di LVM dell'ospite né dettagli di conservazione avanzati; se li utilizzi, documenta separatamente tali requisiti o crea oggetti di archiviazione equivalenti in Orchestrator.
In OpenShift puoi usare oc crea con flag di prova per creare YAML di risorse da immagini e pubblicarle in modo controllato. In Kubernetes il funzionamento è molto simile con kubectl crea.
Lavorare con i pod localmente velocizza il vai alla produzione, perché la topologia è già concepita in termini di pod e container e il file YAML funge da contratto tra sviluppo e operazioni.
Integrazione Systemd: servizi container e pod
Podman si integra perfettamente con systemd. Con podman genera systemd Crei unità per contenitori o pod esistenti oppure generi definizioni portatili con -nuovo che creano e avviano il contenitore se non esiste e lo distruggono quando il servizio viene arrestato.
Le unità possono essere di utente (At $HOME/.config/systemd/utente) o sistema (At /etc/systemd/sistema o /usr/lib/systemd/sistema). Per i servizi utente, abilitare con systemctl –utente e ricordati di regolare l'avvio persistente dell'utente se vuoi che persista quando ti disconnetti.
Se gestisci un pod con più contenitori, concentrati su servizio pod ed evitare di avviare o arrestare separatamente i contenitori interni con systemctl, poiché sono coordinati dal servizio pod insieme al contenitore infra.
Dai un'occhiata alle opzioni come –riavvio-politica In questo modo, i servizi container possono avviarsi automaticamente all'avvio e in caso di errore. Si tratta di una semplice forma di orchestrazione locale con semantica delle unità di servizio ben nota in Linux.
Un consiglio: rigenera i file dell'unità quando aggiorni Podman; i modelli si evolvono e podman genera systemd ti fornisce la versione più recente delle policy consigliate.
Strumenti Skopeo, Buildah e la cassetta degli attrezzi
Scopeo Permette di ispezionare le immagini su registri remoti senza scaricarle intere, di copiarle tra i backend di storage e di firmarle. È ideale per l'audit dei metadati delle immagini e la sincronizzazione dei repository e condivide un file di autenticazione con Podman e Buildah quando viene eseguito sullo stesso host.
Se esegui Skopeo su un contenitore, montare il file di autenticazione dall'host con l'opzione appropriata oppure accedi nuovamente al contenitore. Per elencare o copiare nell'archivio locale, monta anche il percorso di archiviazione del contenitore utente o di sistema, a seconda dei casi.
Costruisci Semplifica la creazione di immagini OCI da zero, da Dockerfile o da container in esecuzione. Condivide lo stesso storage locale, quindi le immagini estratte con Podman o Buildah sono disponibili indipendentemente. È possibile montare il file system del container in funzione, copiare file ed eseguire il commit delle modifiche con commit buildah.
C'è utilità cassetta degli attrezzi e l'immagine strumenti di supporto per aprire un contenitore privilegiato per la diagnostica dell'host. Monta il file system di sistema su /ospite e ti consente di eseguire strumenti come sosreport o gcore sui processi host senza sporcare il sistema di base.
Alcune immagini di Red Hat includono etichette di esecuzione che definiscono i comandi pronti per l'installazione, l'esecuzione o la disinstallazione. Con contenitore podman runlabel È possibile richiamare questi tag su immagini come rsyslog o support-tools per semplificare le distribuzioni con i privilegi e i mount appropriati.
Controlli sanitari, informazioni di sistema ed eventi
I controlli sanitari Vengono utilizzati per determinare se il processo all'interno del contenitore è integro o pronto. Sono definiti con un comando da eseguire e parametri come intervallo, numero di tentativi, timeout e periodo di tolleranza all'avvio. Operano all'interno del contenitore, quindi è opportuno progettare il controllo tenendo conto dell'applicazione.
Se vuoi eseguirlo manualmente puoi usare il comando check per vedere lo stato più recente e il suo codice di uscita; zero indica successo. Questo è un modo utile per eseguire il debug quando un probe contrassegna il contenitore come non funzionante.
Con sistema podman Ottieni informazioni sull'ambiente globale: storage, versione, supporto cgroup, runtime e configurazione. Molto utile quando si sospetta un problema di permessi, cgroup o compatibilità del kernel.
Infine, eventi podman Permette di monitorare ciò che accade: creazione, avvio e arresto del container; modifiche ai pod; operazioni sulle immagini; eventi di sistema e di volume. Ogni evento include timestamp, tipo, stato e nomi, perfetti per tracciare comportamenti insoliti.
Con tutto quanto sopra puoi creare contenitori veramente leggeri e ben controllato con Podman su Linux: installalo sulla tua distribuzione preferita, usa rootless con saggezza, estrai UBI quando necessario, compila con Buildah, ispeziona e sincronizza con Skopeo, componi servizi in pod, genera YAML per Kubernetes, integra con systemd e monitora lo stato e gli eventi senza perdere di vista la sicurezza.
Scrittore appassionato del mondo dei byte e della tecnologia in generale. Adoro condividere le mie conoscenze attraverso la scrittura, ed è quello che farò in questo blog, mostrarti tutte le cose più interessanti su gadget, software, hardware, tendenze tecnologiche e altro ancora. Il mio obiettivo è aiutarti a navigare nel mondo digitale in modo semplice e divertente.

