मैं अपने डेटा-वॉल्यूम के साथ डॉकर-कंटेनर का बैकअप कैसे ले सकता हूं?


152

मैं एक वर्डप्रेस वेबसाइट को प्रदर्शित करने के लिए इस डॉकर-छवि टुटम / वर्डप्रेस का उपयोग कर रहा हूं । हाल ही में मुझे पता चला कि छवि MySQL-data के लिए वॉल्यूम का उपयोग करती है।

तो समस्या यह है: यदि मैं बैकअप लेना चाहता हूं और कंटेनर को पुनर्स्थापित करना चाहता हूं तो मैं एक छवि बनाने की कोशिश कर सकता हूं, और फिर बाद में कंटेनर को हटा सकता हूं, और प्रतिबद्ध छवि से एक नया कंटेनर बना सकता हूं। लेकिन अगर मैं ऐसा करता हूं कि वॉल्यूम डिलीट हो जाता है और मेरा सारा डेटा चला गया है।

मेरे कंटेनर और इसके वॉल्यूम-डेटा के बैकअप के लिए कुछ सरल तरीके होने चाहिए, लेकिन मैं इसे कहीं भी नहीं ढूंढ सकता।


इस स्क्रिप्ट की जाँच करें जो मैंने लिखा है कि एक डॉक प्रोजेक्ट में बिल्कुल सब कुछ है, जिसमें नामित और अनाम वॉल्यूम, चित्र, कॉन्फ़िगरेशन, लॉग, कंटेनर रूट फाइलसिस्टम, डेटाबेस और बहुत कुछ शामिल हैं: docker-compose-backup.sh
निक स्वीटिंग

जवाबों:


141

यदि मैं कंटेनर को वापस करना चाहता हूं तो मैं एक छवि बनाने की कोशिश कर सकता हूं, और फिर बाद में कंटेनर को हटा सकता हूं, और प्रतिबद्ध छवि से एक नया कंटेनर बना सकता हूं। लेकिन अगर मैं ऐसा करता हूं कि वॉल्यूम डिलीट हो जाता है और मेरा सारा डेटा चला गया है

जैसा कि docker उपयोगकर्ता मार्गदर्शिका बताती है, डेटा वॉल्यूम एक कंटेनर फाइल सिस्टम के बाहर डेटा को बनाए रखने के लिए होता है। इससे कई कंटेनरों के बीच डेटा साझा करने में भी आसानी होती है।

जबकि डॉकर कभी भी वॉल्यूम में डेटा को डिलीट नहीं करेगा (जब तक कि आप संबंधित कंटेनर को डिलीट docker rm -vनहीं करते हैं), ऐसे वॉल्यूम जिन्हें किसी डॉकटर कंटेनर द्वारा संदर्भित नहीं किया जाता है, उन्हें डैंगलिंग वॉल्यूम कहा जाता है । उन झूलने वाले संस्करणों से छुटकारा पाना मुश्किल है और उपयोग करना मुश्किल है।

इसका मतलब यह है कि जैसे ही एक वॉल्यूम का उपयोग करने वाला अंतिम कंटेनर हटा दिया जाता है, डेटा वॉल्यूम झूलने लगता है और इसकी सामग्री को कम करना मुश्किल हो जाता है।

उन झूलने वाले संस्करणों को रोकने के लिए, ट्रिक एक अतिरिक्त डॉकटर कंटेनर बनाना है जिसमें आप जिस डेटा की मात्रा को बने रहना चाहते हैं; इतना है कि वहाँ हमेशा कम से कम कि कंटेनर कंटेनर मात्रा को संदर्भित करता है। इस तरह आप उस डेटा वॉल्यूम सामग्री तक आसानी से पहुंचने के बिना वर्डप्रेस ऐप चलाने वाले डॉकटर कंटेनर को हटा सकते हैं।

ऐसे कंटेनरों को डेटा वॉल्यूम कंटेनर कहा जाता है ।

मेरे कंटेनर और वॉल्यूम डेटा का बैकअप लेने के लिए कुछ सरल तरीके होने चाहिए, लेकिन मैं इसे कहीं भी नहीं ढूँढ सकता।

बैकअप docker छवियाँ

डॉकटर इमेज का बैकअप लेने के लिए, डॉकर सेव कमांड का उपयोग करें जो एक टार्क आर्काइव का उत्पादन करेगा जिसे बाद में डॉक लोड कमांड के साथ एक नया डॉकटर इमेज बनाने के लिए उपयोग किया जा सकता है ।

बैकअप डॉकटर कंटेनर

आप विभिन्न तरीकों से एक डॉकटर कंटेनर का बैकअप ले सकते हैं

  • Docker प्रतिबद्ध कमांड का उपयोग कर docker कंटेनर वर्तमान स्थिति के आधार पर एक नई docker छवि बनाकर
  • docker निर्यात कमांड का उपयोग करके डॉक कंटेनर फाइल सिस्टम को टार आर्काइव के रूप में निर्यात करके । आप बाद में डॉक इंपोर्ट कमांड के साथ उस टार आर्काइव से एक नई डॉकटर इमेज बना सकते हैं ।

ध्यान रखें कि वे कमांड केवल docker कंटेनर लेयर्ड फाइल सिस्टम का बैकअप लेंगे। यह डेटा वॉल्यूम को बाहर करता है

बैकअप डॉकटर डेटा वॉल्यूम

एक डेटा वॉल्यूम का बैकअप लेने के लिए आप एक नए कंटेनर को चला सकते हैं, जिस वॉल्यूम का आप बैकअप लेना चाहते हैं और डॉक उपयोगकर्ता गाइड में वर्णित वॉल्यूम सामग्री का एक संग्रह तैयार करने के लिए टार कमांड को निष्पादित करना चाहते हैं

आपके विशेष मामले में, डेटा वॉल्यूम का उपयोग MySQL सर्वर के लिए डेटा को संग्रहीत करने के लिए किया जाता है। इसलिए यदि आप इस वॉल्यूम के लिए टार आर्काइव निर्यात करना चाहते हैं, तो आपको सबसे पहले MySQL सर्वर को बंद करना होगा। ऐसा करने के लिए आपको वर्डप्रेस कंटेनर को बंद करना होगा।

MySQL डेटा बैकअप

एक अन्य तरीका MySQL सर्वर से दूर से कनेक्ट करना है ताकि mysqldump कमांड के साथ डेटाबेस डंप का उत्पादन किया जा सके । हालाँकि इस काम के लिए, आपके MySQL सर्वर को दूरस्थ कनेक्शन स्वीकार करने के लिए कॉन्फ़िगर किया जाना चाहिए और एक उपयोगकर्ता भी होना चाहिए जिसे दूरस्थ रूप से कनेक्ट करने की अनुमति है। यह आपके द्वारा उपयोग की जा रही वर्डप्रेस docker छवि के मामले में नहीं हो सकता है।


संपादित करें

डॉकर ने हाल ही में डॉकर वॉल्यूम प्लगइन्स पेश किए हैं जो विक्रेताओं द्वारा कार्यान्वित प्लगइन्स को वॉल्यूम की हैंडलिंग को सौंपने की अनुमति देते हैं।

docker runआदेश के लिए एक नया व्यवहार है -vविकल्प। अब इसे वॉल्यूम नाम देना संभव है । इस तरह से बनाए गए वॉल्यूम को बाद में संदर्भ देने के लिए नाम और आसान है, झूलने वाले संस्करणों के साथ मुद्दों को आसान बनाना ।

संपादित करें २

डॉकर ने docker volume pruneसभी झूलने वाले संस्करणों को आसानी से हटाने के लिए कमांड पेश की ।


34
वास्तव में मुझे एक कंटेनर बनाने में अधिक दिलचस्पी है जिसे मैं आसानी से स्थानांतरित कर सकता हूं, मैं एक कंटेनर के बिंदु को नहीं समझता हूं जिसे स्थानांतरित नहीं किया जा सकता है।
पेजडायरियो

उस स्थिति में आपको उन उपकरणों को देखना चाहिए जो आपके लिए डॉकर डेटा वॉल्यूम को प्रबंधित करने में मदद करते हैं, जैसे कि फ्लॉकर
थॉमसलेविल

9
डॉकर डेटा वॉल्यूम को स्वचालित रूप से हटा नहीं रहा है। 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. इसलिए डेटा केवल कंटेनरों की विरासत है
Andrii Zarubin

2
आपको इसके लिए दूरस्थ कनेक्शन की आवश्यकता नहीं है mysqldump। बस कंटेनर में शेल, इसे डंप करें, और फिर इसके साथ कॉपी करें docker cp
१२:४५ पर जिगगंजर

@AndriiZarubin re: data only container obsolete?बिलकुल नहीं। डेटा-केवल कंटेनर आपको docker exec data-container tar -czf snapshot.tgz /dataतब docker cp data-container:snapshot.tgz ./snapshot.tgzऔर इसके जैसे एक कंटेनर देता है । यदि आप चाहते हैं कि कंटेनर लंबे समय तक जीवित रहे, तो इसकी कमान कुछ ऐसी बनाएं tail -f /dev/null, जो न्यूनतम संसाधनों का उपयोग करते हुए कभी बाहर न निकले।
जेसी चिशोल्म

31

अद्यतन २

रॉ सिंगल वॉल्यूम बैकअप बैश स्क्रिप्ट:

#!/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

कच्चे एकल वॉल्यूम बैश स्क्रिप्ट को पुनर्स्थापित करें:

#!/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

उपयोग इस तरह हो सकता है:

$ 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

मान्यताएँ हैं: बैकअप फ़ाइल का नाम backup.tar है, यह बैकअप के रूप में उसी निर्देशिका में रहती है और स्क्रिप्ट को पुनर्स्थापित करती है, वॉल्यूम नाम कंटेनरों के बीच समान है।

अपडेट करें

यह मुझे लगता है कि कंटेनरों से बैकपिंग वॉल्यूम डेटा कंटेनरों से बैकपिंग वॉल्यूम से अलग नहीं है।

वॉल्यूम कंटेनर से जुड़े रास्तों के अलावा और कुछ नहीं हैं इसलिए प्रक्रिया समान है।

मुझे नहीं पता कि क्या डॉकटर-बैकअप समान कंटेनर संस्करणों के लिए भी काम करता है, लेकिन आप इसका उपयोग कर सकते हैं:

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

तथा:

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

अंत अद्यतन

यह एक अच्छा उपकरण उपलब्ध है जो आपको बैकअप और डॉकटर वॉल्यूम कंटेनरों को पुनर्स्थापित करने देता है:

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

यदि आपके पास कुछ कंटेनर वॉल्यूम से जुड़ा कंटेनर इस तरह है:

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

आप इस तरह से सभी संस्करणों का बैकअप ले सकते हैं:

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

और इस तरह बहाल करें:

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

या आप आधिकारिक तरीके का पालन कर सकते हैं:

डेटा-केवल वॉल्यूम को एक होस्ट से दूसरे होस्ट में पोर्ट कैसे करें?


नहीं, यह "--volumes- से" स्थिति नहीं है, बल्कि वॉल्यूम dockerfile में परिभाषित किए गए हैं जो डेटा को जारी नहीं रखने का कारण बनता है। यदि आप टुटम / लैंप के लिए डॉकटराइल को देखते हैं तो आप देखेंगे कि मेरा क्या मतलब है।
पेजडायरियो

मैंने पहले ही जो उत्तर दिया था, वह किसी भी प्रकार के आयतन के लिए अच्छा है क्योंकि वॉल्यूम वॉल्यूम हैं और कंटेनर ऐसे कंटेनर हैं जिनमें कोई अंतर नहीं है यदि आप वॉल्यूम परिप्रेक्ष्य से डेटा कंटेनर के रूप में कंटेनर का उपयोग करते हैं
tommasop

जब कंटेनर नष्ट हो जाता है तो वॉल्यूम में परिभाषित किया जाता है। इसलिए कंटेनर को ले जाने पर उस डेटा को वापस पाने का कोई तरीका नहीं है।
पेंडियारियो

कंटेनर को स्थानांतरित करने से पहले आपको डेटा प्राप्त करना होगा और फिर कंटेनर को फिर से
चालू करना होगा

1
मुझे एक त्रुटि मिलती है: unknown shorthand flag: 'r' in -rm.क्या यह होना चाहिए --rm? (डॉकर संस्करण 18.09.5, ई 8ff056 का निर्माण)
कुग

22

यदि आपको केवल बैकअप माउंटेड वॉल्यूम की आवश्यकता है तो आप अपने डॉकरहोस्ट से फ़ोल्डर्स कॉपी कर सकते हैं ।

नोट: यदि आप उबंटू में हैं , तो डॉकरहोस्ट आपकी स्थानीय मशीन है। यदि आप मैक पर हैं , तो डॉकरहोस्ट आपकी वर्चुअल मशीन है।

उबंटू पर

आप यहां सभी फ़ोल्डर्स को वॉल्यूम के साथ पा सकते हैं: /var/lib/docker/volumes/इसलिए आप उन्हें कॉपी कर सकते हैं और जहाँ चाहें संग्रह कर सकते हैं।

मैक पर

यह उबंटू पर इतना आसान नहीं है। आपको VM से फ़ाइलों की प्रतिलिपि बनाने की आवश्यकता है।

यहां वर्चुअल मशीन (जहां डॉक सर्वर चल रहा है) से संस्करणों के साथ सभी फ़ोल्डरों को कॉपी करने की एक स्क्रिप्ट आपके स्थानीय मशीन में दी गई है। हम मानते हैं कि आपका डॉकटर-मशीन VM नाम डिफ़ॉल्ट है

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

यह आपकी वर्तमान निर्देशिका में एक फ़ोल्डर //upup_volumes बनाने जा रहा है और इस फ़ोल्डर में सभी संस्करणों की प्रतिलिपि बनाएँ।

यहाँ आपके स्थानीय निर्देशिका ( ./backup_volumes ) से डॉकरहॉस्ट मशीन तक सभी सहेजे गए संस्करणों को कॉपी करने का एक तरीका है

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

अब आप जांच कर सकते हैं कि यह किसके द्वारा काम करता है:

docker volume ls

क्या हमें /var/lib/docker/volumesउबंटू के तहत उस फ़ोल्डर का बैकअप बनाने के लिए कंटेनर को बंद करने की आवश्यकता है ?
onknows

2
कोई आवश्यक नहीं, आप कभी भी उस फ़ोल्डर को कॉपी कर सकते हैं।
एंड्री ड्वोइक

4
तकनीकी रूप से हां, आप कर सकते हैं, लेकिन आप डेटा भ्रष्टाचार के मुद्दों से अवगत हैं क्योंकि प्रतिलिपि गैर-परमाणु है और वॉल्यूम के लिए समवर्ती लिख सकता है, मैं पहले कंटेनर को रोकूंगा।
एलेसेंड्रो एस।

13

मान लें कि आपका वॉल्यूम नाम है data_volume। आप निम्न आदेशों का उपयोग बैकअप और वॉल्यूम को पुनर्स्थापित करने के लिए कर सकते हैं जिसका नाम डॉकटर छवि से है data_image:

समर्थन करना:

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

पुन: स्थापित करने हेतु:

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

क्या यह रियल-टाइम बैक-अप है?
कांग एंड्रयू

2
जैसा कि एक ही वॉल्यूम कई डॉकर्स पर लगाया जा सकता है, हां यह रियल-टाइम बैकअप है। उदाहरण के लिए। मैसकल कंटेनर पर चढ़े हुए वॉल्यूम का बैकअप लिया जा सकता है (डेटा-भ्रष्टाचार नहीं मानते हुए)। लेकिन ऐसी सेवाओं के लिए जिन्हें डेटा भ्रष्टाचार के डर से बंद करने की आवश्यकता है, नहीं, यह वास्तविक समय नहीं है।
साहिल आहूजा

9

मुझे पता है कि यह पुराना है, लेकिन मुझे पता है कि डॉकटर हब के लिए डेटा कंटेनर (बैकअप के रूप में) को आगे बढ़ाने के लिए एक अच्छी तरह से प्रलेखित समाधान नहीं है। मैंने अभी-अभी https://dzone.com/articles/docker-backup-your-data-volumes-to-docker-hub पर ऐसा करने का एक छोटा सा उदाहरण प्रकाशित किया

नीचे पंक्ति है

Docker ट्यूटोरियल सुझाव देता है कि आप स्थानीय स्तर पर डेटा वॉल्यूम का बैकअप और पुनर्स्थापना कर सकते हैं। हम इस तकनीक का उपयोग करने जा रहे हैं, इस बैकअप को डॉकटर हब में धकेलने के लिए आसान भविष्य की बहाली के लिए कुछ और लाइनें जोड़ सकते हैं। तो चलो शुरू करते है। ये निम्नलिखित चरण हैं:

डेटा कंटेनर से डेटा वॉल्यूम बैकअप डेटा-कंटेनर-टू-बैकअप

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

इस टार फ़ाइल को एक नए कंटेनर में विस्तारित करें ताकि हम इसे अपनी छवि के हिस्से के रूप में प्रतिबद्ध कर सकें

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

वांछित टैग के साथ छवि को कमिट करें और धकेलें ($ संस्करण)

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

अंत में, साफ करने देता है

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

अब हमारे पास हमारे रेपो में डेटा-बैकअप नाम की एक छवि है जो बैकअप फ़ाइलों और फ़ोल्डरों के साथ एक फाइल सिस्टम है। इस छवि का उपयोग करने के लिए (बैकअप से उर्फ ​​पुनर्स्थापना), हम निम्नलिखित कार्य करते हैं:

डेटा-बैकअप छवि के साथ डेटा कंटेनर चलाएँ

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

डेटा-कंसेंट से वॉल्यूम के साथ अपनी व्हाट्सएप छवि को चलाएं

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

बस।

मुझे आश्चर्य हुआ कि इस काम के लिए कोई दस्तावेज नहीं है। मुझे आशा है कि किसी को यह मददगार लगेगा। मुझे पता है कि मुझे इस बारे में सोचने में थोड़ा समय लगा।


8

यदि आपका प्रोजेक्ट डॉकटर-कम्पोज़ का उपयोग करता है, तो यहां आपके संस्करणों का बैकअप लेने और पुनर्स्थापित करने के लिए एक दृष्टिकोण है।

डोकर-compose.yml

मूल रूप से आप जोड़ना db-backupऔर db-restoreअपने डोकर-compose.yml फाइल करने के लिए सेवाओं, और वॉल्यूम के नाम के लिए अनुकूल। मेरा dbdataउदाहरण इस उदाहरण में दिया गया है।

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"

भ्रष्टाचार से बचें

डेटा संगति के लिए, बैकअप या पुनर्स्थापित करने से पहले अपने db कंटेनर को बंद कर दें

docker-compose stop db

समर्थन करना

डिफ़ॉल्ट गंतव्य पर वापस जाने के लिए ( backup/dbdata.tar.bz2):

docker-compose run --rm db-backup

या, यदि आप एक वैकल्पिक लक्ष्य नाम निर्दिष्ट करना चाहते हैं, तो:

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

पुनर्स्थापित कर रहा है

से पुनर्स्थापित करने के लिए backup/dbdata.tar.bz2, करें:

docker-compose run --rm db-restore

या एक विशिष्ट फ़ाइल का उपयोग करके पुनर्स्थापित करें:

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

इस दृष्टिकोण को बनाने के लिए मैंने https://loomchild.net/2017/03/26/backup-restore-docker-onym-volumes/ से आदेशों को अनुकूलित किया ।


5

निम्न कमांड सभी नामित डेटा वॉल्यूम के साथ एक कंटेनर में टार चलाएगा, और आउटपुट को एक फ़ाइल में पुनर्निर्देशित करेगा:

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

कुछ गलत होने पर परिणामी संग्रह का परीक्षण करना सुनिश्चित करें:

tar -tjf data-volumes.tar.bz2

4

यदि आपको एक पुरालेख के लिए एक सरल बैकअप की आवश्यकता है, तो आप मेरी छोटी सी उपयोगिता की कोशिश कर सकते हैं: https://github.com/loomchild/volume-backup

उदाहरण

बैकअप:

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

संग्रह फ़ाइल के some_volumeलिए नाम मात्रा संग्रह होगा/tmp/archive1.tar.bz2

पुनर्स्थापित करें:

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

संग्रह फ़ाइल से नामित मात्रा को मिटा देगा और पुनर्स्थापित करेगा ।some_volume/tmp/archive1.tar.bz2

अधिक जानकारी: https://medium.com/@loomchild/backup-restore-docker-onym-volumes-350397b8e362


मैंने एक समान टूल बनाया github.com/01e9/docker-backup यह बैकअप अभिलेखागार बनाता है और उन्हें एक रेसिलियो सिंक निर्देशिका में जोड़ता है
ओलेग

2

मैंने डेटा और mysql कंटेनरों का बैकअप ऑर्केस्ट्रेट और लॉन्च करने के लिए एक टूल बनाया है, जिसे बस docker-backup कहा जाता है । डॉकटर हब पर एक रेडी-टू-यूज़ इमेज भी है

यह मुख्य रूप से बैश में लिखा गया है क्योंकि यह मुख्य रूप से ऑर्केस्ट्रेशन है। यह duplicityवास्तविक बैकअप इंजन के लिए उपयोग करता है । आप वर्तमान में एफ़टीपी (एस) और अमेज़ॅन एस ३ का बैकअप ले सकते हैं।

कॉन्फ़िगरेशन काफी सरल है: YAML में एक कॉन्फिग फ़ाइल लिखें जो यह बताता है कि बैकअप और कहां है, और यहां आप जाएं!

डेटा कंटेनरों के लिए, यह आपके कंटेनर द्वारा साझा किए गए संस्करणों को स्वचालित रूप से बैकअप और प्रोसेस करने के लिए माउंट करता है। Mysql कंटेनरों के लिए, यह उन्हें जोड़ता है और आपके कंटेनर के साथ बंडल किए गए mysqldump को निष्पादित करता है और परिणाम को संसाधित करता है।

मैंने इसे इसलिए लिखा क्योंकि मैं डॉकर-क्लाउड का उपयोग करता हूं जो हाल के डॉक-इंजन रिलीज के साथ अप-टू-डेट नहीं है और क्योंकि मैं अपने एप्लिकेशन कंटेनरों के अंदर बैकअप की किसी भी प्रक्रिया को शामिल नहीं करके डॉकर तरीका अपनाना चाहता था।


2

यदि आप एक पूर्ण बैकअप चाहते हैं, तो आपको कुछ कदम उठाने होंगे:

  1. एक छवि के लिए कंटेनर को कमिट करें
  2. छवि सहेजें
  3. कंटेनर में वॉल्यूम माउंट बिंदु की टार फ़ाइल बनाकर कंटेनर की मात्रा का बैकअप लें।
  4. डेटाबेस कंटेनर के लिए 1-3 चरण दोहराएं।

ध्यान दें कि एक छवि के लिए कंटेनर का सिर्फ एक डॉकटर प्रतिबद्ध है जिसमें कंटेनर से जुड़ी मात्रा शामिल नहीं है (रेफरी: डॉकर प्रतिबद्ध प्रलेखन )।

" प्रतिबद्ध संचालन में कंटेनर के अंदर माउंट किए गए वॉल्यूम में निहित कोई भी डेटा शामिल नहीं होगा। "


1

यदि आप कमांड लाइन से आर्कैन ऑपरेटरों को दर्ज करना पसंद करते हैं, तो आप इन मैनुअल कंटेनर बैकअप तकनीकों से प्यार करेंगे। ध्यान रखें, बैकअप कंटेनर के लिए एक तेज़ और अधिक कुशल तरीका है जो उतना ही प्रभावी है। मैंने यहाँ निर्देश लिखे हैं: https://www.morpheusdata.com/blog/2017-03-02-how-to-create-a-docker-backup-with-morpheus

चरण 1: किसी भी बादल में एक डॉकर होस्ट जोड़ें जैसा कि मॉर्फियस सपोर्ट साइट पर एक ट्यूटोरियल में बताया गया है, आप सेकंड के एक मामले में अपनी पसंद के क्लाउड पर एक डॉक होस्ट को जोड़ सकते हैं। मुख्य मॉर्फियस नेविगेशन पट्टी पर इन्फ्रास्ट्रक्चर का चयन करके शुरू करें। इन्फ्रास्ट्रक्चर विंडो के शीर्ष पर होस्ट का चयन करें, और शीर्ष दाईं ओर "+ कंटेनर होस्ट" बटन पर क्लिक करें।

मोरपीस के माध्यम से एक डॉक होस्ट को क्लाउड पर वापस लाने के लिए, इन्फ्रास्ट्रक्चर स्क्रीन पर नेविगेट करें और "+ कंटेनर होस्ट" मेनू खोलें।

मेनू पर एक कंटेनर होस्ट प्रकार चुनें, एक समूह का चयन करें, और फिर पांच फ़ील्ड में डेटा दर्ज करें: नाम, विवरण, दृश्यता, एक बादल का चयन करें और टैग (वैकल्पिक) दर्ज करें। अगला क्लिक करें, और फिर सेवा योजना का चयन करके मेजबान विकल्पों को कॉन्फ़िगर करें। ध्यान दें कि वॉल्यूम, मेमोरी और सीपीयू काउंट फ़ील्ड केवल तभी दिखाई देंगे जब आपके द्वारा चुनी गई योजना में कस्टम विकल्प सक्षम हों।

यहां वह जगह है जहां आप वॉल्यूम जोड़ते हैं और आकार देते हैं, मेमोरी साइज और सीपीयू काउंट सेट करते हैं और नेटवर्क चुनते हैं। आप OS उपयोगकर्ता नाम और पासवर्ड, डोमेन नाम और होस्टनाम भी कॉन्फ़िगर कर सकते हैं, जो डिफ़ॉल्ट रूप से आपके द्वारा पहले दर्ज किया गया कंटेनर नाम है। अगला क्लिक करें, और फिर किसी भी स्वचालन वर्कफ़्लोज़ (वैकल्पिक) को जोड़ें। सामान्य रूप से, अपनी सेटिंग्स की समीक्षा करें और उन्हें सहेजने के लिए पूर्ण पर क्लिक करें।

चरण 2: सार्वजनिक या निजी बादलों में डॉकर रजिस्ट्री एकीकरण जोड़ें एडम हिक्स एक और मॉर्फियस ट्यूटोरियल में वर्णन करता है कि एक निजी डॉकर रजिस्ट्री के साथ एकीकृत करना कितना सरल है। (सार्वजनिक डॉकटर एपीआई का उपयोग करके डोकर के सार्वजनिक हब के साथ छवियों को व्यवस्थित करने के लिए मॉर्फियस का उपयोग करने के लिए कोई अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता नहीं है।)

मुख्य नेविगेशन बार के व्यवस्थापक टैब के तहत एकीकरण का चयन करें, और उसके बाद स्क्रीन के दाईं ओर "+ नया एकीकरण" बटन चुनें। दिखाई देने वाली एकीकरण विंडो में, ड्रॉप-डाउन मेनू में डॉकर रिपॉजिटरी चुनें, एक नाम दर्ज करें और निजी रजिस्ट्री एपीआई एंडपॉइंट जोड़ें। आपके द्वारा उपयोग की जा रही रजिस्ट्री के लिए एक उपयोगकर्ता नाम और पासवर्ड की आपूर्ति करें और परिवर्तन सहेजें बटन पर क्लिक करें।

मॉर्फियस "न्यू इंटीग्रेशन" संवाद बॉक्स के माध्यम से एक निजी क्लाउड के साथ एक डॉक रजिस्ट्री को एकीकृत करें।

आपके द्वारा अभी-अभी बनाए गए एकीकरण का प्रावधान करने के लिए, डॉक्स इन द टाइप टू क्रिएट इंस्टेंस डायलॉग चुनें, रजिस्ट्री को डॉकर रजिस्ट्री ड्रॉप-डाउन मेनू में कॉन्फ़िगर टैब के तहत चुनें, और फिर प्रोविजनिंग जारी रखें जैसा कि आप किसी भी डॉकटर कंटेनर में करेंगे।

चरण 3: बैकअप प्रबंधित करें एक बार जब आप डॉकर होस्ट को जोड़ लेते हैं और रजिस्ट्री को एकीकृत करते हैं, तो एक बैकअप कॉन्फ़िगर किया जाएगा और आपके द्वारा प्रावधान किए गए प्रत्येक उदाहरण के लिए स्वचालित रूप से प्रदर्शन किया जाएगा। मॉर्फियस सपोर्ट बैकअप देखने, इंस्टेंस बैकअप बनाने और सर्वर बैकअप बनाने के निर्देश प्रदान करता है।


0

यदि आपके पास मेरा जितना सरल मामला है, तो आप निम्नलिखित कार्य कर सकते हैं:

  1. एक डॉकफ़िल बनाएं, जो आपके कंटेनर की आधार छवि का विस्तार करता है
  2. मुझे लगता है कि आपके वॉल्यूम को आपके फाइल सिस्टम पर मैप किया जाता है, इसलिए आप केवल उन फाइलों / फ़ोल्डरों को अपनी छवि का उपयोग करके जोड़ सकते हैं ADD folder destination
  3. किया हुआ!

उदाहरण के लिए, मान लें कि आपके पास अपने घर की निर्देशिका के संस्करणों से डेटा है, उदाहरण के लिए /home/mydataआप निम्नलिखित को चला सकते हैं:

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

जहाँ आपका DOCKERFILE इस तरह की फ़ाइल की ओर इशारा करता है:

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

WORKDIR /opt/data
ADD mydata .

बाकी सामान बेस इमेज से विरासत में मिला है। अब आप उस छवि को डॉक क्लाउड पर धक्का दे सकते हैं और आपके उपयोगकर्ताओं के पास उनके कंटेनरों पर सीधे उपलब्ध डेटा होगा


वॉल्यूम का उपयोग करने का क्या मतलब है अगर आप इसे अंततः छवि में सेंध लगाने जा रहे हैं।
१२:३४ पर जिगगंजर

@ जिग्गंजर में वॉल्यूम होने से आप कंटेनर में डेटा को ओवरराइड कर सकते हैं
डैनियलो 515

मैं एक वॉल्यूम के बिना भी डेटा को ओवरराइड कर सकता हूं, उपयोग करके docker cp
जिगगंजर

0

समस्या : आप इसमें डेटा वॉल्यूम के साथ इमेज कंटेनर का बैकअप लेना चाहते हैं, लेकिन यह विकल्प बॉक्स से बाहर नहीं है। सीधे आगे और तुच्छ तरीके से वॉल्यूम पथ की प्रतिलिपि बनाई जाएगी और डॉकटर छवि को फिर से लोड किया जाएगा और इसे लिंक किया जाएगा। दोनों साथ में। लेकिन यह समाधान अनाड़ी लगता है और टिकाऊ और बनाए रखने योग्य नहीं है - आपको एक क्रोन नौकरी बनाने की आवश्यकता होगी जो इस प्रवाह को हर बार बनाएगी।

समाधान : डॉकअप का उपयोग करना - अपने डॉकटर कंटेनर संस्करणों का बैकअप लेने के लिए डॉकर छवि और इसे s3 (Docker + Backup = dockup) पर अपलोड करें। डॉकअप आपके AWS क्रेडेंशियल्स का उपयोग पर्यावरण चर के अनुसार नाम के साथ एक नई बाल्टी बनाने के लिए करेगा, कॉन्फ़िगर किए गए वॉल्यूम प्राप्त करेगा और S3 बाल्टी पर तारांकित, gzipped, समय-मुद्रांकित और अपलोड किया जाएगा।

चरण :

  1. कॉन्फ़िगरेशन को कॉन्फ़िगर करें docker-compose.ymlऔर env.txtइसे कॉन्फ़िगरेशन फ़ाइल संलग्न करें । डेटा को एक समर्पित सुरक्षित s3 बाल्टी पर अपलोड किया जाना चाहिए और DRP निष्पादन पर फिर से लोड किया जाना चाहिए। सत्यापित करने के लिए कि कौन से वॉल्यूम पथ को कॉन्फ़िगर करने docker inspect <service-name>और वॉल्यूम का पता लगाने के लिए पथ :

"वॉल्यूम": {"/ etc / सेवा-उदाहरण": {}, "/ सेवा-उदाहरण": {}},

  1. कॉन्फ़िगरेशन फ़ाइल की सामग्री को संपादित करें env.txt, और इसे प्रोजेक्ट पथ पर रखें:

    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. डॉकअप कंटेनर चलाएं

$ docker run --rm \
--env-file env.txt \
--volumes-from <service-name> \
--name dockup tutum/dockup:latest
  1. बाद में सत्यापित करें कि आपके s3 बाल्टी में प्रासंगिक डेटा है

-1

यह एक वॉल्यूम-फ़ोल्डर-बैकअप तरीका है।
यदि आपके पास डॉकटर रजिस्ट्री इन्फ्रा है, तो यह विधि बहुत सहायक है।
यह ज़िप फ़ाइल को आसानी से स्थानांतरित करने के लिए डॉक रजिस्ट्री का उपयोग करता है।

#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

दूसरे सर्वर में

#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"

अपनी छवि को चलाएं जो इस वॉल्यूम फ़ोल्डर का उपयोग करता है।
आप एक ऐसी छवि बना सकते हैं जिसमें एक रन-इमेज और एक वॉल्यूम ज़िप फ़ाइल दोनों आसानी से हों।
लेकिन मुझे विभिन्न कारणों (छवि आकार, प्रवेश आदेश, ..) के लिए अनुशंसित नहीं किया गया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.