- 1 1. Introduzione
- 2 2. Cos’è Podman?
- 3 3. Installare Podman su Ubuntu
- 4 4. Nozioni di Base sui Dockerfile e Uso con Podman
- 5 5. Esempio pratico: creazione di un container basato su Ubuntu
- 6 6. Funzionalità utili di Podman e consigli
- 7 7. Guida alla migrazione: da Docker a Podman
- 8 8. Domande Frequenti (FAQ)
- 8.1 Q1. Qual è la principale differenza tra Podman e Docker?
- 8.2 Q2. Qual è la differenza tra Dockerfile e Containerfile?
- 8.3 Q3. Docker Compose può essere utilizzato con Podman?
- 8.4 Q4. Podman funziona in modo stabile su Ubuntu?
- 8.5 Q5. Ci sono limitazioni nell’utilizzo della modalità rootless?
- 8.6 Q6. Podman può scaricare le stesse immagini di Docker Hub?
- 8.7 Q7. Podman è adatto per ambienti di produzione?
1. Introduzione
L’evoluzione della tecnologia dei container e perché è importante
Negli ultimi anni, l’importanza della tecnologia dei container è aumentata rapidamente nello sviluppo e nelle operazioni delle applicazioni. In particolare, la capacità di garantire la riproducibilità allineando gli ambienti di sviluppo e produzione ha ottenuto un forte supporto tra gli ingegneri.
Docker è stato a lungo la soluzione dominante in questo ambito, ma negli ultimi anni, Podman è emerso come una valida alternativa. Podman offre una CLI (Command Line Interface) quasi identica a Docker, fornendo al contempo vantaggi chiave come un’architettura senza demone, operazione leggera e esecuzione senza privilegi di root senza richiedere privilegi di root.
Perché “Podman + Dockerfile + Ubuntu”?
Questo articolo spiega le operazioni moderne con i container su Linux combinando tre elementi essenziali: Podman, Dockerfile e Ubuntu.
- Ubuntu è una distribuzione Linux ampiamente utilizzata, adatta sia ai principianti che agli utenti avanzati,
- Dockerfile funge da modello per la creazione di immagini di container,
- E Podman è uno strumento di nuova generazione che consente una gestione dei container più flessibile e sicura.
Con la crescente consapevolezza della sicurezza, l’uso di Podman con Dockerfile su Ubuntu è diventato una scelta popolare sia per gli sviluppatori individuali sia per gli ambienti aziendali.
Scopo e pubblico di riferimento
Lo scopo di questo articolo è spiegare attentamente come creare Dockerfile e realizzare container pratici usando Podman su Ubuntu.
Questo articolo è destinato a lettori come:
- Coloro che hanno esperienza con Docker e sono interessati a Podman
- Utenti di Ubuntu che desiderano gestire i container in modo sicuro
- Ingegneri che intendono adottare la tecnologia dei container nel loro lavoro
- Principianti che vogliono provare a scrivere Dockerfile e a costruire immagini con Podman
Oltre all’uso di base, questo articolo copre anche consigli di risoluzione dei problemi, le principali differenze rispetto a Docker e le strategie di migrazione.
2. Cos’è Podman?
Panoramica di base di Podman
Podman (Pod Manager) è uno strumento di gestione dei container di nuova generazione sviluppato dalla community guidata da Red Hat. Come Docker, può creare, eseguire e gestire container conformi a OCI (Open Container Initiative), ma la sua filosofia di progettazione e architettura differiscono in modo significativo.
La caratteristica più notevole è che Podman non richiede un demone. Questo consente un’operazione leggera e sicura. Podman supporta anche la modalità rootless, permettendo agli utenti normali di gestire i container senza escalation di privilegi. La compatibilità della sua CLI con Docker è molto alta, rendendo la migrazione semplice.
Caratteristiche principali di Podman
Di seguito alcune delle principali caratteristiche di Podman:
Architettura senza demone
Podman non si basa su un processo demone in background per gestire i container. Questo permette un utilizzo più efficiente delle risorse senza servizi di background inutili.
Supporto rootless (utente non privilegiato)
Podman consente agli utenti non amministratori di avviare e gestire i container. Questo migliora notevolmente la sicurezza in ambienti multiutente o server e riduce significativamente i rischi di sicurezza.
CLI compatibile con Docker
Podman utilizza quasi la stessa struttura di comandi di Docker. Ad esempio, i seguenti comandi Docker funzionano quasi identicamente in Podman:
podman build -t myimage .
podman run -it myimage bash
Di conseguenza, gli utenti Docker possono migrare con minima frizione.
Funzionalità Pod
Podman incorpora il concetto di “Pod” di Kubernetes, consentendo la gestione di più container come un’unica unità logica. Questo rende Podman altamente compatibile con Kubernetes e permette transizioni fluide dallo sviluppo locale agli ambienti cloud.
Compatibilità con Ubuntu
Mentre Podman è ampiamente adottato in Fedora e nelle distribuzioni basate su RHEL, funziona in modo stabile anche su Ubuntu. Può essere installato dai repository ufficiali con una configurazione relativamente semplice. Dalla versione Ubuntu 20.04 LTS, il supporto dei pacchetti è notevolmente migliorato, abbassando la soglia d’ingresso.
3. Installare Podman su Ubuntu
Prima di Iniziare: Prerequisiti
Prima di installare Podman su Ubuntu, verifica prima la tua versione di Ubuntu. Podman è ufficialmente consigliato per Ubuntu 20.04 LTS o versioni successive. Su versioni più vecchie, i pacchetti richiesti potrebbero non essere disponibili nei repository ufficiali.
Puoi controllare la tua versione di Ubuntu usando il seguente comando:
lsb_release -a
L’installazione di Podman richiede privilegi sudo. Anche se prevedi di usare Podman in modalità rootless, i privilegi di amministratore sono comunque necessari durante l’installazione.
Installare Podman dal Repository Ufficiale di Ubuntu
Sulle versioni recenti di Ubuntu, come 20.04 o 22.04, Podman può essere installato facilmente usando APT.
sudo apt update
sudo apt install -y podman
Dopo l’installazione, verifica che Podman sia stato installato correttamente controllando la versione:
podman --version
Installare l’Ultima Versione Usando il PPA Ufficiale
La versione di Podman inclusa nel repository predefinito di Ubuntu è spesso leggermente obsoleta. Se desideri utilizzare le funzionalità più recenti, puoi installare Podman dal 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
Questo metodo ti consente di usare le versioni più recenti di Podman equivalenti a quelle presenti su sistemi Red Hat e Fedora.
Test di Base della Funzionalità di Podman
Dopo l’installazione, esegui un semplice test per confermare che Podman funzioni correttamente:
podman info
Questo comando mostra la configurazione di Podman, la versione e le funzionalità supportate, come la modalità rootless.
Puoi anche testare l’esecuzione di un container avviando un’immagine ufficiale di Alpine Linux:
podman run --rm -it alpine sh
Se la shell si avvia correttamente, Podman sta funzionando come previsto.
4. Nozioni di Base sui Dockerfile e Uso con Podman
Che Cos’è un Dockerfile?
Un Dockerfile è un modello utilizzato per costruire immagini di container. È un file di testo che definisce istruzioni come l’immagine di base da usare, i pacchetti da installare e i file da copiare.
Sulla base di questo file, strumenti di container come Podman e Docker possono creare automaticamente un ambiente coerente.
Le istruzioni più comuni nei Dockerfile includono:
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 esempio installa pacchetti su un’immagine di base Ubuntu, copia uno script e definisce il comando di esecuzione predefinito.
Usare Dockerfile con Podman
Podman può costruire immagini di container da Dockerfile nello stesso modo di Docker.
1. Preparare la Directory del Progetto
Crea la seguente struttura di directory:
project/
├── Dockerfile
└── app.sh
Il file app.sh può contenere uno script semplice:
#!/bin/bash
echo "Hello from Podman container!"
Rendi lo script eseguibile:
chmod +x app.sh
2. Costruire l’Immagine con Podman
Esegui il comando seguente nella directory che contiene il Dockerfile:
podman build -t mypodmanapp .
Questo crea un’immagine di container chiamata mypodmanapp.
3. Verificare l’Immagine Costruita
Puoi elencare le immagini disponibili con:
podman images
4. Eseguire il Container
Avvia un container usando l’immagine costruita:
podman run --rm mypodmanapp
Se configurato correttamente, l’output Hello from Podman container! verrà visualizzato.
Dockerfile vs Containerfile
In Podman, i file che usano la sintassi Dockerfile possono anche essere chiamati Containerfile. Questa denominazione riflette il desiderio di una terminologia indipendente da Docker.
Non c’è alcuna differenza funzionale tra Dockerfile e Containerfile. Entrambi sono pienamente supportati da Podman.
podman build -f Containerfile -t myimage .
È possibile specificare il nome del file esplicitamente usando l’opzione -f.
5. Esempio pratico: creazione di un container basato su Ubuntu
Creazione di un Dockerfile basato su Ubuntu
Da qui, percorreremo un esempio pratico, passo‑passo, di creazione di un Dockerfile basato su Ubuntu e costruzione ed esecuzione di un’immagine container con Podman.
Per prima cosa, crea il seguente semplice 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 esegue le seguenti operazioni:
- Usa l’immagine ufficiale Ubuntu 22.04 come base
- Installa il pacchetto
curl - Copia
hello.shdall’host nel container - Imposta
hello.shcome script di esecuzione predefinito
Successivamente, crea un semplice script shell chiamato hello.sh:
#!/bin/bash
echo "Hello, this output is from a Podman container!"
Concedi i permessi di esecuzione allo script:
chmod +x hello.sh
Costruzione dell’immagine con Podman
Una volta pronti i file, costruisci l’immagine usando il comando seguente:
podman build -t ubuntu-hello .
L’opzione -t ubuntu-hello assegna un nome di tag all’immagine, e il . finale specifica la directory contenente il Dockerfile.
Se la compilazione termina con successo, l’immagine verrà memorizzata localmente.
podman images
Puoi usare questo comando per verificare che l’immagine sia stata creata.
Esecuzione e verifica dell’immagine costruita
Esegui un container dall’immagine appena creata usando il comando seguente:
podman run --rm ubuntu-hello
Output di esempio:
Hello, this output is from a Podman container!
L’opzione --rm rimuove automaticamente il container al termine dell’esecuzione, rendendolo ideale per scopi di test.
Opzionale: esecuzione di un container interattivo
Se desideri interagire direttamente con il container, puoi avviarlo con l’opzione -it e lanciare Bash:
podman run -it ubuntu-hello bash
Questo ti consente di usare il container come un ambiente di sviluppo leggero basato su Ubuntu.
6. Funzionalità utili di Podman e consigli
Punti di forza di Podman: flessibilità e sicurezza
Mantenendo la compatibilità con Docker, Podman offre funzionalità che consentono operazioni container più flessibili e sicure. Questa sezione presenta funzionalità pratiche e suggerimenti particolarmente utili nella routine quotidiana.
Operazioni sicure con la modalità rootless
Una delle funzionalità più potenti di Podman è la modalità rootless, che permette agli utenti normali di avviare, arrestare e gestire i container senza privilegi di amministratore.
Puoi eseguire i container senza sudo come mostrato di seguito:
podman run -it ubuntu bash
Poiché questa operazione è confinata nella directory home dell’utente, l’impatto a livello di sistema è ridotto. La modalità rootless è particolarmente utile su server condivisi e ambienti di sviluppo.
Avvio automatico con integrazione systemd
Podman supporta l’integrazione nativa con systemd, consentendo ai container di avviarsi automaticamente come servizi Linux.
Puoi generare un’unità di servizio systemd per un container usando il comando seguente:
podman generate systemd --name mycontainer --files --restart-policy=always
Questo comando crea i file di unità in ~/.config/systemd/user/. Dopo la generazione, abilita e avvia il servizio come segue:
systemctl --user daemon-reexec
systemctl --user enable --now container-mycontainer.service
Questa configurazione garantisce che i container si avviino automaticamente all’avvio del sistema.
Gestione di più container con podman-compose
Oltre a gestire container singoli, Podman supporta l’orchestrazione multi‑container. Utilizzando podman‑compose, è possibile ottenere una funzionalità simile a Docker Compose.
Installa podman‑compose usando pip:
pip install podman-compose
Poiché è ampiamente compatibile con i file docker-compose.yml, è spesso possibile riutilizzare le configurazioni esistenti.
Avviare i servizi è semplice come eseguire:
podman-compose up -d
Questo ti consente di riprodurre ambienti di sviluppo completi istantaneamente anche quando usi Podman.
Altri comandi utili e consigli
Pulizia di immagini e container inutilizzati
podman system prune -a
Questo comando rimuove container, immagini e file temporanei inutilizzati, aiutando a mantenere pulito lo spazio di archiviazione.
Abilitare il completamento dei comandi (bash/zsh)
Puoi installare il supporto al completamento dei comandi con il seguente pacchetto:
sudo apt install podman-docker
Questo abilita il completamento dei comandi simile a Docker per Podman, migliorando la produttività.
7. Guida alla migrazione: da Docker a Podman
Perché la migrazione a Podman sta guadagnando attenzione
Docker è stato a lungo sinonimo di tecnologia dei container, ma negli ultimi anni, un passaggio verso Podman come alternativa più leggera e sicura ha guadagnato slancio. In particolare, Red Hat Enterprise Linux (RHEL) e Fedora hanno ridotto il supporto a Docker e hanno adottato Podman come motore di container predefinito, spingendo molte organizzazioni a considerare la migrazione.
Questa sezione spiega i passaggi pratici e le considerazioni importanti per migrare senza problemi da Docker a Podman.
Compatibilità dei comandi tra Docker e Podman
Podman mantiene un alto livello di compatibilità della CLI con Docker, consentendo di sostituire direttamente la maggior parte dei comandi senza modifiche.
| Docker | Podman |
|---|---|
docker build -t myapp . | podman build -t myapp . |
docker run -it myapp | podman run -it myapp |
docker images | podman images |
docker ps | podman ps |
Ciò rende possibile passare a Podman senza cambiare il tuo flusso di lavoro, che è uno dei suoi maggiori vantaggi.
Ottenere piena compatibilità con podman-docker
Se gli script esistenti, le pipeline CI/CD o gli strumenti presumono la presenza del comando docker, puoi installare il pacchetto podman-docker per far sì che Podman funzioni come sostituto immediato.
sudo apt install podman-docker
Dopo l’installazione, il comando docker diventa un collegamento simbolico a Podman:
which docker
# → /usr/bin/docker → symbolic link to podman
Questo consente agli script basati su Docker esistenti di funzionare su Podman senza modifiche.
Sostituire docker-compose con podman-compose
Per i progetti che usano Docker Compose per definire ambienti multi‑container, podman-compose fornisce un’alternativa compatibile.
Sebbene la compatibilità sia generalmente alta, nota le seguenti limitazioni:
- Alcune opzioni di Compose (come
depends_on) potrebbero non essere supportate o comportarsi diversamente - Possono esserci differenze nel logging degli eventi e nel comportamento dei controlli di salute
Per configurazioni tipiche, come una combinazione di server web e database, la migrazione è solitamente semplice.
Migrazione di immagini e volumi
Le immagini Docker memorizzate localmente non possono essere accedute direttamente da Podman. È necessario o riscaricarle o esportarle e importarle.
Opzione 1: Riscaricare le immagini con Podman
podman pull ubuntu:22.04
Opzione 2: Esportare da Docker e importare in Podman
# Export from Docker
docker save myimage > myimage.tar
# Import into Podman
podman load < myimage.tar
Ciò consente di riutilizzare le immagini create con Docker in Podman.
Considerazioni aggiuntive sulla migrazione
- Differenze nell’operazione rootless: Docker tipicamente presuppone l’uso di root, mentre Podman è progettato per l’operazione rootless
- Architettura daemon: Podman è senza daemon, modificando il modo in cui i processi in background sono gestiti
- Posizioni di archiviazione dei log e dei dati differiscono e dovrebbero essere riviste durante la migrazione
8. Domande Frequenti (FAQ)
Q1. Qual è la principale differenza tra Podman e Docker?
A1. La differenza più significativa è che Podman opera senza un demone. Questo consente un funzionamento più leggero e sicuro. Podman supporta anche la modalità rootless, che permette la gestione dei container senza escalazione di privilegi. La compatibilità CLI con Docker è molto alta.
Q2. Qual è la differenza tra Dockerfile e Containerfile?
A2. Non c’è nessuna differenza funzionale. Entrambi i file descrivono le istruzioni per la build del container utilizzando la stessa sintassi.
Il nome Containerfile è preferito nei progetti conformi a OCI per evitare terminologia specifica di Docker. In pratica, Dockerfile funziona perfettamente con Podman.
Q3. Docker Compose può essere utilizzato con Podman?
A3. Docker Compose non è supportato direttamente, ma è possibile utilizzare podman-compose come alternativa. Esso interpreta i file docker-compose.yml in un ambiente Podman.
Alcune opzioni come depends_on sono limitate, quindi si raccomanda il test per configurazioni complesse.
Q4. Podman funziona in modo stabile su Ubuntu?
A4. Sì. Podman funziona in modo stabile su Ubuntu 20.04 LTS e versioni successive. È disponibile nei repository ufficiali di Ubuntu e può essere installato facilmente utilizzando apt. Per versioni più recenti, l’utilizzo di un PPA è anche un’opzione.
Q5. Ci sono limitazioni nell’utilizzo della modalità rootless?
A5. La modalità rootless restringe determinate operazioni privilegiate e il binding alle porte inferiori a 1024. Tuttavia, queste limitazioni possono spesso essere aggirate utilizzando il port forwarding. Per la maggior parte dei casi d’uso, la modalità rootless è pienamente pratica.
Q6. Podman può scaricare le stesse immagini di Docker Hub?
A6. Sì. Podman può scaricare immagini da Docker Hub per impostazione predefinita. In alcuni ambienti, potrebbe essere necessario specificare esplicitamente il registro e lo spazio dei nomi:
podman pull docker.io/library/ubuntu
Podman supporta anche altri registri come Quay.io e GitHub Container Registry.
Q7. Podman è adatto per ambienti di produzione?
A7. Sì. Podman include funzionalità richieste per l’uso in produzione, come i concetti di pod compatibili con Kubernetes e l’integrazione con systemd. In ambienti sensibili alla sicurezza, Podman potrebbe essere una scelta migliore rispetto a Docker.
Podman è già il motore di container predefinito in RHEL e Fedora e ha un’adozione estesa in produzione.



