Docker 1.9.0 e versioni successive
Usa API volume
docker volume create --name hello
docker run -d -v hello:/container/path/for/volume container_image my_command
Ciò significa che il modello contenitore solo dati deve essere abbandonato a favore dei nuovi volumi.
In realtà l'API del volume è solo un modo migliore per ottenere quello che era il modello del contenitore di dati.
Se si crea un contenitore con una -v volume_name:/container/fs/path
finestra mobile, verrà automaticamente creato un volume con nome che può:
- Essere elencati attraverso il
docker volume ls
- Essere identificato attraverso il
docker volume inspect volume_name
- Backup come una directory normale
- Effettuato il backup come prima tramite una
--volumes-from
connessione
La nuova API del volume aggiunge un utile comando che consente di identificare i volumi sospesi:
docker volume ls -f dangling=true
E poi rimuovilo con il suo nome:
docker volume rm <volume name>
Come sottolinea @mpugach nei commenti, puoi sbarazzarti di tutti i volumi sospesi con una bella copertina:
docker volume rm $(docker volume ls -f dangling=true -q)
# Or using 1.13.x
docker volume prune
Docker 1.8.xo inferiore
L'approccio che sembra funzionare meglio per la produzione consiste nell'utilizzare un contenitore di soli dati .
Il contenitore di soli dati viene eseguito su un'immagine barebone e in realtà non fa altro che esporre un volume di dati.
Quindi è possibile eseguire qualsiasi altro contenitore per avere accesso ai volumi del contenitore dati:
docker run --volumes-from data-container some-other-container command-to-execute
- Qui puoi avere una buona immagine di come organizzare i diversi contenitori.
- Qui c'è una buona visione di come funzionano i volumi.
In questo post del blog c'è una buona descrizione del cosiddetto contenitore come modello di volume che chiarisce il punto principale di avere solo contenitori di dati .
La documentazione Docker ha ora la descrizione DEFINITIVA del contenitore come modello volume / i .
Di seguito è la procedura di backup / ripristino per Docker 1.8.xe inferiore.
BACKUP:
sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
- --rm: rimuove il contenitore quando esce
- --volumes-from DATA: allega ai volumi condivisi dal contenitore DATA
- -v $ (pwd): / backup: bind monta la directory corrente nel contenitore; per scrivere il file tar in
- busybox: una piccola immagine più semplice - buona per una manutenzione rapida
- tar cvf /backup/backup.tar / data: crea un file tar non compresso di tutti i file nella directory / data
RISTABILIRE:
# Create a new data container
$ sudo docker run -v /data -name DATA2 busybox true
# untar the backup files into the new container᾿s data volume
$ sudo docker run --rm --volumes-from DATA2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
data/
data/sven.txt
# Compare to the original container
$ sudo docker run --rm --volumes-from DATA -v `pwd`:/backup busybox ls /data
sven.txt
Ecco un bell'articolo dell'eccellente Brian Goff che spiega perché è bene usare la stessa immagine per un contenitore e un contenitore di dati.