Jak mogę wykonać kopię zapasową kontenera Docker z jego woluminami danych?


152

Używałem tego tutum / wordpress z obrazem Dockera, aby zademonstrować witrynę internetową Wordpress. Niedawno dowiedziałem się, że obraz wykorzystuje woluminy dla danych MySQL.

Więc problem jest taki: jeśli chcę wykonać kopię zapasową i przywrócić kontener, mogę spróbować zatwierdzić obraz, a następnie usunąć kontener i utworzyć nowy kontener z zatwierdzonego obrazu. Ale jeśli to zrobię, wolumin zostanie usunięty, a wszystkie moje dane znikną.

Musi istnieć jakiś prosty sposób na wykonanie kopii zapasowej mojego kontenera i jego danych o woluminie, ale nie mogę go nigdzie znaleźć.


Sprawdź ten skrypt, który napisałem, który tworzy kopie zapasowe absolutnie wszystkiego w projekcie docker, w tym woluminów nazwanych i nienazwanych, obrazów, konfiguracji, dzienników, głównego systemu plików kontenera, baz danych i nie tylko: docker-compose-backup.sh .
Nick Sweeting

Odpowiedzi:


141

jeśli chcę przywrócić kontener, mogę spróbować zatwierdzić obraz, a następnie usunąć kontener i utworzyć nowy kontener z zatwierdzonego obrazu. Ale jeśli to zrobię, wolumin zostanie usunięty, a wszystkie moje dane znikną

Jak wyjaśnia podręcznik użytkownika platformy Docker, woluminy danych mają na celu utrwalanie danych poza systemem plików kontenera. Ułatwia to również udostępnianie danych między wieloma kontenerami.

Podczas gdy Docker nigdy nie usunie danych w woluminach (chyba że usuniesz skojarzony kontener z docker rm -v), woluminy, do których nie odwołuje się żaden kontener docker, nazywane są woluminami wiszącymi . Te wiszące woluminy są trudne do pozbycia się i trudno do nich dotrzeć.

Oznacza to, że gdy tylko ostatni kontener używający woluminu zostanie usunięty, wolumen danych zwisa, a jego zawartość jest trudna do uzyskania.

Aby zapobiec zawieszaniu się tych woluminów, sztuczka polega na utworzeniu dodatkowego kontenera dockerowego przy użyciu woluminu danych, który chcesz pozostać; tak, że zawsze będzie przynajmniej ten kontener docker odwołujący się do woluminu. W ten sposób możesz usunąć kontener Dockera z uruchomioną aplikacją wordpress bez utraty łatwości dostępu do zawartości woluminu danych.

Takie kontenery nazywane są kontenerami danych .

Musi istnieć jakiś prosty sposób na wykonanie kopii zapasowej mojego kontenera i danych wolumenu, ale nie mogę ich nigdzie znaleźć.

zapasowe obrazy dockera

Aby utworzyć kopię zapasową obrazów dockera, użyj polecenia docker save, które utworzy archiwum tar, którego można później użyć do utworzenia nowego obrazu dockera za pomocą polecenia docker load .

zapasowe kontenery docker

Możesz wykonać kopię zapasową kontenera Dockera na różne sposoby

  • popełniając nowe Döcker obraz na podstawie stanu obecnego pojemnika doker pomocą docker popełnić polecenia
  • eksportując system plików kontenera docker jako archiwum tar za pomocą polecenia docker export . Możesz później utworzyć nowy obraz dockera z tego archiwum tar za pomocą polecenia docker import .

Należy pamiętać, że te polecenia będą tworzyć kopie zapasowe tylko warstwowego systemu plików kontenera Dockera. Nie obejmuje to ilości danych .

zapasowe woluminy danych dockera

Aby wykonać kopię zapasową woluminu danych, możesz uruchomić nowy kontener, używając woluminu, który chcesz utworzyć, i wykonać polecenie tar, aby utworzyć archiwum zawartości woluminu, jak opisano w podręczniku użytkownika platformy Docker .

W Twoim przypadku wolumen danych jest używany do przechowywania danych dla serwera MySQL. Więc jeśli chcesz wyeksportować archiwum tar dla tego woluminu, musisz najpierw zatrzymać serwer MySQL. Aby to zrobić, musisz zatrzymać kontener wordpress.

wykonaj kopię zapasową danych MySQL

Innym sposobem jest zdalne połączenie się z serwerem MySQL w celu utworzenia zrzutu bazy danych za pomocą polecenia mysqldump . Jednak aby to zadziałało, serwer MySQL musi być skonfigurowany do akceptowania połączeń zdalnych, a także mieć użytkownika, który może łączyć się zdalnie. Może tak nie być w przypadku używanego obrazu dokera Wordpress.


Edytować

Docker niedawno wprowadził wtyczki woluminów Dockera, które pozwalają delegować obsługę woluminów do wtyczek wdrożonych przez dostawców.

docker runKomenda ma nowego zachowania dla -vopcji. Teraz można przekazać mu nazwę woluminu . Woluminy utworzone w ten sposób są nazwane i łatwe do późniejszego odniesienia, co ułatwia problemy z wiszącymi woluminami .

Edytuj 2

Docker wprowadził docker volume prunepolecenie, aby łatwo usunąć wszystkie wiszące woluminy.


34
Właściwie jestem bardziej zainteresowany zrobieniem kontenera, który mogę łatwo przenosić, nie rozumiem sensu kontenera, którego nie można przenieść.
pguardiario

W takim przypadku należy spojrzeć na narzędzia, które pomaga w zarządzaniu ilość danych Docker dla Ciebie, takich jak Flocker
Thomasleveil

9
Docker nie usuwa automatycznie woluminów danych. Data volumes are designed to persist data, independent of the container’s life cycle. Docker therefore never automatically delete volumes when you remove a container, nor will it “garbage collect” volumes that are no longer referenced by a container. więc kontenery tylko danych są starsze
Andrii Zarubin

2
nie potrzebujesz zdalnego połączenia dla mysqldump. Po prostu wrzuć do pojemnika, zrzuć go, a następnie skopiuj za pomocą docker cp.
jiggunjer

@AndriiZarubin re: data only container obsolete?Wcale nie. Kontener zawierający tylko dane zapewnia kontener do docker exec data-container tar -czf snapshot.tgz /datatego docker cp data-container:snapshot.tgz ./snapshot.tgzi tym podobnych. Jeśli chcesz, aby kontener był długowieczny, spraw, aby jego polecenie tail -f /dev/nullnigdy nie wychodziło, używając minimalnych zasobów.
Jesse Chisholm

31

AKTUALIZACJA 2

Skrypt bash kopii zapasowej pojedynczego woluminu:

#!/bin/bash
# This script allows you to backup a single volume from a container
# Data in given volume is saved in the current directory in a tar archive.
CONTAINER_NAME=$1
VOLUME_NAME=$2

usage() {
  echo "Usage: $0 [container name] [volume name]"
  exit 1
}

if [ -z $CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

if [ -z $VOLUME_NAME ]
then
  echo "Error: missing volume name parameter."
  usage
fi

sudo docker run --rm --volumes-from $CONTAINER_NAME -v $(pwd):/backup busybox tar cvf /backup/backup.tar $VOLUME_NAME

Surowy skrypt bash przywracania pojedynczego woluminu:

#!/bin/bash
# This script allows you to restore a single volume from a container
# Data in restored in volume with same backupped path
NEW_CONTAINER_NAME=$1

usage() {
  echo "Usage: $0 [container name]"
  exit 1
}

if [ -z $NEW_CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

sudo docker run --rm --volumes-from $NEW_CONTAINER_NAME -v $(pwd):/backup busybox tar xvf /backup/backup.tar

Sposób użycia może wyglądać następująco:

$ volume_backup.sh old_container /srv/www
$ sudo docker stop old_container && sudo docker rm old_container
$ sudo docker run -d --name new_container myrepo/new_container
$ volume_restore.sh new_container

Założenia są następujące: plik kopii zapasowej nazywa się backup.tar, znajduje się w tym samym katalogu, co skrypt tworzenia kopii zapasowych i przywracania, nazwa woluminu jest taka sama między kontenerami.

AKTUALIZACJA

Wydaje mi się, że tworzenie kopii zapasowych woluminów z kontenerów nie różni się od tworzenia kopii zapasowych woluminów z kontenerów danych.

Woluminy to nic innego jak ścieżki połączone z kontenerem, więc proces jest taki sam.

Nie wiem, czy docker-backup działa również dla tych samych woluminów kontenerów, ale możesz użyć:

sudo docker run --rm --volumes-from yourcontainer -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data

i:

sudo docker run --rm --volumes-from yournewcontainer -v $(pwd):/backup busybox tar xvf /backup/backup.tar

KONIEC AKTUALIZACJI

Jest dostępne to fajne narzędzie, które umożliwia tworzenie kopii zapasowych i przywracanie kontenerów woluminów dockera:

https://github.com/discordianfish/docker-backup

jeśli masz kontener powiązany z niektórymi wolumenami kontenerów, takimi jak ten:

$ docker run --volumes-from=my-data-container --name my-server ...

możesz wykonać kopię zapasową wszystkich woluminów w następujący sposób:

$ docker-backup store my-server-backup.tar my-server

i przywróć w ten sposób:

$ docker-backup restore my-server-backup.tar

Lub możesz podążać oficjalną drogą:

Jak przenosić woluminy zawierające tylko dane z jednego hosta na inny?


Nie, to nie jest sytuacja „--volumes-from”, a raczej woluminy są definiowane w pliku dockerfile, co powoduje, że dane nie są zachowywane. Jeśli spojrzysz na dockerfile dla tutum / lamp , zobaczysz, co mam na myśli.
pguardiario

Odpowiedź, którą już udzieliłem, jest dobra dla każdego rodzaju objętości, ponieważ woluminy są wolumenami, a kontenery są kontenerami.Nie ma różnicy, jeśli używasz kontenera jako kontenera danych z perspektywy woluminów
tommasop

Wolumin zdefiniowany w pliku dockerfile jest niszczony po zniszczeniu kontenera. Nie ma więc możliwości odzyskania tych danych po przeniesieniu kontenera.
pguardiario

musisz pobrać dane przed przeniesieniem kontenera, a następnie ponownie uruchomić kontener i odłożyć dane
tommasop

1
Pojawia się błąd: unknown shorthand flag: 'r' in -rm.czy powinien --rm? (Docker wersja 18.09.5, kompilacja e8ff056)
kuga

22

Jeśli potrzebujesz tylko kopii zapasowych zamontowanych woluminów, możesz po prostu skopiować foldery z twojego Dockerhost .

Uwaga: jeśli korzystasz z systemu Ubuntu , Dockerhost jest Twoim komputerem lokalnym. Jeśli korzystasz z komputera Mac , Dockerhost to Twoja maszyna wirtualna.

W Ubuntu

Możesz znaleźć wszystkie foldery z woluminami tutaj: /var/lib/docker/volumes/możesz je kopiować i archiwizować w dowolnym miejscu.

Na MAC

To nie jest takie proste, jak na Ubuntu. Musisz skopiować pliki z maszyny wirtualnej.

Oto skrypt pokazujący, jak skopiować wszystkie foldery z woluminami z maszyny wirtualnej (na której działa serwer Docker) na maszynę lokalną. Zakładamy, że twoja maszyna wirtualna docker-machine o nazwie default .

docker-machine ssh default sudo cp -v -R /var/lib/docker/volumes/ /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine scp -R default:/home/docker/volumes ./backup_volumes

docker-machine ssh default sudo rm -r /home/docker/volumes

Utworzy folder ./backup_volumes w Twoim bieżącym katalogu i skopiuje wszystkie woluminy do tego folderu.

Oto skrypt pokazujący, jak skopiować wszystkie zapisane woluminy z katalogu lokalnego ( ./backup_volumes ) na maszynę Dockerhost

docker-machine scp -r ./backup_volumes default:/home/docker

docker-machine ssh default sudo mv -f /home/docker/backup_volumes /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine ssh default sudo cp -v -R /home/docker/volumes /var/lib/docker/

docker-machine ssh default sudo rm -r /home/docker/volumes

Teraz możesz sprawdzić, czy to działa:

docker volume ls

Czy musimy zamknąć kontener, aby wykonać kopię zapasową tego folderu /var/lib/docker/volumesw systemie Ubuntu?
onznany

2
Nie jest to konieczne, możesz skopiować ten folder w dowolnym momencie.
Andrii Dvoiak

4
Technicznie tak, możesz, ale jesteś narażony na problemy z uszkodzeniem danych, ponieważ kopia nie jest atomowa i mogą występować równoległe zapisy w woluminie, wolałbym najpierw zatrzymać kontener.
Alessandro S.

13

Powiedzmy, że nazwa twojego woluminu to data_volume. Możesz użyć następujących poleceń, aby utworzyć kopię zapasową i przywrócić wolumin do iz obrazu Dockera o nazwie data_image:

Wycofać się:

docker run --rm --mount source=data_volume,destination=/data alpine tar -c -f- data | docker run -i --name data_container alpine tar -x -f-
docker container commit data_container data_image
docker rm data_container

Przywrócić:

docker run --rm data_image tar -c -f- data | docker run -i --rm --mount source=data_volume,destination=/data alpine tar -x -f-

Czy to jest kopia zapasowa w czasie rzeczywistym?
Kang Andrew,

2
Ponieważ ten sam wolumen można zamontować w wielu dokach, tak, jest to kopia zapasowa w czasie rzeczywistym. Na przykład. Wolumin zamontowany w kontenerze MySQL można zarchiwizować (zakładając, że dane nie są uszkodzone). Ale w przypadku usług, które muszą zostać zatrzymane ze strachu przed uszkodzeniem danych, nie jest to czas rzeczywisty.
Sahil Ahuja

9

Wiem, że to jest stare, ale zdaję sobie sprawę, że nie ma dobrze udokumentowanego rozwiązania do wypychania kontenera danych (jako kopii zapasowej) do docker hub. Właśnie opublikowałem krótki przykład jak to zrobić na https://dzone.com/articles/docker-backup-your-data-volumes-to-docker-hub

Poniżej znajduje się podsumowanie

Samouczek Dockera sugeruje, że możesz utworzyć kopię zapasową i przywrócić lokalnie wolumin danych. Zamierzamy użyć tej techniki, dodać kilka dodatkowych wierszy, aby przenieść tę kopię zapasową do centrum Docker w celu łatwego przywrócenia w przyszłości w dowolnej lokalizacji. Więc zacznijmy. Oto kroki, które należy wykonać:

Utwórz kopię zapasową woluminu danych z kontenera danych o nazwie data-container-to-backup

docker run --rm --volumes-from data-container-backup --name tmp-backup -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /folderToBackup

Rozwiń ten plik tar do nowego kontenera, abyśmy mogli go zatwierdzić jako część obrazu

docker run -d -v $(pwd):/backup --name data-backup ubuntu /bin/sh -c "cd / && tar xvf /backup/backup.tar"

Zatwierdź i prześlij obraz z żądanym tagiem ($ VERSION)

docker commit data-backup repo/data-backup:$VERSION
docker push repo/data-backup:$VERSION

Wreszcie posprzątajmy

docker rm data-backup
docker rmi $(docker images -f "dangling=true" -q)

Teraz w naszym repozytorium mamy obraz o nazwie kopia zapasowa danych, który jest po prostu systemem plików z plikami i folderami kopii zapasowych. Aby użyć tego obrazu (inaczej przywracania z kopii zapasowej), wykonujemy następujące czynności:

Uruchom kontener danych z obrazem kopii zapasowej danych

run -v /folderToBackup --entrypoint "bin/sh" --name data-container repo/data-backup:${VERSION}

Uruchom obraz whatEver z woluminami z pojemnika danych

docker run --volumes-from=data-container repo/whatEver

Otóż ​​to.

Byłem zaskoczony, że nie ma dokumentacji dotyczącej tego obejścia. Mam nadzieję, że ktoś uzna to za pomocne. Wiem, że chwilę zajęło mi przemyślenie tego.


8

Jeśli Twój projekt używa docker-compose, oto podejście do tworzenia kopii zapasowych i przywracania woluminów.

docker-compose.yml

Zasadniczo dodajesz db-backupi db-restoreusługi do pliku docker-compose.yml i dostosowujesz go do nazwy woluminu. dbdataW tym przykładzie nazwa mojego woluminu .

version: "3"

services:
  db:
    image: percona:5.7
    volumes:
      - dbdata:/var/lib/mysql

  db-backup:
    image: alpine    
    tty: false
    environment:
      - TARGET=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "tar -cjf /backup/$${TARGET}.tar.bz2 -C /volume ./"

  db-restore:
    image: alpine    
    environment:
      - SOURCE=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "rm -rf /volume/* /volume/..?* /volume/.[!.]* ; tar -C /volume/ -xjf /backup/$${SOURCE}.tar.bz2"

Unikaj korupcji

Aby zachować spójność danych, zatrzymaj kontener db przed utworzeniem kopii zapasowej lub przywróceniem

docker-compose stop db

Tworzenie kopii zapasowych

Aby utworzyć kopię zapasową do domyślnego miejsca docelowego ( backup/dbdata.tar.bz2):

docker-compose run --rm db-backup

Lub, jeśli chcesz określić alternatywną nazwę celu, wykonaj:

docker-compose run --rm -e TARGET=mybackup db-backup

Przywracanie

Aby przywrócić z backup/dbdata.tar.bz2, wykonaj:

docker-compose run --rm db-restore

Lub przywróć z określonego pliku za pomocą:

docker-compose run --rm -e SOURCE=mybackup db-restore

Dostosowałem polecenia z https://loomchild.net/2017/03/26/backup-restore-docker-named-volumes/, aby stworzyć to podejście.


5

Następujące polecenie uruchomi tar w kontenerze z zamontowanymi wszystkimi nazwanymi woluminami danych i przekieruje dane wyjściowe do pliku:

docker run --rm `docker volume list -q | egrep -v '^.{64}$' | awk '{print "-v " $1 ":/mnt/" $1}'` alpine tar -C /mnt -cj . > data-volumes.tar.bz2

Pamiętaj, aby przetestować archiwum wynikowe na wypadek, gdyby coś poszło nie tak:

tar -tjf data-volumes.tar.bz2

4

Jeśli potrzebujesz tylko prostej kopii zapasowej do archiwum, możesz wypróbować moje małe narzędzie: https://github.com/loomchild/volume-backup

Przykład

Utworzyć kopię zapasową:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup backup archive1

archiwizuje objętość nazwie some_volumedo /tmp/archive1.tar.bz2archiwum

Przywracać:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup restore archive1

będzie wytrzeć i przywrócić głośność nazwie some_volumez /tmp/archive1.tar.bz2archiwum.

Więcej informacji: https://medium.com/@loomchild/backup-restore-docker-named-volumes-350397b8e362


Stworzyłem podobne narzędzie github.com/01e9/docker-backup Tworzy archiwa kopii zapasowych i dodaje je do katalogu synchronizacji Resilio
Oleg

2

Stworzyłem narzędzie do organizowania i uruchamiania kopii zapasowych danych i kontenerów mysql, zwane po prostu docker-backup . W hubie Dockera jest nawet gotowy do użycia obraz .

Jest napisany głównie w Bash, ponieważ jest to głównie orkiestracja. Używa duplicitydo rzeczywistego silnika zapasowego. Obecnie możesz tworzyć kopie zapasowe na FTP (S) i Amazon S3.

Konfiguracja jest dość prosta: napisz plik konfiguracyjny w YAML opisujący, co i gdzie skopiować, i gotowe!

W przypadku kontenerów danych automatycznie montuje woluminy udostępnione przez kontener w celu tworzenia kopii zapasowych i przetwarzania. W przypadku kontenerów mysql łączy je i wykonuje mysqldump w pakiecie z kontenerem i przetwarza wynik.

Napisałem go, ponieważ używam Docker-Cloud, który nie jest aktualny z ostatnimi wydaniami docker-engine i ponieważ chciałem objąć sposób Dockera, nie uwzględniając żadnego procesu tworzenia kopii zapasowych w moich kontenerach aplikacji.


2

Jeśli chcesz wykonać pełną kopię zapasową, musisz wykonać kilka kroków:

  1. Zatwierdź kontener na obrazie
  2. Zapisz obraz
  3. Utwórz kopię zapasową woluminu kontenera, tworząc plik tar z punktem podłączenia woluminu w kontenerze.
  4. Powtórz kroki 1-3 dla kontenera bazy danych.

Zwróć uwagę, że wykonanie samego zatwierdzenia Dockera kontenera do obrazu NIE obejmuje woluminów dołączonych do kontenera (patrz: dokumentacja zatwierdzenia Dockera ).

Operacja zatwierdzenia nie obejmie żadnych danych zawartych w woluminach zamontowanych wewnątrz kontenera ”.


1

Jeśli lubisz wprowadzać tajemnych operatorów z wiersza poleceń, pokochasz te ręczne techniki tworzenia kopii zapasowych kontenerów. Pamiętaj, że istnieje szybszy i bardziej efektywny sposób tworzenia kopii zapasowych kontenerów, który jest równie skuteczny. Napisałem instrukcje tutaj: https://www.morpheusdata.com/blog/2017-03-02-how-to-create-a-docker-backup-with-morpheus

Krok 1: Dodaj hosta Dockera do dowolnej chmury Jak wyjaśniono w samouczku na stronie pomocy technicznej Morpheus, możesz dodać hosta Dockera do wybranej chmury w ciągu kilku sekund. Zacznij od wybrania Infrastruktury na głównym pasku nawigacyjnym Morfeusza. Wybierz Hosty w górnej części okna Infrastructure i kliknij przycisk „+ Container Hosts” w prawym górnym rogu.

Aby utworzyć kopię zapasową hosta Dockera w chmurze za pośrednictwem Morpheusa, przejdź do ekranu Infrastruktura i otwórz menu „+ Hosty kontenerów”.

Wybierz z menu typ hosta kontenera, wybierz grupę, a następnie wprowadź dane w pięciu polach: Nazwa, Opis, Widoczność, Wybierz chmurę i Wprowadź tagi (opcjonalnie). Kliknij przycisk Dalej, a następnie skonfiguruj opcje hosta, wybierając plan usług. Zwróć uwagę, że pola głośności, pamięci i liczby procesorów będą widoczne tylko wtedy, gdy wybrany plan ma włączone opcje niestandardowe.

Tutaj możesz dodawać i rozmiar woluminów, ustawiać rozmiar pamięci i liczbę procesorów oraz wybierać sieć. Możesz także skonfigurować nazwę użytkownika i hasło systemu operacyjnego, nazwę domeny i nazwę hosta, która domyślnie jest nazwą kontenera wprowadzoną wcześniej. Kliknij przycisk Dalej, a następnie dodaj dowolne przepływy pracy automatyzacji (opcjonalnie). Na koniec przejrzyj ustawienia i kliknij przycisk Zakończ, aby je zapisać.

Krok 2: Dodaj integrację rejestru Docker do chmury publicznej lub prywatnej Adam Hicks opisuje w innym samouczku dotyczącym Morpheusa, jak prosta jest integracja z prywatnym rejestrem Docker. (Nie jest wymagana żadna dodatkowa konfiguracja, aby używać Morpheus do udostępniania obrazów w publicznym centrum Dockera przy użyciu publicznego interfejsu API platformy Docker).

Wybierz Integracje pod zakładką Administrator na głównym pasku nawigacji, a następnie wybierz przycisk „+ Nowa integracja” po prawej stronie ekranu. W wyświetlonym oknie Integracja wybierz repozytorium Docker z menu rozwijanego Typ, wprowadź nazwę i dodaj punkt końcowy interfejsu API rejestru prywatnego. Podaj nazwę użytkownika i hasło do rejestru, którego używasz, a następnie kliknij przycisk Zapisz zmiany.

Zintegruj rejestr platformy Docker z chmurą prywatną za pomocą okna dialogowego „Nowa integracja” Morpheusa.

Aby udostępnić właśnie utworzoną integrację, wybierz opcję Docker w obszarze Typ w oknie dialogowym Utwórz wystąpienie, wybierz rejestr w menu rozwijanym Rejestr platformy Docker na karcie Konfiguracja, a następnie kontynuuj obsługę administracyjną tak, jak w przypadku każdego kontenera platformy Docker.

Krok 3: Zarządzaj kopiami zapasowymi Po dodaniu hosta Docker i zintegrowaniu rejestru kopia zapasowa zostanie skonfigurowana i wykonana automatycznie dla każdej aprowizowanej instancji. Obsługa Morpheus zawiera instrukcje dotyczące przeglądania kopii zapasowych, tworzenia kopii zapasowych instancji i tworzenia kopii zapasowych serwera.


0

Jeśli masz sprawę tak prostą jak moja, możesz wykonać następujące czynności:

  1. Utwórz plik Dockerfile, który rozszerza obraz podstawowy kontenera
  2. Zakładam, że twoje woluminy są mapowane na twój system plików, więc możesz po prostu dodać te pliki / foldery do swojego obrazu za pomocą ADD folder destination
  3. Gotowe!

Na przykład zakładając, że masz dane z woluminów w swoim katalogu domowym, na przykład /home/mydatamożesz uruchomić następujące polecenie:

DOCKERFILE=/home/dockerfile.bk-myimage
docker build --rm --no-cache -t $IMAGENAME:$TAG -f $DOCKERFILE /home/pirate

Gdzie Twój DOCKERFILE wskazuje na taki plik:

FROM user/myimage
MAINTAINER Danielo Rodríguez Rivero <example@gmail.com>

WORKDIR /opt/data
ADD mydata .

Reszta rzeczy jest dziedziczona z obrazu podstawowego. Możesz teraz przesłać ten obraz do chmury Docker, a Twoi użytkownicy będą mieli dane dostępne bezpośrednio w swoich kontenerach


Jaki jest sens w używaniu objętości, jeśli zamierzasz w końcu wstawić ją do obrazu.
jiggunjer

@jiggunjer posiadający wolumen pozwala na nadpisanie danych w kontenerze
Danielo515

Mogę też zastąpić dane bez woluminu, używając docker cp.
jiggunjer

0

Problem : Chcesz wykonać kopię zapasową kontenera obrazu Z woluminami danych w nim, ale ta opcja nie jest gotowa do użycia, Prostym i trywialnym sposobem byłoby skopiowanie ścieżki woluminów i utworzenie kopii zapasowej obrazu Dockera `` załaduj go ponownie i połącz obie razem. ale to rozwiązanie wydaje się być niezgrabne, nietrwałe i niemożliwe do utrzymania - trzeba by utworzyć zadanie cron, które za każdym razem sprawi, że będzie to płynąć.

Rozwiązanie : Korzystanie z dockup - obraz platformy Docker do tworzenia kopii zapasowych woluminów kontenerów Docker i przesyłania ich do s3 (Docker + Backup = dockup). dockup użyje twoich poświadczeń AWS do stworzenia nowego zasobnika o nazwie zgodnie ze zmienną środowiskową, pobierze skonfigurowane woluminy i zostanie archiwizowany w tarballu, spakowany gzipem, oznaczony czasem i załadowany do zasobnika S3.

Kroki :

  1. Skonfiguruj docker-compose.ymli dołącz env.txtdo niego plik konfiguracyjny. Dane powinny zostać przesłane do dedykowanego, zabezpieczonego wiadra s3 i gotowe do ponownego załadowania przy wykonywaniu DRP. aby sprawdzić, którą ścieżkę woluminów skonfigurować, uruchom docker inspect <service-name>i zlokalizuj woluminy :

"Woluminy": {"/ etc / service-example": {}, "/ service-example": {}},

  1. Edytuj zawartość pliku konfiguracyjnego env.txti umieść go w ścieżce projektu:

    AWS_ACCESS_KEY_ID=<key_here>
    AWS_SECRET_ACCESS_KEY=<secret_here>
    AWS_DEFAULT_REGION=us-east-1
    BACKUP_NAME=service-backup
    PATHS_TO_BACKUP=/etc/service-example /service-example
    S3_BUCKET_NAME=docker-backups.example.com
    RESTORE=false
    
  2. Uruchom kontener dokowany

$ docker run --rm \
--env-file env.txt \
--volumes-from <service-name> \
--name dockup tutum/dockup:latest
  1. Następnie sprawdź, czy Twój zasobnik s3 zawiera odpowiednie dane

-1

Jest to sposób tworzenia kopii zapasowych woluminów folderów.
Jeśli masz infra rejestru Dockera, ta metoda jest bardzo pomocna.
Wykorzystuje to rejestr docker do łatwego przenoszenia pliku zip.

#volume folder backup script. !/bin/bash

#common bash variables. set these variable before running scripts
REPO=harbor.otcysk.org:20443/levee
VFOLDER=/data/mariadb
TAG=mariadb1

#zip local folder for volume files
tar cvfz volume-backup.tar.gz $VFOLDER

#copy the zip file to volume-backup container.
#zip file must be in current folder.
docker run -d -v $(pwd):/temp --name volume-backup ubuntu \
       bash -c "cd / && cp /temp/volume-backup.tar.gz ."


#commit for pushing into REPO
docker commit volume-backup $REPO/volume-backup:$TAG

#check gz files in this container
#docker run --rm -it --entrypoint bash --name check-volume-backup \
        $REPO/volume-backup:$TAG

#push into REPO
docker push $REPO/volume-backup:$TAG

Na innym serwerze

#pull the image in another server
docker pull $REPO/volume-backup:$TAG

#restore files in another server filesystem
docker run --rm -v $VFOLDER:$VFOLDER --name volume-backup $REPO/volume-backup:$TAG \
       bash -c "cd / && tar xvfz volume-backup.tar.gz"

Uruchom obraz, który używa tego folderu woluminu.
Możesz łatwo stworzyć obraz, który ma zarówno jeden obraz roboczy, jak i jeden plik zip.
Ale nie polecam z różnych powodów (rozmiar obrazu, polecenie wejścia, ...).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.