I file (e altri dati) archiviati in un contenitore Docker non persistono se il contenitore viene eliminato. Per ovviare a questo problema, Docker volumi e legare le cavalcature può essere utilizzato. Questa guida illustra l'utilizzo dei volumi Docker come metodo per archiviare dati persistenti. Pensa ai volumi come a un disco rigido esterno; se il disco rigido interno viene cancellato, il disco rigido esterno conserva ancora i propri dati. I volumi sono archiviati sull'host e indipendenti da qualsiasi contenitore o immagine. Possono essere montati su contenitori diversi secondo necessità e, poiché i volumi sono separati dall'immagine, non aumentano le dimensioni dell'immagine.
Prima di iniziare
-
Se non l'hai già fatto, crea un account Linode e un'istanza di calcolo. Consulta le nostre guide Introduzione a Linode e Creazione di un'istanza di calcolo.
-
Segui la nostra guida alla configurazione e alla protezione di un'istanza di calcolo per aggiornare il tuo sistema. Potresti anche voler impostare il fuso orario, configurare il tuo nome host, creare un account utente limitato e rafforzare l'accesso SSH.
-
Installa Docker sul tuo sistema.
-
Questa guida presuppone che tu sia a tuo agio nell'usare la riga di comando di Linux. ConsultaUtilizzare il terminale.
-
Questa guida presuppone che tu abbia una conoscenza di base di Docker. Inoltre, dovresti aver già installato Docker sul tuo server e distribuito un'immagine Docker. Vedere Introduzione a Docker.
Creazione di un volume Docker
Per iniziare a comprendere i volumi Docker, avrai bisogno di un volume su cui lavorare.
-
Accedi al tuo Linode (o altro server Linux) tramite SSH o Lish.
-
Crea un volume immettendo il comando seguente, sostituendo volume_esempio con l'etichetta del tuo volume.
docker volume create example_volume
-
Verifica che il volume sia stato creato.
docker volume list
L'output dovrebbe essere simile a questo:
[[email protected] ~]$ docker volume list DRIVER VOLUME NAME local example_volume [[email protected] ~]$
Ispezione di un volume Docker
Se desideri visualizzare maggiori dettagli su un volume, puoi utilizzare il docker volume inspect
comando:
docker volume inspect example_volume
L'output dovrebbe essere simile al seguente:
[[email protected] ~]$ docker volume inspect example_volume
[
{
"CreatedAt": "2021-05-19T15:27:27Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/example_volume/_data",
"Name": "example_volume",
"Options": {},
"Scope": "local"
}
]
[[email protected] ~]$
Montaggio di un volume Docker su un container
Affinché i dati di un container persistano, è necessario che un volume Docker sia montato utilizzando il --mount flag
nella docker run
comando. Sostituisci [nome_volume] con il nome del tuo volume, [percorso] con il percorso assoluto in cui desideri montare il volume all'interno del contenitore e [docker_image] con il nome della tua immagine.
docker run --mount source=[volume_name],destination=[path] [docker_image]
Ad esempio, il comando seguente monta il volume denominato volume_esempio al percorso /example_volume
all'interno di un contenitore usando ubuntu
immagine.
docker run -it --name=example --mount source=example_volume,destination=/example_volume ubuntu
Questo comando esegue l'immagine, monta il volume e registra l'utente come root sull'immagine Ubuntu. Una volta entrato come root, puoi verificare che "example_volume" sia montato con solo ls
. L'output di tutto questo dovrebbe assomigliare a questo:
[[email protected] ~]$ docker run -it --name=example --mount source=example_volume,destination=/example_volume ubuntu
[email protected]:/# ls
bin dev example_volume lib lib64 media opt root sbin sys usr
boot etc home lib32 libx32 mnt proc run srv tmp var
[email protected]:/#
Copia e condivisione di file tra container
I volumi Docker consentono anche la condivisione tra contenitori.
-
Montare il volume secondo le istruzioni inMontaggio di un volume Docker su un container. Ecco l'esempio utilizzato in precedenza:
docker run -it --name=example --mount source=example_volume,destination=/example_volume ubuntu
-
Cambia la directory in
example_data
directory.cd example_data
-
Crea un file di prova nel volume inserendo il seguente
touch
comando.touch example_file.txt
-
Quindi esci dal contenitore.
exit
-
Ora esegui un'altra immagine Docker con lo stesso volume montato. Il
debian
l'immagine viene utilizzata nell'esempio seguente.docker run -it --name=example_2 --mount source=example_volume,destination=/example_volume debian
-
All'interno del nuovo contenitore (chiamato "esempio_2" se si utilizza un comando simile a quello sopra), vai alla directory del volume.
cd example_volume
-
Inserisci
ls
per vedere il file.ls
Montaggio di una directory dal tuo Linode a un container
Invece di creare un nuovo volume, puoi anche montare una directory dal tuo Linode (o altro sistema) in un contenitore Docker. Ciò si ottiene tramite i montaggi di binding ed è utile quando si desidera archiviare e accedere ai file di un container direttamente dal sistema. Rispetto ai volumi, i mount bind hanno funzionalità limitate.
-
Accedi al tuo Linode (o altro server Linux) tramite SSH o Lish.
-
Utilizza il comando seguente per eseguire Docker, sostituendo [local-directory] con il percorso assoluto della directory all'interno del tuo Linode che desideri montare (usa
$(pwd)
per montare la directory corrente). Quindi sostituisci [directory di montaggio] con il percorso assoluto sul tuo container in cui desideri accedere ai file locali e sostituire [image] con l'immagine Docker che desideri utilizzare.docker run --rm -it -v [local-directory]:[mount-directory] [image]
-
Si accede automaticamente al container. Passa alla tua directory di montaggio e visualizza i file.
ls
Dovresti vedere tutti i file che hai archiviato nella directory locale.
Ulteriori letture
C'è molto di più in Docker Volumes di quanto possiamo approfondire qui e il caso d'uso di tutti sarà diverso. Tuttavia, due ottimi posti per recensire di più su questo sono lo stesso sito di Docker's Docs:
-
Usa i volumi in Docker Docs
-
Risolvi gli errori di volume in Docker Docs
Maggiori informazioni
Si consiglia di consultare le seguenti risorse per ulteriori informazioni su questo argomento. Sebbene questi siano forniti nella speranza che possano essere utili, tieni presente che non possiamo garantire l'accuratezza o la tempestività dei materiali ospitati esternamente.
- Utilizza i volumi in Docker Docs
- Risolvi gli errori di volume in Docker Docs