2014-06-22 24 views
15

Prendere un data unico contenitore Docker:Come funzionano i volumi del contenitore mobile anche quando non sono in esecuzione?

FROM stackbrew/busybox:latest 

RUN mkdir /data 
VOLUME /data 

Ora ho visto una grande quantità di loro che vengono eseguiti in questo modo:

docker run -name my-data data true

I true uscite di comando non appena viene eseguito e anche il contenitore. Ma sorprendentemente continua a servire il volume quando lo connetti con un altro container tramite --volumes-from my-data.

La mia domanda è: come funziona? In che modo un container bloccato consente ancora l'accesso nei suoi volumi?

risposta

35

I volumi nella finestra mobile non sono una cosa di primo livello. Sono "semplicemente" parte dei metadati del contenitore.

Quando hai VOLUME nel vostro dockerfile o avviare un contenitore con -v, Docker crea una directory in /var/lib/docker/volumes * con un ID casuale (questo è esattamente lo stesso processo come creazione di un'immagine con commit tranne che è vuoto) e aggiungere quell'ID casuale ai metadati del contenitore.

All'avvio del contenitore, Docker esegue il mount-bind della directory /var/lib/docker/volumes/ * nella posizione specificata per quel volume.

Quando si utilizza volumes-from, Docker cerca solo l'id del volume e la posizione da un altro contenitore, in esecuzione o meno e monta-bind la directory nel percorso impostato.

I volumi non sono collegati con il runtime, sono solo le directory che vengono montate.

* Con le versioni più recenti, Docker ora utilizza il driver vfs per lo stoccaggio e /var/lib/docker/volumes/ viene utilizzato solo per metadatas come la dimensione, creare il tempo, ecc I dati effettivi vengono memorizzati nella /var/lib/docker/vfs/dir/<volume id>

+0

Ottima risposta! Questo ha senso ora. Grazie :) – MHK

Problemi correlati