डॉकर वॉल्यूम बैकअप और पुनर्स्थापना


23

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

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

मैं उसी ब्लॉग पोस्ट से जानता हूं कि मुझे वॉल्यूम में फ़ाइलों को एक्सेस करने के लिए होस्ट माउंट की आवश्यकता नहीं है , मैं यह docker inspectपता लगाने के लिए उपयोग कर सकता हूं कि फाइलें कहां हैं।

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

जवाबों:


24

आप सही हे। चूंकि आपके पास स्वयं के वॉल्यूम के साथ कई कंटेनर हो सकते हैं, इसलिए आपको ट्रैक रखने की आवश्यकता है कि कौन सा वॉल्यूम किस कंटेनर से मेल खाता है। ऐसा कैसे करें जो आपके सेटअप पर निर्भर करता है: मैं डेटा कंटेनर के लिए -data नाम का उपयोग करता हूं, इसलिए यह स्पष्ट है कि किस कंटेनर में एक छवि है। इस तरह इसे वापस किया जा सकता है:

VOLUME=`docker inspect $NAME-data | jq '.[0].Volumes["/path/in/container"]'`
tar -C $VOLUME . -czvf $NAME.tar.gz

अब आपको बस अपनी छवि को फिर से बनाने और अपने डेटा कंटेनर को फिर से बनाने की आवश्यकता है:

cat $NAME.tar.gz | docker run -name $NAME-data -v /path/in/container \
                              -i busybox tar -C /path/int/container -xzf -

तो इसका मतलब है कि आपको बैकअप की आवश्यकता है:

  • Dockerfile
  • आयतन
  • कंटेनर में मात्रा पथ
  • कंटेनर का नाम वॉल्यूम से संबंधित है

अपडेट: इस बीच मैंने बैकअप कंटेनरों और उनके वॉल्यूम (ओं) (कंटेनर (एस)) के लिए एक उपकरण बनाया: https://github.com/discordianfish/docker-backup और एक बैकअप छवि जो बैकअप बना सकती है और उन्हें धक्का दे सकती है s3: https://github.com/discordianfish/docker-lloyd


यह एक उचित समझौता है, धन्यवाद। क्या डेटा के लिए एक अलग कंटेनर का उपयोग करने का एक स्पष्ट लाभ है?
fcoelho

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

मेरे पास यह त्रुटि अमान्य विकल्प है - z। ऐसा लगता है कि व्यस्त बॉक्स में डिफ़ॉल्ट टार इस का समर्थन नहीं करता है।
दज़ुंग गुयेन

6
jq बहुत शांत है, लेकिन निर्भरता का परिचय देने के बजाय, इस docker inspectतरह से टेम्प्लेटिंग में निर्मित एस का उपयोग क्यों नहीं किया जाता है VOLUME=$( docker inspect -f '{{index .Volumes "/path/in/container"}}' "${NAME}-data" ):। यह शायद यह भी याद दिलाता है कि लोगों को इस तरह से फ़ाइलों का बैकअप लेने की उम्मीद नहीं है, जबकि वे सक्रिय रूप से उपयोग में हैं (जैसे डेटाबेस)।
mc0e

2
डॉकर 1.8 में प्रारूप बदल गया है - Volumesचला गया है और Mountsइसके बजाय विभिन्न संरचनाएं हैं। हमें rangeउस माउंट पॉइंट को खोजने के लिए थोड़ा और अधिक काम करने की ज़रूरत है जिसमें हम रुचि रखते हैंVOLUME=$(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/path/in/container" }}{{ .Source }}{{ end }}{{ end }}' "${NAME}-data")
जारेक प्रोज़गोडकी

5

नए डॉकर (परीक्षण किए गए 1.9.1, build 9894698) में आप cpकमांड का उपयोग कर सकते हैं ।

यहाँ एक उदाहरण है कि कंटेनर से होस्ट तक निर्देशिका को कैसे कॉपी किया जाए:

docker cp wordpress:/var/www/html backups/wordpress.`date +"%Y%m%d"`/

यहाँ एक उदाहरण है कि एक निर्देशिका को कंटेनर से किसी tarफ़ाइल में कैसे कॉपी किया जाए :

docker cp wordpress:/var/www/html - > backups/wordpress.`date +"%Y%m%d"`.tar

अंतिम लेकिन कम से कम एक उदाहरण नहीं है कि एक निर्देशिका को कंटेनर से किसी tar.gzफ़ाइल में कैसे कॉपी किया जाए :

docker cp wordpress:/var/www/html - | gzip > backups/wordpress.`date +"%Y%m%d"`.tar.gz

2
docker cpनेटवर्क पर सब कुछ भेजता है। यह कुछ ऐसा है जिससे आप विशेष रूप से बचना चाहते हैं यदि आपका डॉकटर वॉल्यूम पहले से ही एक btrfs वॉल्यूम है।
जारेक प्रोजगोडकी

2
प्रश्न में बैकअप और पुनर्स्थापना का उल्लेख है । इस उत्तर का उपयोग करके एक पुनर्स्थापना उदाहरण docker cpअच्छा होगा।
मैडमाइक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.