Installare e usare Podman su Debian 11

Podman (il POD MANager) è un motore di container compatibile OCI, sviluppato da Red Hat come sostituto drop-in di Docker. Si utilizza per gestire e avviare container, immagini e volumi tramite riga di comando. Docker e Podman sono software simili. La differenza principale è che Podman non richiede un demone per eseguire i container, mentre Docker necessita del demone Docker Engine. Podman usa la libreria libpod per gestire l’intero ecosistema dei container.
In questo tutorial mostriamo come installare e usare Podman su Debian 11.
Prerequisiti
- Un server con Debian 11.
- Una password root configurata sul server.
Installare Podman
Il pacchetto Podman è incluso nel repository predefinito di Debian 11. Puoi installarlo eseguendo questo comando:
apt-get install podman -yUna volta installato, verifica la versione di Podman con:
podman --versionDovresti vedere un output simile:
podman version 3.0.1Per ottenere informazioni dettagliate su Podman usa:
podman infoEsempio di output di informazioni (troncato):
host:
arch: amd64
buildahVersion: 1.19.6
cgroupManager: systemd
cgroupVersion: v2
conmon:
package: 'conmon: /usr/bin/conmon'
path: /usr/bin/conmon
version: 'conmon version 2.0.25, commit: unknown'
cpus: 2
distribution:
distribution: debian
version: "11"
eventLogger: journald
hostname: debian11
idMappings:
gidmap: null
uidmap: null
kernel: 5.10.0-8-amd64
linkmode: dynamic
memFree: 3365183488
memTotal: 4122267648
ociRuntime:
name: crun
package: 'crun: /usr/bin/crun'
path: /usr/bin/crun
version: |-
crun version 0.17
commit: 0e9229ae34caaebcb86f1fde18de3acaf18c6d9a
spec: 1.0.0
+SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +YAJL
os: linux
remoteSocket:
exists: true
path: /run/podman/podman.sock
security:
apparmorEnabled: true
capabilities: CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNER,CAP_FSETID,CAP_KILL,CAP_NET_BIND_SERVICE,CAP_SETFCAP,CAP_SETGID,CAP_SETPCAP,CAP_SETUID,CAP_SYS_CHROOT
rootless: false
seccompEnabled: true
selinuxEnabled: falseDefinizioni rapide:
- OCI: Open Container Initiative, standard per immagini e runtime dei container.
- libpod: libreria che gestisce il ciclo di vita di container, immagini e pod.
- crun: runtime OCI veloce e leggero scritto in C.
- rootless: esecuzione dei container senza privilegi root.
Importante: Podman può essere eseguito in modalità rootless per aumentare la sicurezza. Alcune funzionalità (come porte <1024 o mappature UID/GID specifiche) possono richiedere privilegi di root.
Aggiungere un registro OCI
Podman usa il file di configurazione dei registri /etc/containers/registries.conf per scaricare le immagini. Modificalo se vuoi aggiungere registri o definire registri non sicuri:
nano /etc/containers/registries.confAggiungi le seguenti righe alla fine del file:
[registries.insecure]
registries = [ ]
# If you need to block pull access from a registry, uncomment the section below
# and add the registries fully-qualified name.
# Docker only
[registries.block]
registries = [ ]Salva e chiudi il file.
Come usare Podman: comandi base
Di seguito i comandi principali per lavorare con immagini e container.
Per scaricare l’immagine Debian:
podman pull debianEsempio di output:
Resolved "debian" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Trying to pull docker.io/library/debian:latest...
Getting image source signatures
Copying blob 647acf3d48c2 done
Copying config 827e561138 done
Writing manifest to image destination
Storing signatures
827e5611389abf13dad1057e92f163b771febc0bcdb19fa2d634a7eb0641e0ccVisualizza le immagini scaricate:
podman imagesOutput esempio:
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/debian latest 827e5611389a 11 days ago 129 MBAvvia un container dalla immagine Debian:
podman run -dit debian:latestRiceverai un ID del container, ad esempio:
f85c4df5ab787912c984ec820571da7b95b32736ef94ba691d9ab5019c5b5103Elenca i container in esecuzione:
podman psOutput esempio:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f85c4df5ab78 docker.io/library/debian:latest bash 13 seconds ago Up 13 seconds ago competent_coriIspeziona un container:
podman inspect f85c4df5ab78Esempio (inizio dell’output):
[
{
"Id": "f85c4df5ab787912c984ec820571da7b95b32736ef94ba691d9ab5019c5b5103",
"Created": "2021-11-28T07:00:12.795302341Z",
"Path": "bash",
"Args": [
"bash"
],
"State": {
"OciVersion": "1.0.2-dev",
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 6881,
"ConmonPid": 6878,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-11-28T07:00:13.551753552Z",
"FinishedAt": "0001-01-01T00:00:00Z",
"Healthcheck": {
"Status": "",
"FailingStreak": 0,
"Log": null
}
},Controlla i log del container:
podman logs f85c4df5ab78Per connetterti a una shell del container in esecuzione:
podman exec -it f85c4df5ab78 /bin/bashOtterrai una shell del tipo:
root@f85c4df5ab78:/#Per uscire dalla shell del container:
root@f85c4df5ab78:/# exitFermare e rimuovere container
Per fermare un container in esecuzione:
podman stop f85c4df5ab78Verifica i container, compresi quelli fermati:
podman ps -aOutput esempio:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f85c4df5ab78 docker.io/library/debian:latest bash 3 minutes ago Exited (137) 10 seconds ago competent_coriPer rimuovere un container fermo:
podman rm f85c4df5ab78Comandi utili per operazioni veloci:
# fermare l'ultimo container creato
podman stop --latest
# avviare l'ultimo container stoppato
podman start --latest
# rimuovere l'ultimo container
podman rm --latest
# rimuovere tutti i container (forzatamente)
podman rm -f `podman ps -aq`
# rimuovere un'immagine
podman rmi 827e5611389aEsempio di output dopo la rimozione di un’immagine:
Untagged: docker.io/library/debian:latest
Deleted: 827e5611389abf13dad1057e92f163b771febc0bcdb19fa2d634a7eb0641e0ccCheat sheet rapida
- Installare: apt-get install podman -y
- Versione: podman –version
- Info host: podman info
- Scaricare immagine: podman pull
- Elencare immagini: podman images
- Avviare container (detached): podman run -dit
- Elencare container: podman ps
- Ispezionare container: podman inspect
- Log: podman logs
- Shell nel container: podman exec -it
/bin/bash - Fermare: podman stop
- Rimuovere container: podman rm
- Rimuovere immagine: podman rmi
Migrare da Docker a Podman: suggerimenti pratici
- Comandi: La maggior parte dei comandi Docker funziona con Podman, spesso senza cambi. Prova prima i comandi base.
- Docker Compose: Podman supporta podman-compose e una compatibilità crescente per docker-compose; tuttavia alcune feature potrebbero differire.
- Immagini: Le immagini Docker Hub funzionano con Podman senza modifiche.
- Sistemi di monitoring e CI: Verifica gli hook o gli agent che si aspettano il demone Docker e aggiorna le configurazioni a Podman o al socket systemd.
Quando potresti avere problemi:
- Funzionalità che richiedono il demone Docker specifico (plugin, driver esterni) potrebbero non funzionare.
- Alcune pipeline CI che eseguono comandi specifici del demone potrebbero richiedere adattamenti.
Sicurezza e hardening rapido
- Esegui Podman in rootless quando possibile.
- Usa SELinux/AppArmor e seccomp per confinare i container.
- Non esporre porte host sensibili senza controlli.
- Usa immutabilità delle immagini e firme per immagini di produzione.
- Isola volumi sensibili e limita i bind mount non necessari.
Check-list per ruoli
System Administrator
- Verificare repository e aggiornamenti di Podman
- Configurare registri e accessi
- Abilitare logging e monitoring
Developer
- Testare immagini localmente con podman run
- Usare Dockerfile esistenti, buildare con podman build
- Verificare compatibilità con docker-compose se necessario
Security Engineer
- Abilitare rootless dove possibile
- Applicare profili AppArmor/SELinux e seccomp
- Controllare capacità (capabilities) assegnate ai container
Glossario in una riga
- Container: processo isolato con filesystem e risorse dedicati.
- Immagine: snapshot leggibile del filesystem di un container.
- Pod: gruppo di container che condividono rete e IPC (termine ereditato da Kubernetes).
- Rootless: esecuzione senza privilegi root.
Risorse aggiuntive
Una guida dettagliata su come creare immagini, volumi e gestire Podman è disponibile alla documentazione ufficiale e a guide di avvio rapido: Getting Started with Podman: Manage Images, Containers and Volumes
Conclusione
In questo articolo abbiamo spiegato come installare e usare Podman su Debian 11. Puoi ora utilizzare Podman come alternativa a Docker per eseguire e gestire container, con il vantaggio di non richiedere un demone centrale e di supportare modalità rootless per una maggiore sicurezza.