Come utilizzare Podman, Dockerfile e Ubuntu: gestione sicura e moderna dei container su Linux

目次

1. Introduzione

L’Evoluzione e la Crescente Importanza della Tecnologia dei Container

Negli ultimi anni, la tecnologia dei container ha guadagnato rapidamente importanza nel campo dello sviluppo e delle operazioni delle applicazioni. In particolare, la capacità di allineare gli ambienti di sviluppo e produzione garantisce la riproducibilità delle operazioni, un vantaggio chiave che ha ottenuto un forte sostegno tra gli ingegneri.

Sebbene Docker rimanga la piattaforma di container più riconosciuta, Podman sta attirando un’attenzione crescente come alternativa moderna. Podman offre un’interfaccia a riga di comando (CLI) quasi identica a quella di Docker, ma si distingue per la sua architettura senza demone e leggera e per il supporto all’operazione rootless (non root).

Perché “Podman + Dockerfile + Ubuntu”?

In questo articolo, spiegheremo come combinare Podman, Dockerfile e Ubuntu per flussi di lavoro moderni con i container su Linux.

  • Ubuntu è una distribuzione Linux popolare utilizzata da tutti, dai principianti agli utenti avanzati,
  • Dockerfile funge da blueprint per la costruzione di immagini di container,
  • e Podman è uno strumento di nuova generazione progettato per gestire queste immagini in modo flessibile e sicuro.

Con una crescente consapevolezza della sicurezza, l’approccio di utilizzare Podman con Dockerfile su Ubuntu è sempre più adottato sia da sviluppatori individuali che da team aziendali.

Scopo e Pubblico di Riferimento

L’obiettivo di questo articolo è fornire una guida chiara e passo-passo per costruire container pratici con Podman e Dockerfile su Ubuntu.

Questo articolo è destinato a lettori come:

  • Sviluppatori esperti con Docker che sono curiosi riguardo a Podman
  • Utenti Ubuntu alla ricerca di una gestione sicura dei container
  • Ingegneri che mirano a incorporare tecnologie di container nel loro flusso di lavoro
  • Principianti interessati a scrivere Dockerfile e costruire con Podman

Copriremo tutto, dalle basi e consigli per la risoluzione dei problemi alle differenze chiave con Docker e come migrare.

2. Cos’è Podman?

Panoramica su Podman

Podman (Pod Manager) è uno strumento di gestione dei container di nuova generazione sviluppato da una comunità guidata da Red Hat. Come Docker, può costruire, eseguire e gestire container conformi a OCI, ma il suo design e l’architettura differiscono in modi significativi.

La caratteristica principale di Podman è che non richiede un demone in background. Questo consente un’operazione leggera e sicura. Podman supporta anche la modalità rootless, che permette agli utenti regolari di gestire i container senza privilegi elevati. La CLI è altamente compatibile con Docker, quindi la maggior parte dei comandi è quasi identica.

Caratteristiche Principali di Podman

Ecco alcune caratteristiche notevoli di Podman:

Architettura Senza Demone

Podman opera senza un demone in background (processo residente) per la gestione dei container. Questo porta a un uso efficiente delle risorse, senza processi in background inutili.

Supporto Rootless (Utenti Non Privilegiati)

Podman permette agli utenti regolari di eseguire e gestire container senza privilegi di amministratore. Questo rende possibile operare i container in modo sicuro in ambienti multi-utente o server, riducendo significativamente i rischi di sicurezza.

CLI Compatibile con Docker

Podman utilizza una struttura di comandi quasi identica a quella di Docker. Ad esempio, i seguenti comandi Docker funzionano quasi identicamente in Podman:

podman build -t myimage .
podman run -it myimage bash

Questo permette agli utenti familiari con Docker di passare senza problemi a Podman.

Funzionalità Pod

Podman adotta il concetto di “Pod” da Kubernetes, permettendo di gestire più container come un’unica unità logica. Questo aumenta la compatibilità con Kubernetes e consente una migrazione fluida da ambienti locali a quelli cloud.

Compatibilità con Ubuntu

Sebbene Podman sia ampiamente adottato su Fedora e distribuzioni basate su RHEL, funziona anche stabilmente su Ubuntu. È possibile installarlo dai repository ufficiali, e l’impostazione è semplice. In particolare, da Ubuntu 20.04 LTS, la manutenzione dei pacchetti è migliorata, abbassando la barriera all’adozione.

3. Installare Podman su Ubuntu

Prima di Iniziare: Checklist Pre‑Installazione

Prima di installare Podman su Ubuntu, verifica la versione di Ubuntu in uso. Podman è consigliato per Ubuntu 20.04 LTS o versioni successive. Le versioni più vecchie potrebbero non contenere i pacchetti necessari nei repository ufficiali.

Controlla la versione di Ubuntu con il seguente comando:

lsb_release -a

L’installazione di Podman richiede i privilegi sudo. Anche se prevedi di utilizzare la modalità rootless, sono necessari i privilegi di amministratore per l’installazione iniziale, quindi assicurati di averli.

Installare Podman (Repository Ufficiale di Ubuntu)

Su Ubuntu 20.04, 22.04 o versioni successive, puoi installare Podman facilmente con APT:

sudo apt update
sudo apt install -y podman

Dopo l’installazione, verifica la versione per confermare che tutto sia stato configurato correttamente:

podman --version

Come Ottenere la Versione più Recente (PPA Ufficiale)

Il pacchetto Podman presente nel repository standard di Ubuntu potrebbe non essere l’ultimo disponibile. Se desideri le funzionalità più recenti, usa il Personal Package Archive (PPA) ufficiale:

. /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
sudo apt update
sudo apt install -y podman

In questo modo avrai accesso all’ultima release di Podman, equivalente a quella presente negli ecosistemi Red Hat e Fedora.

Test di Funzionalità Base di Podman

Dopo l’installazione, esegui un rapido controllo:

podman info

Questo comando mostra la versione di Podman, la configurazione e le funzionalità supportate, come la modalità rootless.

Prova a scaricare ed eseguire un container ufficiale di Alpine Linux:

podman run --rm -it alpine sh

Se la shell si avvia correttamente, la tua configurazione di Podman funziona.

4. Usare Dockerfile con Podman

Che cos’è un Dockerfile?

Un Dockerfile è un modello per costruire immagini container. È un file di testo che elenca l’immagine di base, i pacchetti da installare, i file da copiare e altre istruzioni in sequenza.

Strumenti di container come Podman e Docker possono creare automaticamente un ambiente coerente basandosi su questo file.

Esempio di istruzioni:

FROM ubuntu:22.04
RUN apt update && apt install -y curl
COPY ./app.sh /usr/local/bin/app.sh
CMD ["bash", "/usr/local/bin/app.sh"]

Questo installa pacchetti, copia script e definisce cosa deve essere eseguito di default nell’immagine risultante.

Come Usare Dockerfile con Podman

Puoi costruire immagini container da Dockerfile con Podman, quasi esattamente come faresti con Docker.

1. Preparare la Directory

Organizza i tuoi file così:

project/
├── Dockerfile
└── app.sh

app.sh può essere uno script semplice:

#!/bin/bash
echo "Hello from Podman container!"

Rendi lo script eseguibile:

chmod +x app.sh

2. Costruire con Podman

Con il Dockerfile nella directory corrente, esegui:

podman build -t mypodmanapp .

Questo crea un’immagine container chiamata mypodmanapp.

3. Verificare il Risultato della Build

Visualizza l’immagine creata con:

podman images

4. Eseguire il Container

Avvia un container dalla tua immagine costruita:

podman run --rm mypodmanapp

Se tutto è configurato correttamente, vedrai: Hello from Podman container!

Differenza con Containerfile

Podman supporta file denominati Containerfile, che usano la stessa sintassi di Dockerfile. Si tratta semplicemente di un nome neutro, non legato al marchio Docker.

La funzionalità è identica. Che tu chiami il file Dockerfile o Containerfile, Podman lo utilizzerà:

podman build -f Containerfile -t myimage .

Basta specificare il nome del file con l’opzione -f se necessario.

5. Esempio Pratico: Costruire un Container Basato su Ubuntu

Creare un Dockerfile Basato su Ubuntu

Procediamo passo dopo passo nella creazione di un Dockerfile basato su Ubuntu e nella costruzione e esecuzione di un’immagine di container con Podman.

Ecco un semplice esempio di Dockerfile:

FROM ubuntu:22.04

RUN apt update && 
    apt install -y curl && 
    apt clean

COPY hello.sh /usr/local/bin/hello.sh
RUN chmod +x /usr/local/bin/hello.sh

CMD ["/usr/local/bin/hello.sh"]

Questo Dockerfile:

  • Utilizza l’immagine ufficiale di Ubuntu 22.04
  • Installa il pacchetto curl
  • Copia hello.sh dall’host nel container
  • Imposta hello.sh come script predefinito

Ora, crea un semplice script hello.sh:

#!/bin/bash
echo "Hello from a Podman container!"

Assegna i permessi di esecuzione:

chmod +x hello.sh

Costruzione dell’Immagine con Podman

Una volta pronti i tuoi file, costruisci l’immagine con:

podman build -t ubuntu-hello .

La flag -t ubuntu-hello etichetta la tua immagine; il . specifica la directory di build.

Se ha successo, vedrai la tua nuova immagine elencata con:

podman images

Esecuzione e Test dell’Immagine

Esegui un container dalla tua nuova immagine:

podman run --rm ubuntu-hello

Output di esempio:

Hello from a Podman container!

L’opzione --rm rimuove automaticamente il container dopo l’uscita, perfetto per i test.

Suggerimento: Accesso Interattivo al Container

Se vuoi lavorare interattivamente all’interno del container, usa l’opzione -it per avviare Bash:

podman run -it ubuntu-hello bash

Questo ti fornisce un ambiente di sviluppo Ubuntu leggero all’interno del tuo container.

6. Funzionalità e Suggerimenti di Podman

Punti di Forza di Podman: Flessibilità e Sicurezza

Podman fornisce maggiore flessibilità e sicurezza migliorata pur rimanendo compatibile con Docker. Ecco alcune funzionalità utili e suggerimenti per l’uso quotidiano.

Operazioni Sicure con Modalità Rootless

Una delle principali forze di Podman è la modalità rootless, che permette agli utenti non-root di eseguire, fermare e gestire i container.

Ad esempio, puoi usare Podman senza sudo:

podman run -it ubuntu bash

Le operazioni sono limitate alla directory home dell’utente, minimizzando il rischio per il sistema. Questo è particolarmente prezioso su server condivisi o in ambienti di sviluppo.

Integrazione con systemd per l’Avvio Automatico

Podman può integrarsi nativamente con systemd, permettendo ai container di avviarsi automaticamente come servizi Linux.

Genera un file unit di systemd con:

podman generate systemd --name mycontainer --files --restart-policy=always

Questo crea un file unit in ~/.config/systemd/user/. Abilita e avvia con:

systemctl --user daemon-reexec
systemctl --user enable --now container-mycontainer.service

I container ora si riavvieranno automaticamente anche dopo il riavvio del server.

Gestione di Multipli Container con podman-compose

In aggiunta alle operazioni su singolo container, Podman supporta la gestione multi-container. Usando podman-compose, puoi gestire progetti complessi simili a Docker Compose.

Installa con pip:

pip install podman-compose

Poiché è compatibile con i file docker-compose.yml, la migrazione dei progetti è facile.

Per avviare i servizi, esegui semplicemente:

podman-compose up -d

Podman ti permette di riprodurre ambienti di sviluppo istantaneamente.

Altri Comandi e Suggerimenti Utili

Pulizia di Immagini e Container Non Utilizzati

podman system prune -a

Rimuovi file e immagini non utilizzati per liberare spazio di archiviazione.

Completamento Shell (bash/zsh)

Installa gli script di completamento di Podman per un uso CLI più facile:

sudo apt install podman-docker

Questo abilita il completamento dei comandi, simile a Docker, per il comando podman.

7. Migrazione da Docker a Podman

Perché la Migrazione a Podman è in Tendenza

Mentre Docker è stato a lungo lo standard de facto per i container, Podman sta guadagnando popolarità per il suo peso più leggero e la sicurezza più forte. Red Hat Enterprise Linux (RHEL) e Fedora sono passati da Docker a Podman di default, portando molte squadre a considerare la migrazione.

Questa sezione copre passaggi pratici e punti da considerare per la migrazione da Docker a Podman.

Compatibilità dei comandi: Docker vs. Podman

Podman è altamente compatibile con i comandi Docker, quindi puoi sostituirli direttamente nella maggior parte dei casi:

DockerPodman
docker build -t myapp .podman build -t myapp .
docker run -it myapppodman run -it myapp
docker imagespodman images
docker pspodman ps

Questa compatibilità fluida della CLI è un grande vantaggio di Podman.

Ottenere la piena compatibilità con podman-docker

Se i tuoi script o pipeline CI/CD usano i comandi docker, installare il pacchetto podman-docker permette a Podman di fungere da sostituto immediato:

sudo apt install podman-docker

Questo configura il comando docker come un collegamento simbolico a Podman:

which docker
# → /usr/bin/docker → podman symlink

Puoi quindi eseguire gli script Docker senza modifiche.

Alternativa a Docker Compose: podman-compose

Se usi Docker Compose per progetti multi-contenitore, podman-compose offre funzionalità simili.

È altamente compatibile ma alcune opzioni di Compose possono differire (es. depends_on), e la registrazione degli eventi o i controlli di salute possono comportarsi diversamente. Per stack web + DB di base, la migrazione è generalmente fluida.

Migrazione di immagini e volumi

Le immagini Docker locali non sono visibili a Podman per impostazione predefinita. Puoi:

Opzione 1: Re-pull con Podman

podman pull ubuntu:22.04

Opzione 2: Esportare da Docker → Importare in Podman

# Export with Docker
docker save myimage > myimage.tar

# Import with Podman
podman load < myimage.tar

Questo rende le immagini costruite con Docker disponibili in Podman.

Altre considerazioni

  • Operazione senza privilegi (rootless): Docker tipicamente gira come root, mentre Podman è progettato per l’operazione senza privilegi per impostazione predefinita
  • Struttura daemon: Podman è senza daemon, quindi la gestione dei processi è diversa
  • Posizioni di log e archiviazione dati possono differire — verifica le configurazioni durante la migrazione

8. Domande frequenti (FAQ)

Q1. Quali sono le principali differenze tra Podman e Docker?

A1. La differenza più grande è che Podman è “senza daemon” (non richiede alcun processo in background), rendendolo più leggero e più sicuro. Podman supporta anche la modalità rootless, consentendo agli utenti di gestire i container senza privilegi elevati. La compatibilità della CLI è alta, quindi la maggior parte dei comandi è identica.

Q2. C’è una differenza tra Dockerfile e Containerfile?

A2. Non c’è alcuna differenza funzionale. Entrambi sono file che descrivono come costruire i container, con sintassi identica. Alcuni progetti preferiscono “Containerfile” come nome neutro, ma puoi usare entrambi i nomi con Podman.

Q3. Posso usare i file Docker Compose con Podman?

A3. Podman non supporta nativamente Docker Compose, ma puoi usare podman-compose (uno strumento Python) per interpretare ed eseguire i file docker-compose.yml in un ambiente Podman.

Alcune opzioni di Compose (depends_on, ecc.) possono avere limitazioni, quindi testa in anticipo configurazioni complesse.

Q4. Podman è stabile su Ubuntu?

A4. Sì, Podman funziona in modo affidabile su Ubuntu 20.04 LTS e versioni successive. È disponibile nei repository ufficiali di Ubuntu e può essere installato con apt. Per la versione più recente, puoi usare il PPA ufficiale.

Q5. Ci sono restrizioni di accesso nella modalità rootless?

A5. In modalità rootless, alcune operazioni privilegiate e il binding a porte inferiori a 1024 sono limitati. Il port forwarding può aggirare questo. Per la maggior parte dei casi d’uso, la modalità rootless è pratica e consigliata.

Q6. Podman può scaricare immagini da Docker Hub?

A6. Sì, Podman può scaricare immagini da Docker Hub per impostazione predefinita. A volte potresti dover specificare il percorso completo del registro, ad es. docker.io/library/ubuntu:

podman pull docker.io/library/ubuntu

Podman supporta anche registri come Quay.io e GitHub Container Registry.

Q7. Podman è adatto per l’uso in produzione?

A7. Sì, Podman include concetti di pod compatibili con Kubernetes e l’integrazione con systemd per l’avvio automatico, rendendolo adatto agli ambienti di produzione—soprattutto dove è necessaria una forte sicurezza. Podman è ora predefinito su Red Hat Enterprise Linux e Fedora, con una larga adozione.