Używam Dockera do wdrażania niektórych usług na serwerze CentOS 6.4 i próbuję wymyślić, jak prawidłowo tworzyć kopie zapasowe danych, które generują.
Na przykład jedna z usług to aplikacja internetowa, w której użytkownicy mogą przesyłać pliki. Dla tego kontenera mam /files
wolumin, który chcę wykonać kopię zapasową. Montowanie na hoście wygląda na to, że jest im trochę niezadowolenie, ponieważ takie montowanie nie jest w żaden sposób przenośne - jak powiedziano w tym poście na blogu i dokumentacji dokerów dla woluminów .
Wiem z tego samego posta na blogu, że nie potrzebuję montowania hosta, aby uzyskać dostęp do plików w woluminie, mogę użyć, docker inspect
aby dowiedzieć się, gdzie są pliki.
Ale oto mój problem: myślałem o utworzeniu kopii zapasowej tylko plików dokerów potrzebnych do zbudowania kontenerów i związanych z nimi woluminów. W prawdopodobnym przypadku, gdy muszę przywrócić wszystko z kopii zapasowej, jak mam się dowiedzieć, który katalog woluminów odpowiada danemu kontenerowi? Odbudowanie kontenera powoduje zmianę identyfikatora i ścieżki woluminu, więc potrzebuję dodatkowych informacji, aby je dopasować. Co jeszcze, jeśli w ogóle, powinienem wykonać kopię zapasową, aby móc faktycznie wszystko przywrócić?
docker inspect
y zbudowany w templating tak:VOLUME=$( docker inspect -f '{{index .Volumes "/path/in/container"}}' "${NAME}-data" )
. Prawdopodobnie dobrze jest też przypomnieć ludziom, aby nie spodziewali się, że utworzy kopię zapasową plików w ten sposób, gdy są aktywnie w użyciu (np. Bazy danych).Volumes
zniknęły, aMounts
zamiast tego mają inną strukturę. Musimy trochę popracować,range
aby znaleźć interesujący nas punkt montowaniaVOLUME=$(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/path/in/container" }}{{ .Source }}{{ end }}{{ end }}' "${NAME}-data")
W nowszym Dockerze (testowanym w
1.9.1, build 9894698
) możesz użyćcp
polecenia .Oto przykład, jak skopiować katalog z kontenera na host:
Oto przykład, jak skopiować katalog z kontenera do
tar
pliku:Ostatni, ale nie mniej ważny przykład, jak skopiować katalog z kontenera do
tar.gz
pliku:źródło
docker cp
wysyła wszystko przez sieć. Jest to coś, czego chcesz uniknąć, zwłaszcza jeśli wolumin Docker jest już woluminem btrfs.docker cp
byłby miły.