Docker Desktop का उपयोग कर रहे Mac पर, एक Compose named volume को किसी अस्थायी कंटेनर में माउंट करके और अपने Mac के फ़ोल्डर में एक tar संग्रह लिखकर उसका बैकअप लें। वॉल्यूम का नाम जाँचें, उसमें लिखने वाली सेवाओं को रोकें, संग्रह बनाएँ, और कंटेनर हटाने से पहले पुष्टि करें कि फ़ाइल मौजूद है। एक सामान्य docker compose down नामित वॉल्यूम को बनाए रखता है; docker compose down --volumes योग्य प्रोजेक्ट वॉल्यूम को हटा देता है, इसलिए बैकअप पूरा होने तक इसे न चलाएं।

1. Compose वॉल्यूम और उसके माउंट पाथ की पहचान करें

Terminal में, प्रोजेक्ट की Compose फ़ाइल वाले डायरेक्टरी पर जाएं। सर्विस माउंट खोजें, जैसे db-data:/var/lib/postgresql/data, और volumes: के तहत इसकी मिलान करने वाली शीर्ष-स्तरीय घोषणा देखें। बाईं ओर, db-data, Compose कुंजी है; कोलन के बाद का कंटेनर पाथ वह जगह है जहाँ एप्लिकेशन डेटा देखता है। Compose प्रोजेक्ट प्रीफ़िक्स के साथ वास्तविक Docker वॉल्यूम बना सकता है, जबकि एक कॉन्फ़िगर किया गया name: इसे एक कस्टम नाम दे सकता है। Docker का Compose वॉल्यूम संदर्भ उन नामकरण नियमों का वर्णन करता है।

वर्तमान Compose प्रोजेक्ट द्वारा उपयोग किए जाने वाले वॉल्यूम सूचीबद्ध करें:

docker compose volumes

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

2. संग्रह बनाने से पहले राइट्स (लिखना) रोकें

फ़ाइलें कॉपी होने के दौरान यदि डेटाबेस बदल रहा हो, तो फ़ाइल सिस्टम संग्रह आवश्यक रूप से एक सुसंगत (कंसिस्टेंट) डेटाबेस बैकअप नहीं होता है। पहले एप्लिकेशन को साफ़-सुथरे ढंग से रोकें; Compose स्टैक के लिए, docker compose stop कंटेनरों और वॉल्यूम को बनाए रखते हुए उसकी सेवाओं को रोक देता है। यदि डेटाबेस में कोई एप्लिकेशन-विशिष्ट डंप या बैकअप प्रक्रिया है, तो लेन-देन-स्तरीय स्थिरता (ट्रांज़ैक्शन-लेवल कंसिस्टेंसी) आवश्यक होने पर उसका उपयोग करें, फिर यदि आपको फ़ाइल-स्तरीय प्रतिलिपि की आवश्यकता हो तो वॉल्यूम संग्रह भी बनाएं।

इस चरण में docker compose down --volumes से बचें। Compose दस्तावेज़ बताते हैं कि down डिफ़ॉल्ट रूप से प्रोजेक्ट के कंटेनरों और नेटवर्क को हटाता है, जबकि --volumes पात्र नामित और अनाम वॉल्यूम को भी हटा देता है। बाहरी वॉल्यूम down द्वारा नहीं हटाए जाते हैं। Docker का compose down संदर्भ इस अंतर को समझाता है।

3. Mac फ़ोल्डर में tar बैकअप बनाएं

निम्नलिखित उदाहरण मानता है कि वास्तविक Docker वॉल्यूम का नाम myproject_db-data है। उस मान को आपके द्वारा पहचाने गए सटीक नाम से बदलें। यह वर्तमान Mac डायरेक्टरी में db-data-backup.tar सहेजता है। Docker Desktop लिनक्स VM के अंदर Docker Engine चलाता है, इसलिए नामित वॉल्यूम का डेटा Docker द्वारा प्रबंधित किया जाता है; यह विधि Linux VM स्टोरेज पाथ पर निर्भर रहने के बजाय एक अस्थायी कंटेनर के माध्यम से इसे कॉपी करती है। Docker की वॉल्यूम गाइड सहायक-कंटेनर और tar दृष्टिकोण का दस्तावेजीकरण करती है, और Docker Desktop के Mac सेटिंग्स दस्तावेज़ Linux VM और होस्ट फ़ाइल साझाकरण का वर्णन करते हैं।

volume_name='myproject_db-data'
backup_dir="$PWD"
backup_file='db-data-backup.tar'

docker run --rm \
  --mount "type=volume,source=$volume_name,target=/source,readonly" \
  --mount "type=bind,source=$backup_dir,target=/backup" \
  alpine sh -c 'tar -C /source -cf "/backup/'"$backup_file"'" .'

संग्रह $PWD द्वारा दर्शाई गई डायरेक्टरी में लिखा जाता है, इसलिए कमांड चलाने से पहले पर्याप्त खाली स्थान वाला स्थान चुनें। कॉपी करने के दौरान आकस्मिक परिवर्तनों को रोकने के लिए सहायक कंटेनर में वॉल्यूम को केवल-पढ़ने (read-only) के रूप में माउंट किया जाता है; यह स्वयं अन्य कंटेनरों को लिखने से नहीं रोकता है, यही कारण है कि पहले राइटर्स को रोकना महत्वपूर्ण है। इस कमांड के लिए आवश्यक है कि Docker Desktop चल रहा हो और Mac फ़ोल्डर बाइंड माउंट के लिए सुलभ हो। यदि माउंट विफल हो जाता है, तो फ़ोल्डर के लिए Docker Desktop के फ़ाइल-शेयरिंग एक्सेस की जाँच करें।

जाँचें कि संग्रह मौजूद है और उसका आकार उचित रूप से गैर-शून्य (non-zero) है:

ls -lh "$backup_file"

यह पुष्टि करता है कि फ़ाइल बनाई गई थी, यह नहीं कि इसकी सामग्री एक पुनर्स्थापना योग्य (restorable) एप्लिकेशन बैकअप बनाती है। संग्रह को Docker-प्रबंधित वॉल्यूम के बाहर कहीं रखें, और डेटा हटाने से पहले इसे अपने सामान्य बैकअप गंतव्य पर कॉपी करने पर विचार करें।

4. अपने लक्ष्य को सत्यापित करने के बाद ही कंटेनर हटाएं

जब संग्रह तैयार हो जाए, तो प्रोजेक्ट के कंटेनरों को इसके साथ हटाएं:

docker compose down

यह डिफ़ॉल्ट रूप से नामित वॉल्यूम को बनाए रखता है। यदि आपका इरादा वॉल्यूम को भी हटाने का है, तो पहले प्रोजेक्ट और वॉल्यूम नामों को फिर से सत्यापित करें, फिर केवल तभी docker compose down --volumes का उपयोग करें जब आप उस डेटा को हटाने के लिए तैयार हों। कस्टम-नामित या बाहरी वॉल्यूम का लाइफ़साइकिल व्यवहार अलग हो सकता है; यह मानने के बजाय कि विकल्प हर वॉल्यूम को प्रभावित करता है, Compose परिभाषा और Docker के कमांड संदर्भ की जाँच करें।

पुनर्स्थापना (रिस्टोर) संबंधी विचार

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

स्रोत