2015-12-18 17 views
20

possiamo avere un volume di dati in finestra mobile:finestra mobile vs directory host montata

$ docker run -v /path/to/data/in/container --name test_container debian 
$ docker inspect test_container 
... 
Mounts": [ 
    { 
     "Name": "fac362...80535", 
     "Source": "/var/lib/docker/volumes/fac362...80535/_data", 
     "Destination": "/path/to/data/in/container", 
     "Driver": "local", 
     "Mode": "", 
     "RW": true 
    } 
] 
... 

Ma se la vita di volume dati in /var/lib/docker/volumes/fac362...80535/_data, c'è da diverso dall'avere i dati in una cartella montato utilizzando -v /path/to/data/in/container:/home/user/a_good_place_to_have_data?

risposta

18

è diverso dall'avere i dati in una cartella montata utilizzando -v/percorso/a/dati/in/contenitore:/home/utente/a_buon_caso_a_have_data?

E 'perché, come indicato nel "Mount a host directory as a data volume"

La directory host è, per sua natura, host-dipendente. Per questo motivo, non è possibile montare una directory host da Dockerfile perché le immagini create devono essere portatili. Una directory host non sarebbe disponibile su tutti i potenziali host.

Se si dispone di dati persistenti da condividere tra contenitori o da contenitori non persistenti, è preferibile creare un contenitore del volume dati con nome, quindi montare i dati da esso.

È possibile combinare i due approcci:

docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata 

Qui abbiamo lanciato un nuovo contenitore e montato il volume dal contenitore dbdata.
Abbiamo quindi montato una directory host locale come /backup.
Infine, è stato inviato un comando che utilizza tar per eseguire il backup dei contenuti del volume dbdata in un file backup.tar all'interno della directory /backup. Una volta completato il comando e interrotto il contenitore, verrà lasciato un backup del nostro volume dbdata.

+0

Può chiarire che cosa significa la documentazione Docker da che le directory ospitanti sono * host-dipendente *? Le autorizzazioni per i file sono intese perché in alcuni casi è un problema da replicare su un altro host quando si sposta un contenitore più la directory montata su un altro host? Inoltre, qual è la differenza tra i volumi denominati e le directory montate? Capisco che soprattutto la condivisione di dati persistenti tra più contenitori sia un caso d'uso per contenitori di volumi di dati. Ma nel caso di dati persistenti rilevanti solo per un singolo contenitore sono un po 'perso :-). – PermaFrost

+1

@PermaFrost dipendente dall'host significa che non è possibile scrivere un Dockerfile con un percorso del volume dall'host, poiché il Dockerfile potrebbe essere creato su qualsiasi host, ciascuno con le proprie caratteristiche: un percorso valido su un host potrebbe non essere disponibile su un altro. Per questo motivo il montaggio di una cartella host è un'operazione * runtime * (funzione docker), non una fase di compilazione (build docker) – VonC

+2

@PermaFrost un volume denominato è indipendente dall'host e persistente. Anche per un solo contenitore, ciò significa che posso esportare e ripristinare un volume denominato su qualsiasi host. Vedi https://madcoda.com/2016/03/docker-named-volume-explained/ – VonC

1

La differenza tra directory host e un volume di dati è in quella che gestisce Docker quest'ultimo ponendolo nella directory $DOCKER-DATA-DIR/volumes e associare un riferimento ad esso (nomi o ID generati casualmente). Questo è un po 'di convenienza.

Entrambe le directory host e i volumi di dati sono directory sull'host. Entrambi sono dipendenti dall'ospite. Non è possibile fare riferimento a nessuno di essi in un Dockerfile; la direttiva VOLUME crea un nuovo volume senza nome (con ID generato casualmente) ogni volta che si avvia un nuovo contenitore e non è possibile fare riferimento a un volume esistente.

*$DOCKER-DATA-DIR è /var/lib/docker qui a meno che non siano state modificate le impostazioni predefinite.

3

Anche se quando li si utilizza si sente lo stesso, con l'unica modifica della posizione della directory, c'è un altro.

Volumi vs bind

  • Con Bind monte, un file o una directory sulla macchina ospite è montato in un contenitore.Il file o la directory sono referenziati dal suo percorso completo o relativo sul computer host.
  • Con Volume, viene creata una nuova directory nella directory di memorizzazione di Docker sul computer host e Docker gestisce il contenuto di tale directory.

Volumi vantaggi rispetto ai supporti bind:

  • I volumi sono più facili da eseguire il backup o la migrazione di supporti bind.
  • È possibile gestire i volumi usando Docker comandi CLI o l'API Docker.
  • I volumi funzionano su entrambi i contenitori Linux e Windows.
  • I volumi possono essere condivisi in modo più sicuro tra più contenitori.
  • I driver di volume consentono di archiviare volumi su host o provider di cloud remoti, crittografare il contenuto dei volumi o aggiungere altre funzionalità.
  • i contenuti di un nuovo volume possono essere pre-popolati da un contenitore.

Volumi

Creato e gestito da Docker. È possibile creare un volume esplicitamente utilizzando il comando di creazione del volume della finestra mobile o Docker può creare un volume durante la creazione del contenitore o del servizio.

Quando si crea un volume, viene memorizzato all'interno di una directory sul Docker dell'host . Quando si monta il volume in un contenitore, questa directory viene installata nel contenitore. Questo è simile al modo che legano supporti funzionano, tranne che i volumi sono gestiti da Docker e sono isolati dalla funzionalità di base dell'host macchina.

Un determinato volume può essere montato in più contenitori contemporaneamente. Quando nessun contenitore esecuzione utilizza un volume, il volume è ancora disposizione Docker e non viene rimosso automaticamente. È possibile rimuovere i volumi non utilizzati utilizzando la potatura del volume della finestra mobile.

Quando si monta un volume, può essere nominato o anonimo. I volumi anonimi non hanno un nome esplicito quando vengono montati per la prima volta in un contenitore, quindi Docker assegna loro un nome casuale che è garantito come univoco all'interno di un determinato host Docker. Oltre al nome, i volumi con nome e anonimo si comportano allo stesso modo.

I volumi supportano anche l'uso di driver di volume, che consentono di memorizzare i dati su host remoti o provider di servizi cloud, tra le altre possibilità.

enter image description here

Bind monta

Disponibile fin dai primi giorni di Docker. I supporti di rilegatura hanno una funzionalità limitata a rispetto ai volumi. Quando si utilizza un attacco bind, un file o una directory sul computer host viene montato in un contenitore. Il file o directory fa riferimento al suo percorso completo sul computer host. Il file o la directory non è necessario che esistano già sull'host Docker. Viene creato su richiesta se non esiste ancora. I mount bind sono molto performanti , ma si basano sul filesystem della macchina host con una specifica struttura di directory disponibile. Se si stanno sviluppando nuove applicazioni Docker , prendere in considerazione l'utilizzo di volumi denominati. Non è possibile utilizzare i comandi CLI di Docker per gestire direttamente i rilegamenti bind.

enter image description here

C'è anche tmpfs mounts.
tmpfs monta

A tmpfs montaggio non vengono mantenuti sul disco, sia sull'host finestra mobile o all'interno di un contenitore. Può essere utilizzato da un contenitore durante la vita del contenitore, per memorizzare informazioni non persistenti o sensibili . Ad esempio, internamente, i servizi swarm usano tmpfs monta per montare i segreti nei contenitori di un servizio.
enter image description here

Riferimento:
https://docs.docker.com/storage/

Problemi correlati