Docker 1.9.0 i nowsze wersje
Użyj interfejsu API woluminu
docker volume create --name hello
docker run -d -v hello:/container/path/for/volume container_image my_command
Oznacza to, że wzorzec kontenera zawierającego tylko dane musi zostać porzucony na rzecz nowych woluminów.
W rzeczywistości interfejs API woluminu jest tylko lepszym sposobem na osiągnięcie wzorca kontenera danych.
Jeśli utworzysz kontener za pomocą -v volume_name:/container/fs/path
Dockera, automatycznie utworzy się nazwany wolumin, który może:
- Bądź na liście poprzez
docker volume ls
- Być zidentyfikowanym poprzez
docker volume inspect volume_name
- Utworzono kopię zapasową jako normalny katalog
- Utworzono kopię zapasową jak poprzednio przez
--volumes-from
połączenie
Nowy interfejs API woluminu dodaje przydatne polecenie, które pozwala zidentyfikować wiszące woluminy:
docker volume ls -f dangling=true
A następnie usuń go poprzez jego nazwę:
docker volume rm <volume name>
Jak podkreśla @mpugach w komentarzach, możesz pozbyć się wszystkich wiszących woluminów za pomocą ładnego jednowierszowego:
docker volume rm $(docker volume ls -f dangling=true -q)
# Or using 1.13.x
docker volume prune
Docker 1.8.xi niższe
Podejście, które wydaje się działać najlepiej w przypadku produkcji, polega na użyciu kontenera zawierającego tylko dane .
Kontener tylko danych jest uruchamiany na obrazie barebone i właściwie nie robi nic poza ujawnieniem woluminu danych.
Następnie możesz uruchomić dowolny inny kontener, aby uzyskać dostęp do woluminów kontenera danych:
docker run --volumes-from data-container some-other-container command-to-execute
- Tutaj możesz uzyskać dobry obraz rozmieszczenia różnych pojemników.
- Tutaj jest dobry wgląd w działanie woluminów.
W tym poście na blogu znajduje się dobry opis tak zwanego kontenera jako wzorca objętości, który wyjaśnia główny punkt posiadania kontenerów zawierających wyłącznie dane .
Dokumentacja dokera ma teraz DEFINICJALNY opis kontenera jako wzorzec wolumenu / s .
Poniżej znajduje się procedura tworzenia kopii zapasowych / przywracania dla Docker 1.8.xi niższych.
UTWORZYĆ KOPIĘ ZAPASOWĄ:
sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
- --rm: wyjmij pojemnik po wyjściu
- --volumes-from DATA: dołącz do woluminów udostępnianych przez kontener DATA
- -v $ (pwd): / backup: bind podłącz bieżący katalog do kontenera; zapisać plik tar do
- busybox: mały, prostszy obraz - dobry do szybkiej konserwacji
- tar cvf /backup/backup.tar / data: tworzy nieskompresowany plik tar wszystkich plików w katalogu / data
PRZYWRACAĆ:
# 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
Oto fajny artykuł doskonałego Briana Goffa wyjaśniający, dlaczego warto używać tego samego obrazu dla kontenera i kontenera danych.