डिफ़ॉल्ट रूप से, डॉकर "/var/lib/docker" के अंदर सब कुछ स्टोर करता है, जो रूट (/) पार्टीशन पर स्थित है। जैसे-जैसे आपके कंटेनर बढ़ते हैं, यह फ़ोल्डर तेजी से भर सकता है। यदि आप देखते हैं कि आपका सर्वर धीमा चल रहा है, डेटा सेव करने में विफल हो रहा है, या बेतरतीब ढंग से क्रैश हो रहा है, तो शायद ऐसा इसलिए है क्योंकि रूट पार्टीशन स्पेस से बाहर हो गया है। इस गाइड में, हम आपको अपने डॉकर वॉल्यूम (या डेटा) को दूसरे पार्टीशन पर ले जाने और रूट पार्टीशन में स्पेस खाली करने के तरीकों के बारे में बताएंगे।
विषय सूची
डॉकर वॉल्यूम को दूसरे पार्टीशन पर ले जाने की आवश्यकता क्यों है
डॉकर कंटेनर अक्सर बड़ी मात्रा में लगातार डेटा उत्पन्न करते हैं। समय के साथ, यह डेटा आपके रूट पार्टीशन के स्टोरेज स्पेस का उपभोग कर सकता है। डॉकर वॉल्यूम को दूसरे पार्टीशन पर ले जाने से आपको मदद मिलती है:
- रूट फाइलसिस्टम पर स्पेस खाली करें
- डिस्क थकावट के कारण सिस्टम क्रैश को रोकें
- बड़े एप्लिकेशन डेटा को समर्पित स्टोरेज पर स्टोर करें
- समग्र स्टोरेज प्रबंधन में सुधार करें
उदाहरण के लिए, MySQL या PostgreSQL जैसे डेटाबेस कंटेनर वॉल्यूम के भीतर गीगाबाइट्स डेटा स्टोर कर सकते हैं। उन वॉल्यूम को एक बड़े समर्पित पार्टीशन पर ले जाने से सिस्टम स्थिरता बनाए रखने में मदद मिल सकती है।
डॉकर वॉल्यूम डायरेक्टरी का पता लगाएं
डॉकर वॉल्यूम को ले जाने से पहले, हमें पहले यह पता लगाना होगा कि डॉकर इसे सिस्टम पर कहां स्टोर करता है। सभी उपलब्ध डॉकर वॉल्यूम सूचीबद्ध करने के लिए निम्न कमांड चलाएं:
docker volume ls
वॉल्यूम नाम की पहचान करने के बाद, उस विशिष्ट वॉल्यूम का निरीक्षण करने के लिए नीचे दी गई कमांड चलाएं:
docker volume inspect volume_name
यह कमांड वॉल्यूम के बारे में विस्तृत जानकारी प्रदर्शित करती है। आउटपुट में, Mountpoint फ़ील्ड देखें। यह वह सटीक डायरेक्टरी दिखाता है जहां डॉकर वॉल्यूम डेटा स्टोर करता है।
पूरे डॉकर डेटा रूट को ले जाएं
डॉकर डेटा को अलग पार्टीशन पर ले जाने का एक तरीका पूरे डॉकर स्टोरेज डायरेक्टरी को रीलोकेट करना है, जिसमें वॉल्यूम, इमेज, कंटेनर, और लॉग शामिल हैं। यदि "/var/lib/docker" भर रहा है तो यह सबसे साफ और सुरक्षित विधि है।
इस उद्देश्य के लिए, पहले, आपको डॉकर सेवा को रोकना होगा ताकि माइग्रेशन के दौरान कोई फाइल न बदले:
sudo systemctl stop docker
अगला, आप rsync कमांड का उपयोग करके डॉकर डेटा कॉपी कर सकते हैं:
sudo rsync -avxP /var/lib/docker/ /path/to/new/partition/docker-data/
नोट: "/path/to/new/partition/" को उस नए पार्टीशन के पथ में बदलें जहां आप फ़ोल्डर को माइग्रेट करना चाहते हैं।
यह कमांड अनुमतियों को संरक्षित करते हुए डॉकर डायरेक्टरी को कॉपी करती है और ट्रांसफर के दौरान प्रगति दिखाती है।
वैकल्पिक रूप से, आप निम्न कमांड का उपयोग कर सकते हैं, जो हार्ड लिंक, ACLs, और एक्सटेंडेड एट्रिब्यूट्स जैसे अतिरिक्त डॉकर एट्रिब्यूट्स को संरक्षित करता है:
sudo rsync -aHAX --info=progress2 /var/lib/docker/ /mnt/docker-data/
यह संस्करण तब अनुशंसित है जब डॉकर डेटा माइग्रेट कर रहे हों क्योंकि यह अधिक फाइलसिस्टम मेटाडेटा को संरक्षित करता है और एक स्पष्ट समग्र प्रगति संकेतक प्रदान करता है।
इसके बाद, इसे हटाने से पहले पुराने डेटा डायरेक्टरी का नाम बदलकर बैकअप लें।
sudo mv /var/lib/docker /var/lib/docker.old
अब, इस कमांड के साथ डेमन फ़ाइल खोलकर डॉकर के कॉन्फ़िगरेशन को अपडेट करें:
sudo nano /etc/docker/daemon.json
इस फ़ाइल में निम्न सामग्री जोड़ें:
{ "data-root": "/path/to/new/partition/docker-data" }
अंत में, sudo systemctl start docker के साथ डॉकर को पुनरारंभ करें। इसके बाद, आप निम्न कमांड के साथ नई डॉकर डेटा डायरेक्टरी की पुष्टि कर सकते हैं:
docker info | grep "Docker Root Dir"
यदि सब कुछ ठीक है, तो पुराना बैकअप हटा दें:
sudo rm -rf /var/lib/docker.old
डॉकर डेस्कटॉप (GUI विधि) का उपयोग करके सभी डॉकर डेटा ले जाएं
डॉकर डेस्कटॉप आपको डिस्क इमेज लोकेशन बदलकर सभी डॉकर डेटा को दूसरे पार्टीशन पर ले जाने की अनुमति देता है। यह विकल्प डॉकर द्वारा संग्रहीत सब कुछ स्थानांतरित करता है, जिसमें इमेज, कंटेनर, वॉल्यूम, और बिल्ड कैश शामिल हैं, आपके सिस्टम पर एक नए स्थान पर।
ऐसा करने के लिए, डॉकर डेस्कटॉप खोलें और Settings पर नेविगेट करें, Resources → Advanced पर जाएं, और फिर Disk Image Location विकल्प ढूंढें।
Browse पर क्लिक करें और नए पार्टीशन या ड्राइव पर एक फ़ोल्डर चुनें जहां आप डॉकर को अपना डेटा स्टोर करना चाहते हैं, जैसे "/mnt/newdisk/docker-data"। नया स्थान चुनने के बाद, Apply & Restart पर क्लिक करें। डॉकर डेस्कटॉप तब पुनरारंभ होगा और सभी मौजूदा डॉकर डेटा को चयनित पार्टीशन पर ले जाएगा।
नोट: यह सभी डॉकर डेटा को ले जाता है। वर्तमान में व्यक्तिगत वॉल्यूम को ले जाने के लिए कोई GUI विकल्प नहीं है।
केवल विशिष्ट वॉल्यूम डेटा को रीलोकेट करें
आप एक विशिष्ट डॉकर वॉल्यूम को दूसरे पार्टीशन पर ले जा सकते हैं और इसे होस्ट बाइंड माउंट के माध्यम से अपने कंटेनर के साथ उपयोग कर सकते हैं। यह दृष्टिकोण सरल, सुरक्षित, और बैकअप करने में आसान है। वॉल्यूम को ले जाने से पहले, उस कंटेनर को रोकें जो इसका उपयोग करता है:
docker stop container_name
इसके बाद, सभी डेटा को सुरक्षित रूप से अपने नए डायरेक्टरी में ले जाने के लिए rsync का उपयोग करें:
sudo rsync -a /var/lib/docker/volumes/my_volume/_data/ /data/docker/my_volume/
यह पुराने वॉल्यूम से सब कुछ "/data/docker/my_volume" पर कॉपी करेगा।
अपनी "docker-compose.yml" फ़ाइल को एडिट करें ताकि डॉकर-मैनेज्ड वॉल्यूम के बजाय बाइंड माउंट का उपयोग किया जाए:
services: my_service: volumes: - /data/docker/my_volume:/container/path
/container/path को कंटेनर के अंदर उस पथ से बदलें जहां वॉल्यूम मूल रूप से माउंट किया गया था। फिर निम्न कमांड के साथ कंटेनर को पुनः तैनात करें:
docker-compose up -d
निष्कर्ष
डॉकर वॉल्यूम या पूरे डॉकर डेटा डायरेक्टरी को एक बड़े पार्टीशन पर ले जाने से आपके रूट फाइलसिस्टम पर स्पेस खाली होता है और आपका सर्वर स्थिर रहता है। कंटेनर डेटा हानि के किसी भी जोखिम के बिना सुचारू रूप से चलते रहते हैं, और भविष्य में स्टोरेज प्रबंधन बहुत आसान हो जाता है।
यदि पूरे डॉकर डायरेक्टरी को रीलोकेट करना संभव नहीं है, तो आप अभी भी अन्य विधियों का उपयोग करके स्पेस पुनः प्राप्त कर सकते हैं। इनमें अप्रयुक्त कंटेनर, इमेज, नेटवर्क, और कैश को docker system prune या व्यक्तिगत prune कमांड के साथ प्रून करना शामिल है, और डॉकर के रनटाइम को प्रभावित किए बिना बड़े डायरेक्टरी को स्थानांतरित करने के लिए लिनक्स बाइंड माउंट का उपयोग करना शामिल है।