Podman in Podman

  • Di
  • 2025-02-27 - 3 minuti
banner

Un container, in un altro container, che esegue dei comandi. Docker in Docker, o Podman in Podman. Ma come funziona? 🚀

TOC

Docker in Docker, Podman in Podman

Docker in Docker (o anche Podman in Podman, e abbreviato in DinD) è un esperimento di container annidati che viene fatto nel 2013 da Jérôme Petazzoni, un Software Engineer che ha lavorato per Docker a lungo e che ha deciso di utilizzare una delle feature prodotte in quella release, ossia la modalità di esecuzione privileged, per fare questo test.

Per rendere questo esperimento più “leggero”, useremo Podman, un engine daemonless che ci permette di eseguire i nostri container senza dover avere i privilegi di root.

Useremo un dockerfile come il seguente, che utilizza l’immagine di Podman (ossia quay.io/podman/stable) prodotta da Red Hat e disponibile su quay.io, e poi andremo a richiamare al suo interno sempre Podman, per eseguire il pull dell’immagine di Alpine che produce una semplice stampa di “Hello world”.

Come utente, specifichiamo podman, per rispettare quelli che sono i criteri di sicurezza applicati dalla tecnologia stessa, e anche dalle best practices.

FROM quay.io/podman/stable

USER podman

ENTRYPOINT ["podman", "run", "--rm", "docker.io/library/alpine"]

CMD ["echo", "Hello", "world"]

E ora la parte facile: è necessario procedere con la build dell’immagine (con il primo comando) e poi eseguire il deploy del container. Ci sono però alcune opzioni che vale la pena menzionare: --rm rimuove automaticamente il container quando viene arrestato e aiuta a ripulire le risorse senza lasciare container appesi.

Poi, --security-opt label=disable: questa opzione disabilita SELinux (Security-Enhanced Linux) per il container, una funzionalità del sistema operativo che fornisce un ulteriore livello di sicurezza applicando controlli di accesso.

La disabilitazione potrebbe essere necessaria in determinati contesti, in particolare quando si eseguono container che richiedono un accesso più ampio di quello che SELinux normalmente consentirebbe.

In ultimo, --user podman: questo specifica che il container deve essere eseguito dall’utente denominato “podman” anziché come utente root predefinito.

podman build -t test .

# e

podman run --rm --security-opt label=disable --user podman test

Questa struttura di comando dimostra efficacemente come Podman può essere utilizzato per gestire container all’interno di altri container, spesso definiti scenari “Docker in Docker”, mantenendo al contempo le pratiche di sicurezza e gestione delle risorse.

Schema di architettura di Podman in Podman

Tip

Per evitare di eseguire il pull dell’immagine del container interno ogni volta che eseguiamo il container più esterno, è possibile creare un volume con il seguente comando:

podman volume create myvolume

e aggiungere l’opzione seguente al comando di run precedente:

podman run --rm --security-opt label=disable --user podman test -v mystorage:/home/podman/.local/share/containers:rw

In altre parole

Perché usare Docker in Docker

L’utilizzo di un container annidato può essere vantaggioso per diversi motivi, in particolare in casi d’uso specifici come in ambienti di CI o di build isolati: DinD consente ai sistemi CI, come Jenkins o GitLab CI, di eseguire container Docker all’interno di un ambiente containerizzato.

Questa configurazione consente al sistema CI di creare, testare e distribuire applicazioni in ambienti isolati senza influire sul sistema host o su altre build.

Anche in ambienti sandbox può essere utile: DinD fornisce un ambiente sandbox in cui chi sviluppa può sperimentare comandi e configurazioni Docker senza mettere a rischio la stabilità del sistema host.

Un altro approccio in ambito di sviluppo è quello dei dev container: container già pronti all’uso con tutti i contenuti e i metadata necessari per poter sviluppare al loro interno, particolarmente utile per testare nuove funzionalità o configurazioni in modo sicuro. In questo modo, è anche possibile pulire l’intero ambiente distruggendo il container esterno, semplificando il ripristino dell’ambiente di test.

Post correlati

TheRedCode.it - Il mondo #tech a piccoli #bit

Partners

Community, aziende e persone che supportano attivamente il blog

Logo di Codemotion
Logo di GrUSP
Logo di Python Milano
Logo di Schrodinger Hat
Logo di Python Biella Group
Logo di Fuzzy Brains
Logo di Django Girls
Logo di Improove
Logo del libro open source
Logo di NgRome
Logo de La Locanda del Tech
Logo di Tomorrow Devs
Logo di Coderful
Logo di VueSchool

Non perderti gli ultimi aggiornamenti, iscriviti a TheRedCode Digest!

La tecnologia corre, e tu devi correre più veloce per rimanere sempre sul pezzo! 🚀

Riceverai una volta al mese (o anche meno) con codici sconto per partecipare agli eventi del settore, quiz per vincere dei gadget e i recap degli articoli più interessanti pubblicati sul blog

Ci sto!

#TheRedComics

Edizione di Gennaio - Buon Anno nuovo!

A cura di Sophie Aiello, copy di Chiara Romano

Fumetto di dicembre di Sophie Aiello, Copy di Chiara Romano

Vuoi diventare #tech content creator? 🖊️

Se vuoi raccontare la tua sul mondo #tech con dei post a tema o vuoi condividere la tua esperienza con la community, sei nel posto giusto! 😉

Manda una mail a collaborazioni[at]theredcode.it con la tua proposta e diventa la prossima penna del blog!

Ma sì, facciamolo!