Come decidere tra un contenitore del volume finestra mobile e un volume finestra mobile?


24

Dopo aver letto i documenti, mi sono trovato un po 'confuso sul modo migliore di gestire dati produttivi su applicazioni / servizi.

Sembra che ci siano 3 opzioni:

  1. Basta mappare il volume sulla directory host (es. -vArgomento per docker run)
  2. Creare un'immagine del contenitore finestra mobile per i dati (ovvero contenitore separato e --volumes-from)
  3. Creazione di un volume docker (ad es. docker volume create)

Ora, sembra che la pratica accettata sia l'opzione n. 2, ma poi mi chiedo quale sia lo scopo del n. 3.

Soprattutto come gestire correttamente questi scenari docker volumeed è meglio usare un contenitore di volumi di dati o questo per ogni situazione?

  • Sono necessari i dati dell'applicazione in un volume separato e / o livello di archiviazione nel server
  • Backup
  • Ripristino dei dati


@MichaelHampton Mi sono reso conto che avrei dovuto riformulare la mia domanda
dukeofgaming

# 1 non è un'opzione seria per la produzione; praticamente non dovrebbe mai essere fatto se esiste un'alternativa.
Michael Hampton

2
@MichaelHampton Why ?, i dati potrebbero non essere agganciati ma il sistema operativo host è ancora gestito da un team di infrastrutture che monitora e
esegue il

@dukeofgaming Per non parlare del fatto che puoi eseguirlo btrfs scrubper trovare e correggere i file danneggiati. Non sono sicuro di come funzionano le cose dockerizzate, ma suppongo che non proteggano dal marciume dei dati, quindi ho sempre bisogno di un ripristino completo se succede qualcosa di brutto invece di ripristinare solo i singoli file. Un altro pensiero che aggiunge un altro livello di astrazione, quindi rallenta ancora di più la lettura e la scrittura dei file. In qualche modo non vedo i vantaggi di # 2 e # 3, ma non ho esperienza con la finestra mobile, quindi questo potrebbe cambiare.
inf3rno,

Risposte:


18

Penso che il n. 2 e il n. 3 siano praticamente la stessa cosa, la differenza principale è che non esiste un contenitore fermo con il n. 3 (è letteralmente, solo un volume con nome). Ad esempio, puoi creare un volume con nome e fare allo stesso modo quello che faresti con il numero 2 -v.

Crea un volume con nome:

$ docker volume create --name test

Montare e scrivere alcuni dati su quel volume da un contenitore:

$ docker run -v test:/opt/test alpine touch /opt/test/hello

È quindi possibile montare lo stesso testvolume in un altro contenitore e leggere i dati:

$ docker run -v test:/opt/test alpine ls -al /opt/test     
total 8
drwxr-xr-x    2 root     root          4096 Jan 23 22:28 .
drwxr-xr-x    3 root     root          4096 Jan 23 22:29 ..
-rw-r--r--    1 root     root             0 Jan 23 22:28 hello

Il vantaggio qui è che il volume non scompare accidentalmente se si rimuove il contenitore di soli dati. Ora lo gestisci con il docker volumecomando secondario.

$ d volume ls
DRIVER              VOLUME NAME
local               test

Inoltre apre le possibilità per i driver di volume lungo la strada in modo che tu possa essere in grado di fare volumi condivisi tra host (ad es. Volumi con nome su NFS). Esempi di questo potrebbero essere Flocker e Convoy . Per quanto riguarda in particolare lo spostamento o il backup dei dati, Convoy ha specifici comandi secondari per il backup dei dati e consente l'archiviazione su NFS o EBS esterna al proprio host.

Per questo motivo, penso che il modo più nuovo (Docker 1.9+) sia quello di utilizzare un volume denominato anziché un contenitore di soli dati.


Grazie, hai risposto alla maggior parte delle mie domande, ma il punto sulla gestione dei dati del container in un diverso livello di volume fisico è ancora senza risposta e questo è fondamentale ... supponiamo che si tratti di una soluzione di gestione repository git e che ho bisogno di quella parte del container data (che è un volume definito in un file docker) nella memoria di livello 0 situata in un volume host fisico diverso (ovvero un'altra partizione, disco fisico o altro)
dukeofgaming

Ho sorta di fatto con la menzione del driver di volume. In questo momento, per archiviare i dati al di fuori del driver di archiviazione locale fisico, è necessario utilizzarne uno che ha fatto esattamente quello che si sta cercando di fare. Dalla parte superiore della mia testa, c'è github.com/rancher/convoy e github.com/ClusterHQ/flocker . Convoy ha il supporto per NFS e GlusterFS al momento, il che sembra più vicino a quello che stai cercando. Modificherò la risposta per chiarire questo.
Andy Shinn,

L'uso del driver devicemapper sembra rispondere alla mia domanda, grazie! docs.docker.com/engine/userguide/storagedriver/…
dukeofgaming

the volume won't accidentally disappear if you remove the data-only container. Potresti elaborare? Grazie.
Stephane,

22

A partire da Docker 1.9, la creazione di Volumi con nome con l' API Volumi ( docker volume create --name mydata) è preferita rispetto a un contenitore di volumi di dati. A partire da febbraio 2016, la documentazione dei volumi Docker è tristemente obsoleta. Gli stessi utenti di Docker suggeriscono che i contenitori di volumi di dati " non sono più considerati uno schema raccomandato ", "i volumi con nome dovrebbero essere in grado di sostituire i volumi di soli dati nella maggior parte (se non tutti) i casi " e " nessuna ragione che posso vedere per usare contenitori solo dati . "

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.