Un immagine non è da intendere come un blocco unico, ma come una pila di livelli incrementali detti “layer“.

L’insieme ordinato dei layer, costituisce il singolo oggetto immagine. 

Questa struttura ha numerosi vantaggi; Il principale è che i layer sono riusabili

Ad esempio, se più immagini sono costruite a partire da un’immagine della stessa versione di Ubuntu, Docker non scaricherà ogni volta una nuova copia di tale immagine ma userà la stessa per costruire tutte le immagini coinvolte.

Come funziona la condivisione dei layer?

Alla prima richiesta l’immagine di partenza verrà scaricata, alle successive sarà recuperata dal repository locale dell’host. Per “repository locale dell’host” intendo il sistema che colleziona e organizza le immagini presenti sul device che sta scaricando le immagini.

A seconda delle dipendenze la dimensione di un’immagine può variare di molto. Si può variare da pochi KiloByte a svariati GigaByte.

E’ anche possibile creare un’immagine a partire da un container, facendone una sorta di fotografia. Per fare ciò si usa il comando docker container commit.
Va detto però che è un caso che trova applicazione solo in contesti particolari.

Per chi come me si occupa di sviluppare software, penso possa essere utile fare un parallelo (per cercare di dare un’idea, non una definizione). Pensate alle immagini come a delle classi e i container come degli oggetti, ovvero delle immagini istanziate.


In realtà anche le immagini vengono costruite, producendo un binario, ma questo avviene build-time. I container invece vengono costruiti run-time.


Prosegui su: Cosa succede quando scarichiamo un’immagine

Immagine: Legno foto creata da wirestock – it.freepik.com