Abbiamo capito che le immagini condividono i layer. Ma cosa avviene nei container istanziati a partire da tali immagini?

Se più container condividono pezzi della stessa immagine, o addirittura tutta la stessa immagine, le modifiche operate da un container interferiscono con gli altri?

La risposta è no. Almeno non per i file relativi l’immagine.

Quando viene eseguito un container, viene creato per esso un nuovo layer accessibile in lettura e scrittura. Il container potrà accedere solo in lettura ai file dell’immagine evitando ogni tipo di conflitto.

Spesso però i container avranno bisogno di modificare alcuni file dell’immagine. Come possono farlo se ci accedono in sola lettura?

In realtà un container può sempre modificare i file dell’immagine da cui viene istanziato, ma non lo fa direttamente. Le modifiche riguardanti la sua istanza vengono persistite nel layer in lettura e scrittura creato nel momento in cui viene istanziato. 

Il modo il cui lo fa è Detto Copy-on-Write (CoW) ovvero copia quando devi scrivere.

Fino alla prima modifica di un file dell’immagine da parte del container, gli accessi avvenivano in sola lettura.

Per risparmiare risorse, in presenza di queste situazioni, Docker non copia i file nel layer in lettura e scrittura ma il container leggerà tali file direttamente dall’immagine.

Alla prima modifica di un file operata dal container, la nuova versione di tale file diverge rispetto a quella dell’immagine.

Solo a questo punto il file viene copiato dall’immagine al layer abilitato al read/write.


Prosegui su: Docker CLI – prima e dopo

Immagine: Viaggio foto creata da cookie_studio – it.freepik.com