Docker
Volumi di dati e contenitori di dati
Ricerca…
Contenitori di soli dati
I contenitori di soli dati sono obsoleti e ora sono considerati un anti-modello!
Nei giorni precedenti, prima del sottocomando del volume
di Docker e prima che fosse possibile creare volumi con nome, Docker cancellava i volumi quando non vi erano più riferimenti a essi in alcun contenitore. I contenitori di soli dati sono obsoleti perché Docker ora offre la possibilità di creare volumi con nome, oltre a una maggiore utilità tramite il sottocomando dei vari docker volume
docker. I contenitori di soli dati sono ora considerati un anti-pattern per questo motivo.
Molte risorse sul web degli ultimi due anni menzionano l'utilizzo di un modello chiamato "contenitore solo dati", che è semplicemente un contenitore Docker che esiste solo per mantenere un riferimento a un volume di dati.
Ricorda che in questo contesto, un "volume di dati" è un volume Docker che non è montato dall'host. Per chiarire, un "volume di dati" è un volume che viene creato con la direttiva VOLUME
Dockerfile o utilizzando l'opzione -v
sulla riga di comando in un comando di docker run
, in particolare con il formato -v /path/on/container
. Pertanto un "contenitore di soli dati" è un contenitore il cui unico scopo è quello di avere un volume di dati collegato, che viene utilizzato --volumes-from
flag --volumes-from
in un comando di docker run
. Per esempio:
docker run -d --name "mysql-data" -v "/var/lib/mysql" alpine /bin/true
Quando viene eseguito il comando precedente, viene creato un "contenitore solo dati". È semplicemente un contenitore vuoto con un volume di dati collegato. È stato quindi possibile utilizzare questo volume in un altro contenitore in questo modo:
docker run -d --name="mysql" --volumes-from="mysql-data" mysql
Il contenitore mysql
ora ha lo stesso volume che è anche in mysql-data
.
Poiché Docker ora fornisce il sottocomando del volume
e i volumi con nome, questo modello è ora obsoleto e non consigliato.
Per iniziare con il sottocomando del volume
e i volumi con nome vedere Creazione di un volume denominato
Creazione di un volume di dati
docker run -d --name "mysql-1" -v "/var/lib/mysql" mysql
Questo comando crea un nuovo contenitore dall'immagine mysql
. Crea anche un nuovo volume di dati, che poi monta nel contenitore in /var/lib/mysql
. Questo volume aiuta tutti i dati al suo interno a persistere oltre la durata del contenitore. Vale a dire, quando un contenitore viene rimosso, vengono rimosse anche le sue modifiche al filesystem. Se un database stava memorizzando i dati nel contenitore e il contenitore è stato rimosso, anche tutti i dati vengono rimossi. I volumi rimarranno in una posizione particolare anche oltre il momento in cui viene rimosso il contenitore.
È possibile utilizzare lo stesso volume in più contenitori con l'opzione della riga di comando --volumes-from
:
docker run -d --name="mysql-2" --volumes-from="mysql-1" mysql
Il contenitore mysql-2
ora ha il volume di dati di mysql-1
ad esso collegato, usando anche il percorso /var/lib/mysql
.