Apprendimento di Docker, parte 6: lavorare con i dati

Nella parte odierna della traduzione di una serie di materiali su Docker, parleremo del lavoro con i dati. In particolare, sui volumi Docker. In questi materiali, abbiamo costantemente confrontato i meccanismi di programmazione Docker con varie analogie commestibili. Non devieremo da questa tradizione qui. Lascia che i dati in Docker siano spezie. Ci sono molte spezie nel mondo e Docker ha molti modi per lavorare con i dati.

Parte 1: Le basi
Parte 2: termini e concetti
Parte 3: file Docker
Parte 4: Ridurre le dimensioni delle immagini e velocizzarne l'assemblaggio
Parte 5: comandi
Parte 6: lavorare con i dati

Apprendimento di Docker, parte 6: lavorare con i dati

Si noti che questo materiale è stato preparato utilizzando il motore Docker versione 18.09.1 ​​e la versione API 1.39.

I dati in Docker possono essere archiviati temporaneamente o permanentemente. Cominciamo con i dati temporanei.

Conservazione temporanea dei dati

Esistono due modi per gestire i dati temporanei nei contenitori Docker.

Per impostazione predefinita, i file creati da un'applicazione in esecuzione in un contenitore vengono archiviati in un livello contenitore scrivibile. Affinché questo meccanismo funzioni, non è necessario configurare nulla di speciale. Risulta economico e allegro. L'applicazione deve semplicemente salvare i dati e continuare a fare le sue cose. Tuttavia, dopo che il contenitore cesserà di esistere, scompariranno anche i dati salvati in modo così semplice.

L'archiviazione di file temporanei in Docker è un'altra soluzione adatta ai casi in cui è necessario un livello di prestazioni più elevato rispetto a quello ottenibile utilizzando il meccanismo standard di archiviazione temporanea dei dati. Se non è necessario che i dati vengano archiviati più a lungo di quanto esista il contenitore, è possibile connettersi al contenitore tmpfs, un archivio di informazioni temporaneo che utilizza la RAM dell'host. Ciò velocizzerà l'esecuzione delle operazioni di scrittura e lettura dei dati.

Accade spesso che i dati debbano essere archiviati anche dopo che il contenitore ha cessato di esistere. Per fare questo, abbiamo bisogno di meccanismi di memorizzazione dei dati persistenti.

Archiviazione dati persistente

Esistono due modi per prolungare la durata dei dati rispetto alla durata del contenitore. Un modo è utilizzare la tecnologia di montaggio bind. Con questo approccio, puoi montare, ad esempio, una cartella reale nel contenitore. Anche i processi al di fuori di Docker saranno in grado di lavorare con i dati archiviati in tale cartella. Ecco come Guarda tecnologia tmpfs mount e bind mount.

Apprendimento di Docker, parte 6: lavorare con i dati
Montaggio tmpfs e bind mount

Gli svantaggi dell'utilizzo della tecnologia di montaggio bind sono che il suo utilizzo complica il backup dei dati, la migrazione dei dati, la condivisione dei dati tra diversi contenitori. È molto meglio utilizzare i volumi Docker per l'archiviazione permanente dei dati.

Docker dei volumi

Un volume è un file system che si trova sulla macchina host al di fuori dei contenitori. I volumi vengono creati e gestiti da Docker. Ecco le principali proprietà dei volumi Docker:

  • Sono un mezzo di memorizzazione permanente delle informazioni.
  • Sono indipendenti e separati dai contenitori.
  • Possono essere condivisi tra diversi contenitori.
  • Consentono di organizzare in modo efficiente la lettura e la scrittura dei dati.
  • I volumi possono essere posizionati sulle risorse di un provider cloud remoto.
  • Possono essere crittografati.
  • Possono ricevere nomi.
  • Il contenitore può predisporre il prepopolamento del volume con i dati.
  • Sono convenienti per i test.

Come puoi vedere, i volumi Docker hanno proprietà sorprendenti. Parliamo di come crearli.

Creazione di volumi

I volumi possono essere creati utilizzando Docker o richieste API.

Ecco un'istruzione nel Dockerfile che consente di creare un volume all'avvio di un contenitore.

VOLUME /my_volume

Quando si utilizza un'istruzione simile, Docker, dopo aver creato il contenitore, creerà un volume contenente i dati già esistenti nella posizione specificata. Tieni presente che se crei un volume utilizzando un Dockerfile, ciò non ti solleva dalla necessità di specificare il punto di montaggio del volume.

Puoi anche creare volumi in un Dockerfile utilizzando il formato JSON.

Inoltre, i volumi possono essere creati utilizzando gli strumenti della riga di comando mentre il contenitore è in esecuzione.

Lavorare con i volumi dalla riga di comando

▍Creazione volume

Puoi creare un volume autonomo con il seguente comando:

docker volume create —-name my_volume

▍ Scopri informazioni sui volumi

Per visualizzare un elenco di volumi Docker, utilizzare il seguente comando:

docker volume ls

Puoi esplorare un volume specifico come questo:

docker volume inspect my_volume

▍Eliminazione di un volume

Puoi eliminare un volume in questo modo:

docker volume rm my_volume

Per rimuovere tutti i volumi che non sono utilizzati dai contenitori, puoi ricorrere al seguente comando:

docker volume prune

Prima di eliminare i volumi, Docker ti chiederà di confermare questa operazione.

Se un volume è associato a un contenitore, tale volume non può essere eliminato fino a quando non viene eliminato il contenitore corrispondente. Allo stesso tempo, anche se il contenitore viene rimosso, Docker non sempre lo capisce. Se ciò accade, puoi utilizzare il seguente comando:

docker system prune

È progettato per ripulire le risorse Docker. Dopo aver eseguito questo comando, dovresti essere in grado di eliminare i volumi il cui stato era precedentemente errato.

I flag --mount e --volume

Per lavorare con i volumi, quando chiami il comando docker, dovrai spesso utilizzare i flag. Ad esempio, per creare un volume durante la creazione del contenitore, puoi utilizzare questo costrutto:

docker container run --mount source=my_volume, target=/container/path/for/volume my_image

Nei tempi antichi (fino al 2017), la bandiera era popolare --volume. Inizialmente, questo flag (può essere utilizzato anche in forma abbreviata, quindi sembra -v) è stato utilizzato per i contenitori autonomi e flag --mount - in un ambiente Docker Swarm. Tuttavia, a partire da Docker 17.06, flag --mount può essere utilizzato in qualsiasi scenario.

Va notato che quando si utilizza la bandiera --mount la quantità di dati aggiuntivi che devono essere specificati nel comando aumenta, ma, per diversi motivi, è meglio usare questo particolare flag, e non --volume. Bandiera --mount è l'unico meccanismo che consente di lavorare con i servizi o specificare le opzioni del driver del volume. Inoltre, questo flag è più facile da usare.

Negli esempi esistenti di comandi di manipolazione dei dati Docker, puoi vedere molti esempi dell'uso del flag -v. Quando provi ad adattare questi comandi per te stesso, tieni presente che i flag --mount и --volume utilizzare diversi formati di parametro. Cioè, non puoi semplicemente sostituire -v su --mount e ottenere una squadra di lavoro.

La principale differenza tra --mount и --volume è che quando si utilizza la bandiera --volume tutti i parametri sono raccolti insieme in un campo e durante l'utilizzo --mount i parametri sono separati.

Quando si lavora con --mount i parametri sono rappresentati come coppie chiave-valore, vale a dire, sembra key=value. Queste coppie sono separate da virgole. Ecco le opzioni comunemente utilizzate --mount:

  • type — tipo di montatura. Il valore per la chiave corrispondente può essere legare, volume o tmpfs. Stiamo parlando di volumi qui, cioè ci interessa il valore volume.
  • source - montare la sorgente. Per i volumi denominati, questo è il nome del volume. Per i volumi senza nome, questa chiave non è specificata. Può essere abbreviato in src.
  • destination - il percorso in cui è montato il file o la cartella nel contenitore. Questa chiave può essere abbreviata in dst o target.
  • readonly - monta il volume previsto solo per la lettura. L'utilizzo di questa chiave è facoltativo e non le viene assegnato alcun valore.

Ecco un esempio di utilizzo --mount con molte opzioni:

docker run --mount type=volume,source=volume_name,destination=/path/in/container,readonly my_image

Risultati di

Ecco alcuni comandi utili che puoi utilizzare quando lavori con i volumi Docker:

  • docker volume create
  • docker volume ls
  • docker volume inspect
  • docker volume rm
  • docker volume prune

Di seguito è riportato un elenco di opzioni comunemente utilizzate per --mount, applicabile in un comando della forma docker run --mount my_options my_image:

  • type=volume
  • source=volume_name
  • destination=/path/in/container
  • readonly

Ora che abbiamo completato questa serie di Docker, è il momento di dire qualche parola su dove potranno andare gli studenti di Docker. Qui ottimo buon articolo su Docker. Qui un libro su Docker (quando acquisti questo libro, prova a procurartene l'edizione più recente). Qui un altro libro per coloro che pensano che la pratica sia il modo migliore per imparare la tecnologia.

Cari lettori! Quali materiali Docker consiglieresti ai principianti per imparare?

Apprendimento di Docker, parte 6: lavorare con i dati

Fonte: habr.com

Aggiungi un commento