Nell'odierna parte della traduzione della serie di materiali su Docker parleremo della gestione dei dati. In particolare, dei volumi Docker. In questi materiali abbiamo costantemente confrontato i meccanismi software di Docker con diverse analogie culinarie. Non ci allontaneremo da questa tradizione neanche qui. I dati in Docker possono essere considerati come spezie. Nel mondo esistono molte varietà di spezie, e in Docker molte modalità di gestione dei dati.
→
→
→
→
→
→
Si prega di notare che questo materiale è stato preparato utilizzando il motore Docker versione 18.09.1 e l'API versione .
I dati in Docker possono essere conservati temporaneamente o permanentemente. Iniziamo con i dati temporanei.
Conservazione temporanea dei dati
Nelle container Docker, esistono due modalità per gestire i dati temporanei.
Per impostazione predefinita, i file creati dall'applicazione in esecuzione nel container vengono salvati nel layer del container che supporta la scrittura. Per far funzionare questo meccanismo non è necessario alcun settaggio speciale. Funziona in modo semplice ed efficace. All'applicazione basta salvare i dati e continuare con il proprio lavoro. Tuttavia, dopo che il container cessa di esistere, anche i dati conservati in questo modo scompariranno.
Per la conservazione di file temporanei in Docker, è possibile utilizzare un'altra soluzione, adatta a situazioni in cui è richiesto un livello di prestazioni più elevato rispetto a quello ottenibile con il meccanismo standard di conservazione temporanea dei dati. Se non è necessario che i dati vengano conservati più a lungo della durata del container, si può connettere al container un tmpfs — un'area di memorizzazione temporanea che utilizza la memoria RAM dell'host. Questo accelererà le operazioni di scrittura e lettura dei dati.
Spesso è necessario conservare i dati anche dopo la cessazione dell'esistenza del container. A questo scopo, ci servono meccanismi di conservazione permanente dei dati.
Archiviazione permanente dei dati
Esistono due modi per prolungare la vita dei dati oltre la durata del contenitore. Uno dei metodi consiste nell'utilizzare la tecnologia del bind mount. Con questo approccio, è possibile montare, ad esempio, una cartella esistente. I processi che si trovano al di fuori di Docker possono interagire con i dati memorizzati in tale cartella. Ecco come il montaggio di tmpfs e la tecnologia bind mount.

Montaggio di tmpfs e bind mount
Gli svantaggi dell'uso della tecnologia bind mount risiedono nel fatto che il suo utilizzo rende più complesso il backup dei dati, la migrazione dei dati e la condivisione dei dati tra diversi contenitori. È molto meglio utilizzare i volumi Docker per la permanenza dei dati.
Volumi Docker
Un volume è un file system che si trova sulla macchina host al di fuori dei contenitori. Docker si occupa della creazione e gestione dei volumi. Ecco le principali caratteristiche dei volumi Docker:
- Rappresentano mezzi per la conservazione permanente delle informazioni.
- Sono autonomi e separati dai contenitori.
- Possono essere utilizzati in modo condiviso da contenitori diversi.
- Permettono di organizzare una lettura e scrittura dei dati più efficiente.
- I volumi possono essere ospitati su risorse di un provider cloud remoto.
- Possono essere crittografati.
- Possono essere denominati.
- Un contenitore può organizzare un riempimento anticipato del volume con dati.
- Sono comodi per il testing.
Come potete vedere, i volumi Docker hanno proprietà eccezionali. Parliamo adesso di come crearli.
Creazione di volumi
I volumi possono essere creati usando gli strumenti di Docker o tramite richieste API.
Ecco un'istruzione nel Dockerfile che consente di creare un volume al momento dell'avvio del contenitore.
VOLUME /my_volumeUtilizzando un'istruzione come questa, Docker, dopo la creazione del contenitore, creerà un volume contenente i dati già presenti nella posizione specificata. Fate attenzione che se create un volume utilizzando un Dockerfile, questo non vi esenta dalla necessità di specificare il punto di montaggio del volume.
È possibile creare volumi in un Dockerfile anche utilizzando il formato JSON.
Inoltre, i volumi possono essere creati tramite la linea di comando durante l'esecuzione del contenitore.
Lavorare con i volumi dalla linea di comando
▍Creazione di un volume
È possibile creare un volume autonomo con il seguente comando:
docker volume create --name my_volume▍Scoprire informazioni sui volumi
Per visualizzare l'elenco dei volumi Docker, utilizza il seguente comando:
docker volume lsPuoi esaminare un volume specifico in questo modo:
docker volume inspect my_volume▍Rimozione del volume
Per rimuovere un volume, puoi fare così:
docker volume rm my_volumePer rimuovere tutti i volumi che non sono utilizzati dai contenitori, puoi utilizzare questo comando:
docker volume prunePrima di rimuovere i volumi, Docker ti chiederà di confermare questa operazione.
Se un volume è associato a un contenitore, quel volume non può essere rimosso finché il relativo contenitore non è stato eliminato. Anche se il contenitore è stato eliminato, Docker non sempre lo comprende. Se succede, puoi utilizzare il seguente comando:
docker system pruneÈ progettato per pulire le risorse Docker. Dopo aver eseguito questo comando, dovresti essere in grado di rimuovere i volumi il cui stato era stato precedentemente definito in modo errato.
I flag —mount e —volume
Per lavorare con i volumi, dovrai spesso utilizzare dei flag quando esegui il comando docker. Ad esempio, per creare un volume durante la creazione di un contenitore, puoi utilizzare questa sintassi:
docker container run --mount source=my_volume, target=/container/path/for/volume my_image In passato (prima del 2017), il flag --volumeera molto popolare. Originariamente, questo flag (puoi usarlo anche nella forma abbreviata, che è -v) veniva utilizzato per contenitori autonomi, mentre il flag --mount era utilizzato nell'ambiente Docker Swarm. Tuttavia, a partire da Docker 17.06, il flag --mount può essere utilizzato in qualsiasi scenario.
Va notato che utilizzando il flag --mount aumenta il volume dei dati aggiuntivi che devi specificare nel comando, ma, per vari motivi, è meglio utilizzare proprio questo flag invece di --volume. L'opzione --mount è l'unico meccanismo che consente di lavorare con i servizi o di specificare i parametri del driver del volume. Inoltre, è più semplice lavorare con questo flag.
Negli esempi esistenti di comandi volti a lavorare con i dati in Docker, puoi incontrare numerosi esempi di utilizzo del flag -v. Cercando di adattare questi comandi per il tuo uso, devi tenere presente che i flag --mount e --volume utilizzano diversi formati di parametri. Quindi, non puoi semplicemente sostituire -v in --mount e ottenere un comando funzionante.
La principale differenza tra --mount e --volume sta nel fatto che quando utilizzi il flag --volume tutti i parametri vengono raccolti insieme, in un unico campo, mentre utilizzando --mount i parametri sono separati.
Lavorando con --mount i parametri sono rappresentati come coppie chiave-valore, ovvero appare come chiave=valore. Queste coppie sono separate da virgole. Ecco i parametri frequentemente usati --mount:
type— tipo di montaggio. Il valore per la chiave corrispondente può essere , o . Qui stiamo parlando di volumi, quindi ci interessa il valorevolume.source— origine del montaggio. Per i volumi nominati, questo è il nome del volume. Per i volumi non nominati, questa chiave non viene specificata. Può essere abbreviata asrc.destination— percorso al quale file o cartella vengono montati nel contenitore. Questa chiave può essere abbreviata adstotarget.readonly— monta un volume che è destinato . L'uso di questa chiave non è obbligatorio, non gli viene assegnato valore.
Ecco un esempio di utilizzo --mount con molti parametri:
docker run --mount type=volume,source=volume_name,destination=\/path\/in\/container,readonly my_imageConclusioni
Ecco alcuni comandi utili che puoi utilizzare quando lavori con i volumi di Docker:
docker volume createdocker volume lsdocker volume inspectdocker volume rmdocker volume prune
Ecco un elenco di parametri frequentemente usati per --mount, applicabili nel comando del tipo docker run --mount my_options my_image:
type=volumesource=volume_namedestination=\/path\/in\/containerreadonly
Ora che abbiamo completato questa serie di materiali su Docker, è tempo di dire alcune parole su quali direzioni possono prendere coloro che studiano Docker. un grande articolo su Docker. un libro su Docker (quando acquisti questo libro, cerca di ottenere l'edizione più recente). un altro libro che sarà adatto a chi crede che la pratica sia il modo migliore per apprendere le tecnologie.
Gentili lettori! Quali materiali su Docker consiglieresti di studiare ai principianti?
Fonte: habr.com
