In today's part of the translation series on Docker, we will discuss data management, specifically Docker volumes. Throughout these materials, we have continually compared Docker's mechanisms to various edible analogies. Let's not deviate from this tradition here. Data in Docker can be likened to spices. There are many types of spices in the world, just as there are numerous ways to handle data in Docker.
→
→
→
→
→
→
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 memorizzati temporaneamente o permanentemente. Cominciamo con i dati temporanei.
Memorizzazione temporanea dei dati
Nei contenitori Docker, è possibile gestire i dati temporanei in due modi.
Per impostazione predefinita, i file creati da un'applicazione in esecuzione all'interno di un contenitore vengono salvati nel livello del contenitore che supporta la scrittura. Non è necessario configurare nulla di speciale affinché questo meccanismo funzioni. È un approccio economico e pratico. L'applicazione deve semplicemente salvare i dati e continuare a fare ciò che deve. Tuttavia, una volta che il contenitore cessa di esistere, anche i dati salvati in questo modo scompariranno.
Per memorizzare file temporanei in Docker, è possibile utilizzare un'altra soluzione, adatta per i casi in cui è necessaria una maggiore elevata prestazione, rispetto a quella raggiungibile con il meccanismo standard di memorizzazione temporanea dei dati. Se non avete bisogno che i vostri dati vengano conservati più a lungo della vita del contenitore, potete collegare un tmpfs al contenitore: uno spazio di memorizzazione temporaneo che utilizza la memoria del host. Ciò consentirà di accelerare le operazioni di scrittura e lettura dei dati.
Spesso è necessario conservare i dati anche dopo la fine della vita del contenitore. A questo scopo, abbiamo bisogno di meccanismi di archiviazione permanente dei dati.
Archiviazione permanente dei dati
Esistono due modi per estendere la vita dei dati oltre quella del contenitore. Uno dei metodi è l'uso della tecnologia bind mount. Con questo approccio, è possibile montare nel contenitore una cartella esistente. I processi al di fuori di Docker potranno lavorare con i dati memorizzati in quella 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 sono che complica il backup dei dati, la migrazione e la condivisione dei dati tra contenitori. È molto meglio utilizzare volumi Docker per l'archiviazione permanente dei dati.
Volumi Docker
Un volume è un file system situato sulla macchina host, al di fuori dei contenitori. La creazione e la gestione dei volumi è gestita da Docker. Ecco le principali caratteristiche dei volumi Docker:
- Sono strumenti per la memorizzazione permanente delle informazioni.
- Sono autonomi e separati dai contenitori.
- Possono essere utilizzati congiuntamente da diversi contenitori.
- Permettono di organizzare letture e scritture dei dati in modo efficace.
- I volumi possono essere posizionati su risorse fornite da un provider cloud remoto.
- Possono essere crittografati.
- Possono essere denominati.
- Un contenitore può organizzare il riempimento anticipato di un volume con dati.
- Sono comodi per i test.
Come vedete, i volumi Docker hanno caratteristiche straordinarie. Parliamo di come crearli.
Creazione di volumi
I volumi possono essere creati tramite strumenti Docker o inviando richieste all'API.
Ecco l'istruzione in Dockerfile che permette di creare un volume al momento dell'avvio del contenitore.
VOLUME /my_volumeUtilizzando un'istruzione come questa in Docker, dopo la creazione del contenitore, verrà creato un volume che contiene i dati già presenti nella posizione specificata. Si noti che se si crea un volume utilizzando un Dockerfile, ciò non esonera dalla necessità di indicare il punto di montaggio del volume.
I volumi in Dockerfile possono essere creati anche utilizzando il formato JSON.
Inoltre, i volumi possono essere creati tramite la riga di comando mentre il container è in esecuzione.
Gestire i volumi dalla riga di comando
▍Creazione di un volume
Per creare un volume indipendente, puoi usare il seguente comando:
docker volume create --name my_volume▍Verifica delle informazioni sui volumi
Per visualizzare l'elenco dei volumi Docker, utilizza il seguente comando:
docker volume lsPer esplorare un volume specifico, utilizza il seguente comando:
docker volume inspect my_volume▍Rimozione di un volume
Per rimuovere un volume, utilizza il seguente comando:
docker volume rm my_volumePer rimuovere tutti i volumi non utilizzati dai container, puoi utilizzare il seguente comando:
docker volume prunePrima di rimuovere i volumi, Docker ti chiederà conferma per eseguire questa operazione.
Se un volume è associato a un container, quel volume non può essere rimosso fino a quando non viene eliminato il corrispondente container. Anche se il container è stato eliminato, Docker non sempre lo comprende. In tal caso, puoi utilizzare il seguente comando:
docker system pruneQuesto comando è progettato per liberare risorse Docker. Dopo aver eseguito questo comando, dovresti essere in grado di rimuovere i volumi il cui stato era stato precedentemente identificato in modo errato.
I flag --mount e --volume
Per lavorare con i volumi, quando si utilizza il comando docker, spesso sarà necessario utilizzare i flag. Ad esempio, per creare un volume durante la creazione di un contenitore, è possibile utilizzare la seguente sintassi:
docker container run --mount source=my_volume, target=/container/path/for/volume my_image Nei tempi passati (fino al 2017), era molto comune utilizzare il flag --volume. Inizialmente, questo flag (è possibile utilizzarlo anche in forma abbreviata, apparendo come -v) veniva usato 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.
È importante notare che l'uso del flag --mount aumenta il volume dei dati aggiuntivi che si devono specificare nel comando, ma per vari motivi, è meglio utilizzare proprio questo flag, piuttosto che --volume. Il flag --mount è l'unico meccanismo che consente di lavorare con i servizi o di specificare le opzioni del driver del volume. Inoltre, è più semplice lavorare con questo flag.
Negli esempi di comando esistenti, rivolti al lavoro con i dati in Docker, puoi incontrare numerosi esempi di utilizzo del flag -v. Mentre cerchi di adattare questi comandi per te, considera che i flag --mount e --volume utilizzano diversi formati di parametri. Questo significa che non si può semplicemente sostituire -v con --mount e ottenere un comando funzionante.
La principale differenza tra --mount e --volume sta nel fatto che quando si utilizza l'opzione --volume tutti i parametri vengono raccolti insieme, in un unico campo, mentre con --mount i parametri sono separati.
Quando lavorate con --mount i parametri sono presentati come coppie chiave-valore, ovvero sembrano key=value. Queste coppie sono separate da virgole. Ecco i parametri comunemente 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 è il nome del volume. Per i volumi non nominati, questa chiave non è specificata. Può essere semplificata insrc.destination— percorso, dove il file o la cartella viene montato nel contenitore. Questa chiave può essere semplificata indstotarget.readonly— monta un volume che è destinato . L'uso di questa chiave non è obbligatorio, non le viene assegnato alcun valore.
Ecco un esempio di utilizzo --mount con numerosi parametri:
docker run --mount type=volume,source=volume_name,destination=/path/in/container,readonly my_imageRisultati
Ecco alcuni comandi utili da utilizzare quando si lavora con i volumi Docker:
docker volume createdocker volume lsdocker volume inspectdocker volume rmdocker volume prune
Ecco un elenco di parametri frequentemente utilizzati 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, è il momento di dire qualche parola su dove chi studia Docker può proseguire. un grande articolo su Docker. un libro su Docker (quando comprate questo libro, cercate di ottenere la sua edizione più recente). un altro libro, che andrà bene a chi crede che la pratica sia il miglior modo per imparare le tecnologie.
Gentili lettori! Quali materiali su Docker consigliereste di studiare ai principianti?
Fonte: habr.com
