2016-07-15 111 views
11

Ho diversi contenitori che richiedono lo stato: imposterò la scala solo su 1, ma mi piacerebbe che non importa quale host che iniziano sul volume venga condiviso.Docker 1.12 modalità dello sciame e volumi del contenitore

Suppongo di dover utilizzare un attacco di rete per ottenere questo risultato (che va bene), ma come posso configurare il volume utilizzando lo sciame docker 1.12?

So che posso utilizzare il volume del docker creato, e penso che potrebbe essere necessario specificare un driver, ma sto faticando a trovare un singolo esempio di questo!

risposta

12

docker service create --mount ... fornisce due opzioni per i dati permanenti; bind mounts e volumi con nome. I bind mounts persistono sull'host creato, quindi non funzionerà per te poiché non è condivisibile.

I volumi denominati possono essere creati utilizzando docker volume create o creati implicitamente come parte di docker service create utilizzando l'opzione --mount, ad es.

$ docker volume create -d --driver cio --name cassandradb --opt profile=CASSANDRA 
$ docker service create \ 
--mount source=cassandradb,target=/var/lib/cassandra,volume-driver=cio \ 
--replicas 1 \ 
--name cassandra \ 
cassandra 

docker service create default volumi denominati in modo che il tipo non è specificato nell'esempio. Il driver del volume supporta i volumi portatili. Altri driver di volume come RexRay o Flocker supportano anche volumi portatili. Ecco un articolo con esempi su RexRay.

Esistono anche opzioni --mount per le etichette del volume e le opzioni del volume. La documentazione ufficiale non è ancora disponibile sul sito Docker. Tuttavia è possibile raccogliere maggiori informazioni su bind mounts e volumi denominati here.

8

Non sono sicuro che la sintassi sia stata finalizzata su questo come mostra github pull request 24334, ma l'opzione cli che stai cercando è docker service --mount .... Quando si utilizza qualcosa di simile, si crea una situazione in cui è necessario assicurarsi che i dati siano disponibili per il montaggio, quindi si sta esaminando driver come nfs o gluster. Altrimenti se il contenitore deve spostarsi e hai montato i dati direttamente dall'host, verrebbe riavviato senza il mount necessario.


Edit: la corrente --mount sintassi è:

docker service create --name nginx \ 
    --mount type=bind,source=`pwd`/static-site,target=/usr/share/nginx/html \ 
    -p 80:80 nginx 

per Host/mounts bind o

docker service create --name nginx \ 
    --mount type=volume,source=web,target=/usr/share/nginx/html \ 
    -p 80:80 nginx 

per un volume di nome di montaggio. Ho anche pubblicato uno blog post sull'argomento perché sento molto spesso la stessa domanda.

+0

Sto utilizzando rc4 e ho montato una condivisione di rete su/mnt/docker/jackett. Questo dovrebbe funzionare? 'servizio docker crea --mount bind, src =/mnt/docker/jackett, dst =/config/.config -p 9117: 9117 --name files_jackett dreamcat4/jackett'. L'errore che ottengo è per --mount: il campo 'bind' non valido deve essere una coppia chiave = valore. –

+3

Sembra che la sintassi dovrebbe essere: 'servizio docker crea --mount type = bind, source =/mnt/docker/jackett, target =/config/.config -p 9117: 9117 --name files_jackett dreamcat4/jackettclear'! Grazie –