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źć.
backup
docker
linux-containers
pguardiario
źródło
źródło
Odpowiedzi:
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 .
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
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 run
Komenda ma nowego zachowania dla-v
opcji. 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 prune
polecenie, aby łatwo usunąć wszystkie wiszące woluminy.źródło
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ą starszemysqldump
. Po prostu wrzuć do pojemnika, zrzuć go, a następnie skopiuj za pomocądocker cp
.data only container obsolete?
Wcale nie. Kontener zawierający tylko dane zapewnia kontener dodocker exec data-container tar -czf snapshot.tgz /data
tegodocker cp data-container:snapshot.tgz ./snapshot.tgz
i tym podobnych. Jeśli chcesz, aby kontener był długowieczny, spraw, aby jego polecenietail -f /dev/null
nigdy nie wychodziło, używając minimalnych zasobów.AKTUALIZACJA 2
Skrypt bash kopii zapasowej pojedynczego woluminu:
Surowy skrypt bash przywracania pojedynczego woluminu:
Sposób użycia może wyglądać następująco:
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ć:
i:
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:
możesz wykonać kopię zapasową wszystkich woluminów w następujący sposób:
i przywróć w ten sposób:
Lub możesz podążać oficjalną drogą:
Jak przenosić woluminy zawierające tylko dane z jednego hosta na inny?
źródło
unknown shorthand flag: 'r' in -rm.
czy powinien--rm
? (Docker wersja 18.09.5, kompilacja e8ff056)Jeśli potrzebujesz tylko kopii zapasowych zamontowanych woluminów, możesz po prostu skopiować foldery z twojego Dockerhost .
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 .
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
Teraz możesz sprawdzić, czy to działa:
źródło
/var/lib/docker/volumes
w systemie Ubuntu?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 nazwiedata_image
:Wycofać się:
Przywrócić:
źródło
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
Rozwiń ten plik tar do nowego kontenera, abyśmy mogli go zatwierdzić jako część obrazu
Zatwierdź i prześlij obraz z żądanym tagiem ($ VERSION)
Wreszcie posprzątajmy
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
Uruchom obraz whatEver z woluminami z pojemnika danych
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.
źródło
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-backup
idb-restore
usługi do pliku docker-compose.yml i dostosowujesz go do nazwy woluminu.dbdata
W tym przykładzie nazwa mojego woluminu .Unikaj korupcji
Aby zachować spójność danych, zatrzymaj kontener db przed utworzeniem kopii zapasowej lub przywróceniem
Tworzenie kopii zapasowych
Aby utworzyć kopię zapasową do domyślnego miejsca docelowego (
backup/dbdata.tar.bz2
):Lub, jeśli chcesz określić alternatywną nazwę celu, wykonaj:
Przywracanie
Aby przywrócić z
backup/dbdata.tar.bz2
, wykonaj:Lub przywróć z określonego pliku za pomocą:
Dostosowałem polecenia z https://loomchild.net/2017/03/26/backup-restore-docker-named-volumes/, aby stworzyć to podejście.
źródło
Następujące polecenie uruchomi tar w kontenerze z zamontowanymi wszystkimi nazwanymi woluminami danych i przekieruje dane wyjściowe do pliku:
Pamiętaj, aby przetestować archiwum wynikowe na wypadek, gdyby coś poszło nie tak:
źródło
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ą:
archiwizuje objętość nazwie
some_volume
do/tmp/archive1.tar.bz2
archiwumPrzywracać:
będzie wytrzeć i przywrócić głośność nazwie
some_volume
z/tmp/archive1.tar.bz2
archiwum.Więcej informacji: https://medium.com/@loomchild/backup-restore-docker-named-volumes-350397b8e362
źródło
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
duplicity
do 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.
źródło
Jeśli chcesz wykonać pełną kopię zapasową, musisz wykonać kilka kroków:
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 ”.
źródło
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.
źródło
Jeśli masz sprawę tak prostą jak moja, możesz wykonać następujące czynności:
ADD folder destination
Na przykład zakładając, że masz dane z woluminów w swoim katalogu domowym, na przykład
/home/mydata
możesz uruchomić następujące polecenie:Gdzie Twój DOCKERFILE wskazuje na taki plik:
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
źródło
docker cp
.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 :
docker-compose.yml
i dołączenv.txt
do 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ć, uruchomdocker inspect <service-name>
i zlokalizuj woluminy :Edytuj zawartość pliku konfiguracyjnego
env.txt
i umieść go w ścieżce projektu:Uruchom kontener dokowany
źródło
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.
Na innym serwerze
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, ...).
źródło