Podman guida per DevOps

Podman guida per DevOps

Podman: Guida per DevOps

Introduzione: Cos’è Podman e a cosa serve

Podman (POD MANager) è un motore di containerizzazione open source, daemonless e Linux-native, progettato per semplificare lo sviluppo, la gestione e l’esecuzione di container OCI (Open Container Initiative). Sviluppato da Red Hat, Podman rappresenta un’alternativa moderna a Docker, offrendo un’interfaccia a riga di comando compatibile e un’architettura innovativa priva di daemon centrale. Il tool è stato concepito per rispondere alle esigenze di sicurezza, efficienza e semplicità richieste da DevOps engineer, sviluppatori e system administrator che lavorano con ambienti containerizzati in contesti enterprise e cloud-native.

A livello tecnico, Podman si basa sulla libreria libpod per la gestione del ciclo di vita dei container, supporta formati immagine OCI e Docker, e permette l’esecuzione di container in modalità rootless per default, riducendo drasticamente la superficie di attacco e migliorando la sicurezza complessiva del sistema.

Installazione di Podman – Podman guida per DevOps

L’installazione di Podman varia in base al sistema operativo utilizzato. Per distribuzioni Linux enterprise come Red Hat Enterprise Linux, Fedora e derivati, Podman è disponibile nei repository ufficiali.

Su Ubuntu 20.10 e versioni successive:

sudo apt-get update
sudo apt-get -y install podman

Su Fedora:

sudo dnf install podman

Su Red Hat Enterprise Linux 8/9:

sudo dnf install podman

Per verificare l’installazione e la versione corrente:

podman --version

Al momento della stesura, Podman ha rilasciato la versione 5.x (marzo 2024), che introduce miglioramenti sostanziali per l’hypervisor nativo su macOS, il supporto completo per Netavark come stack di rete predefinito e numerose ottimizzazioni di performance.

Primi passi: Utilizzo base di Podman

Ricerca e pull di immagini

Per cercare immagini disponibili nei registry:

podman search nginx

Per scaricare un’immagine:

podman pull docker.io/library/nginx:latest

Esecuzione di un container

Avviare un container web server nginx in modalità detached:

podman run -d --name webserver -p 8080:80 docker.io/nginx

Questo comando crea un container chiamato “webserver”, mappa la porta 80 del container sulla porta 8080 dell’host e lo esegue in background.

Gestione dei container

Elencare i container in esecuzione:

podman ps

Visualizzare tutti i container (inclusi quelli fermati):

podman ps -a

Fermare un container:

podman stop webserver

Rimuovere un container:

podman rm webserver

Ispezionare i dettagli di un container:

podman inspect webserver

Caso d’uso pratico: Deploy di un’applicazione web – Podman guida per DevOps

Consideriamo il deploy di una semplice applicazione Node.js containerizzata. Creazione del Dockerfile:

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Build dell’immagine con Podman:

podman build -t myapp:latest .

Esecuzione del container con variabili d’ambiente:

podman run -d --name myapp \
  -p 3000:3000 \
  -e NODE_ENV=production \
  myapp:latest

Verifica dei log applicativi:

podman logs myapp

Checkpointing e Restore: Migrazione dei container

Una funzionalità avanzata di Podman è il checkpoint/restore, che permette di salvare lo stato completo di un container in esecuzione e ripristinarlo successivamente, anche su sistemi diversi. Questa caratteristica richiede CRIU (Checkpoint/Restore In Userspace) versione 3.11 o superiore.

Creazione di un checkpoint

sudo podman container checkpoint webserver

Per esportare un checkpoint in un archivio:

sudo podman container checkpoint webserver \
  -e /tmp/checkpoint.tar.gz

Restore di un checkpoint

Ripristinare un container dallo stesso host:

sudo podman container restore webserver

Importare e ripristinare da archivio:

sudo podman container restore \
  --import /tmp/checkpoint.tar.gz \
  --name webserver-restored

Il checkpointing è particolarmente utile per:

  • Migrazione live di container tra host
  • Reboot del sistema senza perdita di stato
  • Backup dello stato applicativo a caldo
  • Debug e troubleshooting di applicazioni in produzione

Nota importante: il checkpointing attualmente funziona solo con container root. Per container con connessioni TCP attive, è necessario utilizzare l’opzione --tcp-established.

Comandi principali di Podman – Podman guida per DevOps

Podman offre un’ampia gamma di comandi per gestire l’intero ciclo di vita dei container. Ecco una panoramica dei comandi più utilizzati:

Gestione immagini

  • podman images: Lista tutte le immagini locali
  • podman pull: Scarica un’immagine da un registry
  • podman push: Carica un’immagine su un registry
  • podman rmi: Rimuove un’immagine locale
  • podman build: Costruisce un’immagine da Dockerfile

Gestione container

  • podman run: Crea ed esegue un container
  • podman start/stop/restart: Controlla lo stato dei container
  • podman exec: Esegue comandi in un container attivo
  • podman logs: Visualizza i log di un container
  • podman top: Mostra i processi in esecuzione nel container

Gestione pod

  • podman pod create: Crea un nuovo pod
  • podman pod start/stop: Gestisce lo stato dei pod
  • podman pod ps: Lista i pod esistenti
  • podman pod rm: Rimuove un pod

System e manutenzione

  • podman system df: Mostra l’utilizzo dello spazio disco
  • podman system prune: Rimuove risorse inutilizzate
  • podman info: Visualizza informazioni di sistema

Networking in Podman

Podman utilizza Netavark come stack di rete predefinito dalla versione 4.0, sostituendo il precedente CNI (Container Network Interface). Netavark offre prestazioni migliori, supporto IPv6 completo e risoluzione DNS migliorata.

Creazione di una rete personalizzata

podman network create mynetwork

Connessione di container a reti specifiche

podman run -d --name app1 --network mynetwork nginx
podman run -d --name app2 --network mynetwork redis

Networking rootless

Per container rootless, Podman utilizza Pasta (Passt Adapter) come strumento predefinito, che offre migliori performance rispetto a slirp4netns. Pasta copia gli indirizzi IP dall’interfaccia principale dell’host nel namespace del container, senza eseguire NAT.

Ispezione della rete

podman network inspect mynetwork
podman network ls

Port forwarding

podman run -d -p 8080:80 --name web nginx

Questo comando mappa la porta 80 del container sulla porta 8080 dell’host, rendendo il servizio accessibile dall’esterno.

Panoramica delle funzionalità principali

Container rootless

Podman permette l’esecuzione di container senza privilegi root, aumentando significativamente la sicurezza del sistema. I container vengono eseguiti come processi figli della sessione utente, mantenendo una chiara catena di audit.

Supporto per Pod

Podman introduce il concetto di “pod”, simile a Kubernetes, permettendo di raggruppare più container che condividono namespace di rete, IPC e UTS. Questo facilita la transizione verso architetture cloud-native.

Integrazione systemd

Podman può generare automaticamente unit systemd per gestire container come servizi nativi Linux:

podman generate systemd --name webserver > webserver.service
sudo cp webserver.service /etc/systemd/system/
sudo systemctl enable --now webserver

Compatibilità Docker

Podman è progettato come drop-in replacement di Docker. La maggior parte dei comandi Docker funziona semplicemente sostituendo docker con podman. È anche possibile creare un alias:

alias docker=podman

Podman Machine (macOS/Windows)

Per sistemi non-Linux, Podman fornisce podman machine che gestisce macchine virtuali Linux per eseguire container. La versione 5.0 ha introdotto il supporto per l’hypervisor nativo di Apple.

Pro e Contro di Podman

VantaggiSvantaggi
Architettura daemonless riduce la superficie di attaccoEcosistema meno maturo rispetto a Docker
Supporto nativo per container rootlessAlcune funzionalità avanzate richiedono configurazione aggiuntiva
Compatibilità CLI con Docker facilita la migrazioneDocumentazione e risorse community in crescita ma ancora inferiori a Docker
Integrazione nativa con systemdCheckpointing limitato a container root
Supporto nativo per pod (Kubernetes-like)Curva di apprendimento per concetti specifici come pasta e netavark
Nessun requisito di daemon root in esecuzioneAlcune tool di terze parti potrebbero non essere ancora completamente compatibili
Ottime performance e basso overheadSu macOS/Windows richiede VM (podman machine)
Open source con sviluppo attivo Red HatCNI deprecato dalla versione 5.0 richiede migrazione

Docker vs Podman: Confronto sintetico

  • Architettura: Docker utilizza un daemon centrale che richiede privilegi root, mentre Podman è daemonless ed esegue container come processi diretti dell’utente.
  • Sicurezza: Podman offre container rootless per default, riducendo il rischio di escalation privilege. Docker richiede configurazioni aggiuntive per rootless mode.
  • Performance: Podman ha overhead inferiore grazie all’assenza del daemon. Docker può avere colli di bottiglia con molti container simultanei gestiti dal daemon.
  • Compatibilità: Entrambi seguono standard OCI. Podman mantiene compatibilità CLI con Docker, permettendo transizioni graduali.
  • Orchestrazione: Docker si integra con Docker Swarm. Podman supporta nativamente pod e si integra facilmente con Kubernetes tramite podman generate kube.

Consigli per un utilizzo ottimale

  1. Preferire modalità rootless: Quando possibile, eseguire container in modalità rootless per massimizzare la sicurezza.
  2. Utilizzare Podman Compose: Per gestire applicazioni multi-container, utilizzare podman-compose che supporta file docker-compose.yml.
  3. Automatizzare con systemd: Integrare container critici con systemd per garantire restart automatici e gestione come servizi.
  4. Monitorare risorse: Utilizzare podman stats per monitorare l’utilizzo di risorse dei container in tempo reale.
  5. Implementare health checks: Definire health checks nei Containerfile/Dockerfile per garantire affidabilità applicativa.
  6. Gestire volumi persistenti: Utilizzare volumi Podman per dati persistenti anziché bind mount quando possibile.
  7. Documentare networking: Mantenere documentazione chiara delle reti personalizzate e delle dipendenze tra container.
  8. Pianificare backup: Implementare strategie di backup per checkpoint e volumi critici.

L’importanza della formazione per team IT e DevOps

L’adozione efficace di tecnologie containerizzate come Podman richiede competenze tecniche specifiche e aggiornate. Un team DevOps formato correttamente è in grado di:

  • Implementare architetture containerizzate sicure e performanti
  • Risolvere problematiche complesse di networking e storage
  • Ottimizzare i workflow CI/CD con container
  • Gestire migrazioni da Docker a Podman senza downtime
  • Applicare best practice di sicurezza e compliance

La formazione tecnica strutturata non è solo un investimento in conoscenza, ma un fattore critico per migliorare le performance del team sul lavoro, ridurre i tempi di troubleshooting e aumentare la qualità dei deployment in produzione. Un team ben formato può ridurre drasticamente gli errori operativi, implementare soluzioni più robuste e accelerare i time-to-market dei progetti.

Formazione Podman con Innovaformazione

Innovaformazione è un ente di formazione specializzato nell’erogazione di corsi IT per aziende informatiche e professionisti del settore. Offre un corso Podman dedicato in modalità classe virtuale online con calendario personalizzabile in base alle esigenze aziendali.

Caratteristiche del corso:

  • Formazione pratica hands-on con laboratori guidati
  • Docenti certificati con esperienza enterprise
  • Calendario flessibile da concordare
  • Materiale didattico aggiornato
  • Attestato di partecipazione

Formazione finanziata con Fondimpresa

Innovaformazione gestisce integralmente i piani formativi finanziati tramite Fondimpresa, occupandosi di:

  • Progettazione del piano formativo aziendale
  • Gestione amministrativa completa
  • Presentazione della domanda di finanziamento
  • Rendicontazione e documentazione

Questo permette alle aziende di accedere a formazione di qualità con costi significativamente ridotti o azzerati, sfruttando i fondi interprofessionali disponibili.

Per maggiori informazioni e consultare il catalogo completo dei corsi:

  • Catalogo corsi: QUI
  • Email: info@innovaformazione.net
  • Telefono: 3471012275

Richiedete un preventivo gratuito e senza impegno per valutare la soluzione formativa più adatta al vostro team.

(fonte) (fonte) (fonte) (fonte)

Per altri articoli di settore consigliamo di navigare sul nostro blog QUI.

Ti potrebbe interessare

Articoli correlati