Docker Prune: व्यावहारिक उदाहरणों सहित सम्पूर्ण मार्गदर्शिका
एक ही शेल कमांड से अनुपयोगी कंटेनर, इमेज, वॉल्यूम और नेटवर्क सुरक्षित रूप से हटाएँ। बेकार Docker संसाधन हटाकर सिस्टम को व्यवस्थित रखें और डिस्क स्पेस वापस पाएं।
यदि आप रोज़ Docker के साथ काम करते हैं, तो आप जानते हैं कि यह कितनी जल्दी डिस्क स्पेस खा सकता है.
समय के साथ, आपके सिस्टम में अनुपयोगी इमेज, कंटेनर, वॉल्यूम और नेटवर्क जमा हो जाते हैं। ये ज्यादातर निष्क्रिय रहते हैं, कीमती स्टोरेज घेरते हैं, और संभव है कि आपके वर्तमान प्रोजेक्ट पर काम करने में बाधा डालें। सौभाग्य से, Docker में अंतर्निहित क्लीनअप कमांड होते हैं जो अनावश्यक संसाधनों को आसानी से हटा देते हैं.
ये क्लीनअप कमांड docker prune परिवार का हिस्सा हैं, और आज आप इनके बारे में विस्तार से जानेंगे। ये जल्द ही डिस्क स्पेस खाली करने के आपके पसंदीदा उपाय बन जाएंगे.
आइए व्यावहारिक उदाहरणों में जाने से पहले एक संक्षिप्त अवलोकन से शुरू करते हैं.
क्या आप Docker में नए हैं? जल्दी गति पकड़ने के लिए डेटा प्रोफेशनल्स हेतु शुरू से Docker सीखने की हमारी मार्गदर्शिका देखें.
Docker Prune क्या है?
"Docker Prune" शब्द आम तौर पर उन कमांडों के सेट को संदर्भित करता है जो अनुपयोगी और अनावश्यक Docker संसाधन हटाने में मदद करते हैं.
समय के साथ, खासकर यदि आप कई प्रोजेक्ट्स पर काम करते हैं, तो आप असंख्य इमेज बनाएंगे, कंटेनर चलाएंगे, और वॉल्यूम व नेटवर्क सेट करेंगे। ये सब आपके सिस्टम पर इकट्ठा होते जाते हैं और काफी डिस्क स्पेस घेर लेते हैं। docker prune का उद्देश्य इसी अव्यवस्था को साफ करना और स्टोरेज वापस पाना है.
यह कहा गया, docker prune सतही दिखने से कहीं ज्यादा है.
यह केवल एक कमांड नहीं है जिसे आप चला दें। चल तो सकते हैं, पर कभी-कभी आपको यह नियंत्रित करने के लिए सूक्ष्म नियंत्रण चाहिए कि क्या हटेगा। यहीं यह लेख काम आता है। यह आपको प्रभावी ढंग से प्रूनिंग प्रबंधित करना सिखाएगा, ताकि आप केवल वही हटाएँ जो आप चाहते हैं, और किसी सुरक्षित परिवेश में अभ्यास कर सकें जिससे अनजाने में महत्वपूर्ण डेटा न हट जाए.
ध्यान देने योग्य बात यह भी है कि प्रून कमांड केवल वे संसाधन हटाते हैं जो सक्रिय रूप से उपयोग में नहीं हैं। चल रहे कंटेनरों द्वारा संदर्भित इमेज, वॉल्यूम और नेटवर्क डिलीट नहीं होंगे। दूसरे शब्दों में, प्रूनिंग सक्रिय वर्कलोड में दखल नहीं देती.
अगले खंड में, हम आपको विभिन्न प्रकार की प्रूनिंग कमांड्स से परिचित कराएँगे और बताएँगे कि वे आपके वर्कफ़्लो में कैसे फिट होती हैं.
सभी Docker Prune कमांड्स, व्यावहारिक उदाहरणों सहित
Docker कई prune कमांड प्रदान करता है जो आपको अनुपयोगी संसाधनों को अलग-अलग या एक साथ साफ करने देते हैं। इस खंड में, आप इनके बारे में जानेंगे—सिद्धांत और प्रायोगिक उदाहरण दोनों तरीकों से.
docker system prune
यह डिस्क स्पेस पुनः प्राप्त करने के लिए सबसे व्यापक कमांड है। यह एक ही ऑपरेशन में सभी अनुपयोगी कंटेनर, नेटवर्क, इमेज और बिल्ड कैश हटा देता है.
यदि आप एक ही कमांड से जल्दी डिस्क स्पेस खाली करना चाहते हैं, तो यही उपयोग करें.
आप docker system prune कमांड में विकल्प पास कर सकते हैं:
-a या --all केवल डैंगलिंग इमेज (जो टैग्ड नहीं हैं या किसी कंटेनर द्वारा संदर्भित नहीं हैं) के बजाय सभी अनुपयोगी इमेज हटाता है.
--filter आपको फ़िल्टर मान निर्दिष्ट करने देता है.
-f या --force पुष्टि प्रॉम्प्ट को स्किप करता है.
--volumes कंटेनर, नेटवर्क, इमेज और बिल्ड कैश के साथ-साथ अनाम वॉल्यूम भी प्रून करता है.
डिफ़ॉल्ट रूप से, docker system prune आपसे पुष्टि मांगता है क्योंकि यह संभावित रूप से विध्वंसकारी ऑपरेशन है:
छवि 1 - Docker system prune की पुष्टि का प्रॉम्प्ट
प्रॉम्प्ट को बायपास कर एक ही कमांड से सभी अनुपयोगी इमेज, कंटेनर, नेटवर्क और वॉल्यूम हटाने के लिए यह चलाएँ:
छवि 2 - एक ही docker system prune कमांड से सब कुछ हटाएँ
लेकिन अगर आपको और अधिक सूक्ष्म नियंत्रण चाहिए तो? आइए उसे समझते हैं।
docker container prune
सीधे शब्दों में, यह कमांड सभी रुके हुए कंटेनर हटाता है।
रुके हुए कंटेनर तब तक सिस्टम पर बने रहते हैं जब तक उन्हें मैन्युअली हटाया न जाए। वे डिस्क स्पेस घेर सकते हैं और तब तक दिखना मुश्किल होते हैं जब तक कि आप Docker Desktop डैशबोर्ड जैसा टूल इस्तेमाल न करें।
docker system prune की तरह, यह कमांड भी विकल्प सपोर्ट करता है:
--filter आपको यह नियंत्रित करने हेतु की-वैल्यू पेयर्स निर्दिष्ट करने देता है कि कौन से कंटेनर हटें।
-f या --force पुष्टि प्रॉम्प्ट को स्किप करता है।
यहाँ नॉन-रनिंग कंटेनरों की सूची है:
छवि 3 - नॉन-रनिंग कंटेनरों की सूची
code-server (और अन्य रुके हुए कंटेनर) हटाने के लिए यह चलाएँ:
यह आपसे पुष्टि नहीं मांगेगा, और कुछ ही सेकंड में आपको ऐसा आउटपुट दिखेगा:
छवि 4 - कंटेनर प्रूनिंग आउटपुट संदेश
और बस, अब कोई रुका हुआ कंटेनर नहीं बचा:
छवि 5 - नॉन-रनिंग कंटेनरों की सूची (2)
अब, अनुपयोगी इमेज की बारी।
docker image prune
पिछली कमांड के समान, docker image prune अनुपयोगी इमेज हटाता है।
डिफ़ॉल्ट रूप से, यह केवल डैंगलिंग इमेज हटाता है—यानी ऐसी इमेज जो अनटैग्ड हैं और किसी कंटेनर से संबद्ध नहीं हैं। आप एक वैकल्पिक फ्लैग का उपयोग कर सभी अनुपयोगी इमेज हटवा सकते हैं, न कि सिर्फ डैंगलिंग इमेज।
उपलब्ध विकल्पों की सूची इस प्रकार है
-a या --all केवल डैंगलिंग की बजाय सभी अनुपयोगी इमेज हटाता है।
--filter आपको यह नियंत्रित करने हेतु की-वैल्यू पेयर्स देने देता है कि कौन सी इमेज हटें।
इसके बाद, Docker Desktop में कोई इमेज शेष नहीं रहेगी:
छवि 8 - Docker इमेज की सूची (2)
अगला, अनुपयोगी वॉल्यूम्स को संभालते हैं।
docker volume prune
जैसा कि नाम से स्पष्ट है, docker volume prune कमांड सभी अनुपयोगी लोकल वॉल्यूम हटाता है। दूसरे शब्दों में, यह ऐसे वॉल्यूम डिलीट करता है जिन्हें कोई कंटेनर संदर्भित नहीं करता।
डिफ़ॉल्ट रूप से, कमांड केवल अनाम वॉल्यूम हटाता है—यानी ऐसे बिना नाम के वॉल्यूम जिन्हें Docker कंटेनर स्टार्ट होने पर बनाता है। स्पष्ट रूप से नामित वॉल्यूम हटाने के लिए आपको एक अतिरिक्त विकल्प पास करना होगा।
आपके पास उपलब्ध विकल्प ये हैं:
-a या --all केवल अनाम वॉल्यूम के बजाय सभी अनुपयोगी वॉल्यूम हटाता है।
--filter आपको यह नियंत्रित करने हेतु की-वैल्यू पेयर्स निर्दिष्ट करने देता है कि कौन से वॉल्यूम हटें।
-f या --force पुष्टि प्रॉम्प्ट को स्किप करता है।
हमारे सिस्टम पर docker-compose.yml फ़ाइल से बना एक यूज़र-क्रिएटेड वॉल्यूम है:
अंत में, अनुपयोगी नेटवर्क हटाने का तरीका देखते हैं।
docker network prune
जब Docker कंटेनर आपस में कम्युनिकेट करते हैं, तो वे अक्सर यूज़र-परिभाषित नेटवर्क का उपयोग करते हैं। लेकिन जब वे कंटेनर हटा दिए जाते हैं, तो उनके नेटवर्क प्रायः सिस्टम पर बने रह जाते हैं।
docker network prune कमांड उन नेटवर्क को हटाता है जिन्हें अब कोई कंटेनर उपयोग नहीं कर रहा।
अन्य प्रून कमांड्स की तरह, इसमें भी कुछ विकल्प होते हैं:
--filter आपको यह नियंत्रित करने के लिए की-वैल्यू पेयर्स निर्दिष्ट करने देता है कि कौन से नेटवर्क हटें।
-f या --force पुष्टि प्रॉम्प्ट को स्किप करता है।
इमेज, कंटेनर या वॉल्यूम के विपरीत, आप Docker Desktop के माध्यम से नेटवर्क को दृश्य रूप से निरीक्षण नहीं कर सकते, इसलिए आपको कमांड लाइन से काम करना होगा। यहाँ उपलब्ध नेटवर्क की सूची है:
छवि 12 - Docker नेटवर्क की सूची
डिफ़ॉल्ट Docker इंस्टॉलेशन से संबद्ध नहीं सभी नेटवर्क हटाने के लिए यह चलाएँ:
पहले चल रहे कंटेनरों से संबद्ध कोई भी नेटवर्क अब हट चुके हैं:
छवि 14 - Docker नेटवर्क की सूची
हालाँकि, ध्यान दें कि शेष तीन नेटवर्क Docker के सही ढंग से काम करने के लिए आवश्यक हैं और हटाए नहीं जा सकते।
और बस, docker prune कमांड्स के बेसिक उपयोग के लिए इतना ही! आगे, हम उन्नत विषयों को कवर करेंगे—जैसे इन्हें सुरक्षित रूप से उपयोग करना और प्रोडक्शन व संवेदनशील परिवेशों के लिए सर्वोत्तम प्रथाएँ।
Docker Prune का सुरक्षित उपयोग
docker prune कमांड्स डिस्क स्पेस जल्दी वापस पाने में मदद करते हैं, लेकिन इन्हें सावधानीपूर्वक उपयोग करना चाहिए, खासकर प्रोडक्शन परिवेश में.
अनजाने में महत्वपूर्ण कंटेनर, इमेज या वॉल्यूम हटाने से डेटा हानि हो सकती है और महत्वपूर्ण वर्कफ़्लो बाधित हो सकते हैं। इसे रोकने के लिए, किसी भी प्रून कमांड को चलाने से पहले यह समझना बेहतर है कि क्या हटाया जाएगा.
यह खंड बताता है कि docker prune सुरक्षित रूप से चलाते समय कौन सी प्रमुख सावधानियाँ लेनी चाहिए.
क्या हटाया जाएगा, यह समझना
prune कमांड्स ऐसे संसाधन हटाने के लिए डिज़ाइन किए गए हैं जो सक्रिय उपयोग में नहीं हैं.
उदाहरण के लिए, docker image prune केवल डैंगलिंग इमेज हटाता है, और docker volume prune केवल ऐसे वॉल्यूम हटाता है जो किसी कंटेनर से अटैच नहीं हैं। हालाँकि, -a -f जैसे विकल्प जोड़ने पर सभी इमेज या वॉल्यूम बिना पुष्टि के हट जाएँगे.
इसके अलावा, जटिल परिवेशों में डिपेंडेंसियाँ नज़रअंदाज़ होना आसान है, इसलिए प्रूनिंग से पहले दोबारा जाँच लेना हमेशा अच्छा अभ्यास है.
किसी भी prune कमांड को चलाने से पहले, आपको अपने सिस्टम का निरीक्षण करना चाहिए कि कौन से संसाधन वर्तमान में उपयोग में हैं। ऐसा करने के कई तरीके हैं, और हम इस खंड में सबसे सामान्य तरीकों की पड़ताल करेंगे.
इस कमांड का उपयोग करके सभी कंटेनर, रुके हुए सहित, देखें:
इन आउटपुट्स की सावधानीपूर्वक समीक्षा करें ताकि गलती से कोई अहम संसाधन डिलीट न हो जाए.
सुरक्षा के लिए ड्राई रन
दुर्भाग्य से, Docker में अभी भी प्रूनिंग कमांड का बिल्ट-इन ड्राई रन विकल्प नहीं है, भले ही इसे सालों पहले अनुरोध किया गया था.
इसी कारण, आपको प्रून कमांड चलाने से पहले पिछले खंड में सूचीबद्ध कमांड्स का उपयोग कर संसाधनों का मैन्युअल निरीक्षण करना होगा.
यदि आप ऐसे संवेदनशील परिवेश में काम कर रहे हैं जहाँ डेटा स्थायित्व महत्वपूर्ण है, तो वॉल्यूम को प्रभावित करने वाले प्रून कमांड्स चलाने से पहले हमेशा बैकअप बनाना चाहिए.
बेशक, ये एहतियाती कदम हैं, लेकिन हमें उम्मीद है कि जल्द ही ड्राई-रन विकल्प आएगा।
Docker Prune के लिए सर्वोत्तम प्रथाएँ
अपने Docker परिवेश को अनावश्यक अव्यवस्था से मुक्त रखने के लिए, prune कमांड्स को नियमित रूप से चलाना महत्वपूर्ण है—संभव हो तो उन्हें स्वचालित भी करें.
यह खंड प्रोडक्शन परिवेश में docker prune कमांड्स चलाने की सर्वोत्तम प्रथाएँ बताता है.
docker prune का नियमित उपयोग करें
समय के साथ, Docker अनुपयोगी इमेज, रुके हुए कंटेनर और अनावश्यक वॉल्यूम इकट्ठा करता है—जो सभी काफी डिस्क स्पेस लेते हैं.
प्रूनिंग कमांड्स को नियमित रूप से चलाने से आपका परिवेश साफ रहता है और अत्यधिक डिस्क उपयोग से बचाव होता है। आपको इन्हें अपने मेंटेनेंस शेड्यूल का हिस्सा बनाना चाहिए.
हर कुछ हफ्तों में एक बार शुरूआत के लिए अच्छा है, लेकिन यदि आपका सेटअप बार-बार कंटेनर बनाता और हटाता है, तो और अधिक आवृत्ति पर विचार करें.
प्रोडक्शन में सावधानी बरतें
प्रोडक्शन परिवेश में कोई भी काम अतिरिक्त सावधानी मांगता है, और Docker प्रूनिंग भी अपवाद नहीं है.
ज़रा-सी असावधानी डाउनटाइम या डेटा हानि का कारण बन सकती है—और आप उसके ज़िम्मेदार नहीं होना चाहेंगे। प्रोडक्शन परिवेश में docker prune कमांड्स चलाने से पहले, हमेशा docker ps -a, docker images, और docker volume ls से सिस्टम संसाधनों का निरीक्षण करें, जैसा कि पिछले खंड में समझाया गया है.
इसके अतिरिक्त, सर्वसमावेशी docker system prune की बजाय विशिष्ट प्रूनिंग कमांड्स का उपयोग करना अच्छा विचार है, क्योंकि अनचाही डिलीशन्स से उबरना अपेक्षाकृत आसान हो सकता है.
docker prune स्वचालित करें
एक और अच्छी प्रथा है निर्धारित कार्यों का उपयोग कर docker prune कमांड्स को स्वचालित बनाकर क्लीनअप प्रयासों को सरल करना.
Linux पर, आप क्रॉन जॉब सेट कर सकते हैं ताकि कमांड्स नियमित अंतराल पर चलें, जबकि Windows पर, आप समान ऑटोमेशन के लिए Task Scheduler का उपयोग कर सकते हैं। इससे बिना मैन्युअल हस्तक्षेप के सिस्टम व्यवस्थित बना रहता है। हालांकि, प्रोडक्शन में सुनिश्चित करें कि स्वचालित प्रूनिंग महत्वपूर्ण वर्कलोड में हस्तक्षेप न करे.
उदाहरण के लिए, Linux पर यह क्रॉन जॉब हर रविवार आधी रात को सर्वसमावेशी प्रूनिंग कमांड चलाता है:
docker prune कमांड्स डिस्क स्पेस पुनः प्राप्त करने का एक भरोसेमंद उपाय हैं, लेकिन नए इमेज पुल करने या नए कंटेनर चलाने के लिए पर्याप्त स्पेस सुनिश्चित करने में ये हमेशा पर्याप्त नहीं होते.
इसके अलावा, आप अनजाने में महत्वपूर्ण संसाधन हटा सकते हैं, इसलिए रिकवरी रणनीतियों पर चर्चा करना ज़रूरी है.
इन दोनों विषयों को हम इस खंड में कवर करेंगे.
डिस्क स्पेस की समस्या आना
Docker इमेज बड़ी हो सकती हैं—हाल ही में हमारे पास 13GB से बड़ी एक इमेज थी—और हमें यकीन है कि और भी बड़ी मौजूद हैं। इसलिए, docker prune चलाने के बाद भी आपको लग सकता है कि सिस्टम पर अभी भी डिस्क स्पेस कम है.
यह देखने के लिए कि इमेज, कंटेनर और वॉल्यूम्स द्वारा कुल कितना स्पेस उपयोग हो रहा है, यह कमांड चलाएँ:
docker prune कमांड्स से डिस्क स्पेस वापस लेते समय, -a फ्लैग जोड़ें ताकि केवल डैंगलिंग या अनाम नहीं, सभी इमेज, वॉल्यूम या कंटेनर हटें। बेशक, इस तरीके के संभावित नकारात्मक पक्षों को ध्यान में रखें.
यदि डिस्क स्पेस की समस्या फिर भी बनी रहती है, तो आपका एकमात्र विकल्प उपलब्ध डिस्क स्पेस बढ़ाना है.
अनजाने में हटाने के बाद रिकवरी
रिकवरी कहना आसान है, करना मुश्किल—इसीलिए हम सलाह देते हैं कि वास्तविक कमांड चलाने से पहले प्रूनिंग से क्या हटेगा, यह समझ लें.
फिर भी, यदि आप ऐसी स्थिति में हैं जहाँ आपने गलती से महत्वपूर्ण कंटेनर, इमेज या वॉल्यूम प्रून कर दिए हैं, तो लॉग्स जाँचने से शुरू करें ताकि पता चले क्या हटाया गया था.
pred='process matches ".*(ocker|vpnkit).*" || (process in {"taskgated-helper", "launchservicesd", "kernel"} && eventMessage contains[c] "docker")'
/usr/bin/log stream --style syslog --level=debug --color=always --predicate"$pred"
/usr/bin/log show --debug--info--style syslog --last 30m --predicate"$pred">/tmp/logs.txtसंचालित द्वारा
इन कमांड्स को चलाने से पिछले 30 मिनट के Docker-संबंधित लॉग्स /tmp/logs.txt में सेव हो जाएँगे। आपको इन लॉग्स की जाँच करनी चाहिए ताकि पता चल सके कि कौन से कंटेनर या इमेज डिलीट हुए।
डिलीट हुई इमेज के लिए, आप उन्हें किसी रजिस्ट्री जैसे Docker Hub से दोबारा पुल कर सकते हैं। इस तरह की कमांड काम कर जाएगी:
और डिलीट हुए कंटेनर के लिए, यदि वे स्थायी इमेज पर आधारित थे, तो आप उन्हें हमेशा फिर से बना सकते हैं:
docker run --name<container_name><image_name>संचालित द्वारा
वैकल्पिक रूप से, यदि उपलब्ध हों, तो आप बैकअप से रिस्टोर कर सकते हैं, जिनका उपयोग वॉल्यूम और कंटेनर—दोनों का डेटा रिकवर करने में किया जा सकता है। भविष्य में, डेटा हानि से बचने के लिए वॉल्यूम स्नैपशॉट टूल्स का उपयोग करने पर विचार करें.
हालाँकि, सबसे अच्छी रणनीति यही है कि प्रूनिंग कमांड चलाने से पहले हटने वाले संसाधनों का निरीक्षण करें और तभी आगे बढ़ें जब आपको पूरा यकीन हो कि यह आपके वर्कफ़्लो को प्रभावित नहीं करेगा.
Docker Prune का सारांश
समाप्ति में, docker prune कमांड्स का परिवार डिस्क स्पेस वापस पाने का शक्तिशाली तरीका है, पर इसके साथ यह जोखिम भी है कि आप गलती से ज़रूरी संसाधन हटा दें, जिससे डेटा हानि हो सकती है। यह जोखिम और बढ़ जाता है जब आप वैकल्पिक -a -f फ्लैग्स का उपयोग करते हैं, जो सब कुछ बलपूर्वक हटा देंगे.
फिर भी, सिस्टम को साफ और व्यवस्थित रखने के लिए प्रूनिंग अब भी प्राथमिक तरीका बना रहता है.
आपको बस सावधानी बरतनी है, खासकर प्रोडक्शन परिवेश में। प्रूनिंग से पहले docker ps -a, docker images, और docker volume ls जैसी कमांड्स का उपयोग कर सभी कंटेनर, इमेज और वॉल्यूम सूचीबद्ध करें। प्रूनिंग कमांड तभी चलाएँ जब आपको यकीन हो कि सूचीबद्ध संसाधन हटाने में आपको आपत्ति नहीं (मान लेते हैं कि उन्हें कोई चल रहा कंटेनर उपयोग नहीं कर रहा)।
यदि आप Docker, कंटेनरीकरण और कंटेनर ऑर्केस्ट्रेशन के बारे में और सीखना चाहते हैं, तो DataCamp पर ये कोर्स देखें:
सामान्यतः हाँ, लेकिन सावधानी आवश्यक है। यह केवल उन्हीं संसाधनों को हटाता है जो उपयोग में नहीं हैं, पर बिना जाँच के चलाने पर—खासकर प्रोडक्शन में—गलती से डिलीशन हो सकते हैं। -a -f जैसे अतिरिक्त फ्लैग सभी अनुपयोगी संसाधनों को जबरन हटा देंगे.
docker prune और docker rm में क्या अंतर है?⌄
docker prune किसी विशिष्ट प्रकार के सभी अनुपयोगी संसाधन हटाता है, जबकि docker rm का उपयोग विशिष्ट कंटेनर या इमेज को मैन्युअल रूप से हटाने के लिए होता है।
क्या docker system prune सब कुछ हटा देता है? ⌄
नहीं, docker system prune अनुपयोगी कंटेनर, नेटवर्क, इमेज और बिल्ड कैश हटाता है, पर नामित वॉल्यूम तब तक नहीं हटाता जब तक कमांड के बाद --volumes फ्लैग न दिया जाए.
Docker में डैंगलिंग इमेज क्या है? ⌄
डैंगलिंग इमेज वह होती है जो टैग्ड नहीं है या किसी कंटेनर द्वारा संदर्भित नहीं है। ये प्रायः बिल्ड के दौरान बची मध्यवर्ती इमेज होती हैं और docker image prune कमांड से सुरक्षित रूप से हटाई जा सकती हैं.
क्रोएशिया में स्थित सीनियर डेटा साइंटिस्ट। 700 से अधिक प्रकाशित लेखों के साथ टॉप टेक राइटर, जिनसे 10M+ व्यूज़ प्राप्त हुए। Machine Learning Automation with TPOT के पुस्तक लेखक।
यदि आप रोज़ Docker के साथ काम करते हैं, तो आप जानते हैं कि यह कितनी जल्दी डिस्क स्पेस खा सकता है.
समय के साथ, आपके सिस्टम में अनुपयोगी इमेज, कंटेनर, वॉल्यूम और नेटवर्क जमा हो जाते हैं। ये ज्यादातर निष्क्रिय रहते हैं, कीमती स्टोरेज घेरते हैं, और संभव है कि आपके वर्तमान प्रोजेक्ट पर काम करने में बाधा डालें। सौभाग्य से, Docker में अंतर्निहित क्लीनअप कमांड होते हैं जो अनावश्यक संसाधनों को आसानी से हटा देते हैं.
ये क्लीनअप कमांड
docker pruneपरिवार का हिस्सा हैं, और आज आप इनके बारे में विस्तार से जानेंगे। ये जल्द ही डिस्क स्पेस खाली करने के आपके पसंदीदा उपाय बन जाएंगे.आइए व्यावहारिक उदाहरणों में जाने से पहले एक संक्षिप्त अवलोकन से शुरू करते हैं.
क्या आप Docker में नए हैं? जल्दी गति पकड़ने के लिए डेटा प्रोफेशनल्स हेतु शुरू से Docker सीखने की हमारी मार्गदर्शिका देखें.
Docker Prune क्या है?
"Docker Prune" शब्द आम तौर पर उन कमांडों के सेट को संदर्भित करता है जो अनुपयोगी और अनावश्यक Docker संसाधन हटाने में मदद करते हैं.
समय के साथ, खासकर यदि आप कई प्रोजेक्ट्स पर काम करते हैं, तो आप असंख्य इमेज बनाएंगे, कंटेनर चलाएंगे, और वॉल्यूम व नेटवर्क सेट करेंगे। ये सब आपके सिस्टम पर इकट्ठा होते जाते हैं और काफी डिस्क स्पेस घेर लेते हैं।
docker pruneका उद्देश्य इसी अव्यवस्था को साफ करना और स्टोरेज वापस पाना है.यह कहा गया,
docker pruneसतही दिखने से कहीं ज्यादा है.यह केवल एक कमांड नहीं है जिसे आप चला दें। चल तो सकते हैं, पर कभी-कभी आपको यह नियंत्रित करने के लिए सूक्ष्म नियंत्रण चाहिए कि क्या हटेगा। यहीं यह लेख काम आता है। यह आपको प्रभावी ढंग से प्रूनिंग प्रबंधित करना सिखाएगा, ताकि आप केवल वही हटाएँ जो आप चाहते हैं, और किसी सुरक्षित परिवेश में अभ्यास कर सकें जिससे अनजाने में महत्वपूर्ण डेटा न हट जाए.
ध्यान देने योग्य बात यह भी है कि प्रून कमांड केवल वे संसाधन हटाते हैं जो सक्रिय रूप से उपयोग में नहीं हैं। चल रहे कंटेनरों द्वारा संदर्भित इमेज, वॉल्यूम और नेटवर्क डिलीट नहीं होंगे। दूसरे शब्दों में, प्रूनिंग सक्रिय वर्कलोड में दखल नहीं देती.
अगले खंड में, हम आपको विभिन्न प्रकार की प्रूनिंग कमांड्स से परिचित कराएँगे और बताएँगे कि वे आपके वर्कफ़्लो में कैसे फिट होती हैं.
क्या आप अपने CV या पोर्टफोलियो में Docker जोड़ना चाहते हैं? ये 10 Docker प्रोजेक्ट आइडिया आपको जॉब-रेडी बना देंगे।
सभी Docker Prune कमांड्स, व्यावहारिक उदाहरणों सहित
Docker कई
pruneकमांड प्रदान करता है जो आपको अनुपयोगी संसाधनों को अलग-अलग या एक साथ साफ करने देते हैं। इस खंड में, आप इनके बारे में जानेंगे—सिद्धांत और प्रायोगिक उदाहरण दोनों तरीकों से.docker system prune
यह डिस्क स्पेस पुनः प्राप्त करने के लिए सबसे व्यापक कमांड है। यह एक ही ऑपरेशन में सभी अनुपयोगी कंटेनर, नेटवर्क, इमेज और बिल्ड कैश हटा देता है.
यदि आप एक ही कमांड से जल्दी डिस्क स्पेस खाली करना चाहते हैं, तो यही उपयोग करें.
आप
docker system pruneकमांड में विकल्प पास कर सकते हैं:-aया--allकेवल डैंगलिंग इमेज (जो टैग्ड नहीं हैं या किसी कंटेनर द्वारा संदर्भित नहीं हैं) के बजाय सभी अनुपयोगी इमेज हटाता है.--filterआपको फ़िल्टर मान निर्दिष्ट करने देता है.-fया--forceपुष्टि प्रॉम्प्ट को स्किप करता है.--volumesकंटेनर, नेटवर्क, इमेज और बिल्ड कैश के साथ-साथ अनाम वॉल्यूम भी प्रून करता है.डिफ़ॉल्ट रूप से,
docker system pruneआपसे पुष्टि मांगता है क्योंकि यह संभावित रूप से विध्वंसकारी ऑपरेशन है:छवि 1 - Docker system prune की पुष्टि का प्रॉम्प्ट
प्रॉम्प्ट को बायपास कर एक ही कमांड से सभी अनुपयोगी इमेज, कंटेनर, नेटवर्क और वॉल्यूम हटाने के लिए यह चलाएँ:
छवि 2 - एक ही docker system prune कमांड से सब कुछ हटाएँ
लेकिन अगर आपको और अधिक सूक्ष्म नियंत्रण चाहिए तो? आइए उसे समझते हैं।
docker container prune
सीधे शब्दों में, यह कमांड सभी रुके हुए कंटेनर हटाता है।
रुके हुए कंटेनर तब तक सिस्टम पर बने रहते हैं जब तक उन्हें मैन्युअली हटाया न जाए। वे डिस्क स्पेस घेर सकते हैं और तब तक दिखना मुश्किल होते हैं जब तक कि आप Docker Desktop डैशबोर्ड जैसा टूल इस्तेमाल न करें।
docker system pruneकी तरह, यह कमांड भी विकल्प सपोर्ट करता है:--filterआपको यह नियंत्रित करने हेतु की-वैल्यू पेयर्स निर्दिष्ट करने देता है कि कौन से कंटेनर हटें।-fया--forceपुष्टि प्रॉम्प्ट को स्किप करता है।यहाँ नॉन-रनिंग कंटेनरों की सूची है:
छवि 3 - नॉन-रनिंग कंटेनरों की सूची
code-server(और अन्य रुके हुए कंटेनर) हटाने के लिए यह चलाएँ:यह आपसे पुष्टि नहीं मांगेगा, और कुछ ही सेकंड में आपको ऐसा आउटपुट दिखेगा:
छवि 4 - कंटेनर प्रूनिंग आउटपुट संदेश
और बस, अब कोई रुका हुआ कंटेनर नहीं बचा:
छवि 5 - नॉन-रनिंग कंटेनरों की सूची (2)
अब, अनुपयोगी इमेज की बारी।
docker image prune
पिछली कमांड के समान,
docker image pruneअनुपयोगी इमेज हटाता है।डिफ़ॉल्ट रूप से, यह केवल डैंगलिंग इमेज हटाता है—यानी ऐसी इमेज जो अनटैग्ड हैं और किसी कंटेनर से संबद्ध नहीं हैं। आप एक वैकल्पिक फ्लैग का उपयोग कर सभी अनुपयोगी इमेज हटवा सकते हैं, न कि सिर्फ डैंगलिंग इमेज।
उपलब्ध विकल्पों की सूची इस प्रकार है
-aया--allकेवल डैंगलिंग की बजाय सभी अनुपयोगी इमेज हटाता है।--filterआपको यह नियंत्रित करने हेतु की-वैल्यू पेयर्स देने देता है कि कौन सी इमेज हटें।-fया--forceपुष्टि प्रॉम्प्ट को स्किप करता है।अब इसे क्रिया में देखते हैं!
यहाँ सिस्टम पर मौजूद इमेज की सूची है:
छवि 6 - Docker इमेज की सूची
उन्हें एक ही कमांड से हटाने के लिए यह चलाएँ:
टर्मिनल में आपको ऐसा आउटपुट दिखेगा:
छवि 7 - इमेज प्रूनिंग आउटपुट संदेश
इसके बाद, Docker Desktop में कोई इमेज शेष नहीं रहेगी:
छवि 8 - Docker इमेज की सूची (2)
अगला, अनुपयोगी वॉल्यूम्स को संभालते हैं।
docker volume prune
जैसा कि नाम से स्पष्ट है,
docker volume pruneकमांड सभी अनुपयोगी लोकल वॉल्यूम हटाता है। दूसरे शब्दों में, यह ऐसे वॉल्यूम डिलीट करता है जिन्हें कोई कंटेनर संदर्भित नहीं करता।डिफ़ॉल्ट रूप से, कमांड केवल अनाम वॉल्यूम हटाता है—यानी ऐसे बिना नाम के वॉल्यूम जिन्हें Docker कंटेनर स्टार्ट होने पर बनाता है। स्पष्ट रूप से नामित वॉल्यूम हटाने के लिए आपको एक अतिरिक्त विकल्प पास करना होगा।
आपके पास उपलब्ध विकल्प ये हैं:
-aया--allकेवल अनाम वॉल्यूम के बजाय सभी अनुपयोगी वॉल्यूम हटाता है।--filterआपको यह नियंत्रित करने हेतु की-वैल्यू पेयर्स निर्दिष्ट करने देता है कि कौन से वॉल्यूम हटें।-fया--forceपुष्टि प्रॉम्प्ट को स्किप करता है।हमारे सिस्टम पर
docker-compose.ymlफ़ाइल से बना एक यूज़र-क्रिएटेड वॉल्यूम है:छवि 9 - Docker वॉल्यूम की सूची
निम्नलिखित कमांड सभी लोकल वॉल्यूम हटाता है:
इसे चलाने के बाद, आपको ऐसा आउटपुट दिखेगा:
छवि 10 - वॉल्यूम प्रूनिंग आउटपुट संदेश
अब कोई वॉल्यूम शेष नहीं है:
छवि 11 - Docker वॉल्यूम की सूची (2)
अंत में, अनुपयोगी नेटवर्क हटाने का तरीका देखते हैं।
docker network prune
जब Docker कंटेनर आपस में कम्युनिकेट करते हैं, तो वे अक्सर यूज़र-परिभाषित नेटवर्क का उपयोग करते हैं। लेकिन जब वे कंटेनर हटा दिए जाते हैं, तो उनके नेटवर्क प्रायः सिस्टम पर बने रह जाते हैं।
docker network pruneकमांड उन नेटवर्क को हटाता है जिन्हें अब कोई कंटेनर उपयोग नहीं कर रहा।अन्य प्रून कमांड्स की तरह, इसमें भी कुछ विकल्प होते हैं:
--filterआपको यह नियंत्रित करने के लिए की-वैल्यू पेयर्स निर्दिष्ट करने देता है कि कौन से नेटवर्क हटें।-fया--forceपुष्टि प्रॉम्प्ट को स्किप करता है।इमेज, कंटेनर या वॉल्यूम के विपरीत, आप Docker Desktop के माध्यम से नेटवर्क को दृश्य रूप से निरीक्षण नहीं कर सकते, इसलिए आपको कमांड लाइन से काम करना होगा। यहाँ उपलब्ध नेटवर्क की सूची है:
छवि 12 - Docker नेटवर्क की सूची
डिफ़ॉल्ट Docker इंस्टॉलेशन से संबद्ध नहीं सभी नेटवर्क हटाने के लिए यह चलाएँ:
कमांड चलाने के बाद, आपको ऐसा आउटपुट दिखेगा:
छवि 13 - नेटवर्क प्रूनिंग आउटपुट संदेश
पहले चल रहे कंटेनरों से संबद्ध कोई भी नेटवर्क अब हट चुके हैं:
छवि 14 - Docker नेटवर्क की सूची
हालाँकि, ध्यान दें कि शेष तीन नेटवर्क Docker के सही ढंग से काम करने के लिए आवश्यक हैं और हटाए नहीं जा सकते।
और बस,
docker pruneकमांड्स के बेसिक उपयोग के लिए इतना ही! आगे, हम उन्नत विषयों को कवर करेंगे—जैसे इन्हें सुरक्षित रूप से उपयोग करना और प्रोडक्शन व संवेदनशील परिवेशों के लिए सर्वोत्तम प्रथाएँ।Docker Prune का सुरक्षित उपयोग
docker pruneकमांड्स डिस्क स्पेस जल्दी वापस पाने में मदद करते हैं, लेकिन इन्हें सावधानीपूर्वक उपयोग करना चाहिए, खासकर प्रोडक्शन परिवेश में.अनजाने में महत्वपूर्ण कंटेनर, इमेज या वॉल्यूम हटाने से डेटा हानि हो सकती है और महत्वपूर्ण वर्कफ़्लो बाधित हो सकते हैं। इसे रोकने के लिए, किसी भी प्रून कमांड को चलाने से पहले यह समझना बेहतर है कि क्या हटाया जाएगा.
यह खंड बताता है कि
docker pruneसुरक्षित रूप से चलाते समय कौन सी प्रमुख सावधानियाँ लेनी चाहिए.क्या हटाया जाएगा, यह समझना
pruneकमांड्स ऐसे संसाधन हटाने के लिए डिज़ाइन किए गए हैं जो सक्रिय उपयोग में नहीं हैं.उदाहरण के लिए,
docker image pruneकेवल डैंगलिंग इमेज हटाता है, औरdocker volume pruneकेवल ऐसे वॉल्यूम हटाता है जो किसी कंटेनर से अटैच नहीं हैं। हालाँकि,-a -fजैसे विकल्प जोड़ने पर सभी इमेज या वॉल्यूम बिना पुष्टि के हट जाएँगे.इसके अलावा, जटिल परिवेशों में डिपेंडेंसियाँ नज़रअंदाज़ होना आसान है, इसलिए प्रूनिंग से पहले दोबारा जाँच लेना हमेशा अच्छा अभ्यास है.
किसी भी
pruneकमांड को चलाने से पहले, आपको अपने सिस्टम का निरीक्षण करना चाहिए कि कौन से संसाधन वर्तमान में उपयोग में हैं। ऐसा करने के कई तरीके हैं, और हम इस खंड में सबसे सामान्य तरीकों की पड़ताल करेंगे.इस कमांड का उपयोग करके सभी कंटेनर, रुके हुए सहित, देखें:
आपको ऐसा आउटपुट दिखेगा:
छवि 15 - सभी Docker कंटेनरों की सूची
इसी तरह, इस कमांड का उपयोग कर सभी इमेज, अनुपयोगी सहित, सूचीबद्ध करें:
आउटपुट संरचना ऊपर वाले के समान होगी:
छवि 16 - सभी Docker इमेज की सूची
वॉल्यूम जाँचने के लिए, यह कमांड चलाएँ और सभी वॉल्यूम सूचीबद्ध करें:
छवि 17 - सभी Docker वॉल्यूम की सूची
इन आउटपुट्स की सावधानीपूर्वक समीक्षा करें ताकि गलती से कोई अहम संसाधन डिलीट न हो जाए.
सुरक्षा के लिए ड्राई रन
दुर्भाग्य से, Docker में अभी भी प्रूनिंग कमांड का बिल्ट-इन ड्राई रन विकल्प नहीं है, भले ही इसे सालों पहले अनुरोध किया गया था.
इसी कारण, आपको प्रून कमांड चलाने से पहले पिछले खंड में सूचीबद्ध कमांड्स का उपयोग कर संसाधनों का मैन्युअल निरीक्षण करना होगा.
यदि आप ऐसे संवेदनशील परिवेश में काम कर रहे हैं जहाँ डेटा स्थायित्व महत्वपूर्ण है, तो वॉल्यूम को प्रभावित करने वाले प्रून कमांड्स चलाने से पहले हमेशा बैकअप बनाना चाहिए.
बेशक, ये एहतियाती कदम हैं, लेकिन हमें उम्मीद है कि जल्द ही ड्राई-रन विकल्प आएगा।
Docker Prune के लिए सर्वोत्तम प्रथाएँ
अपने Docker परिवेश को अनावश्यक अव्यवस्था से मुक्त रखने के लिए,
pruneकमांड्स को नियमित रूप से चलाना महत्वपूर्ण है—संभव हो तो उन्हें स्वचालित भी करें.यह खंड प्रोडक्शन परिवेश में
docker pruneकमांड्स चलाने की सर्वोत्तम प्रथाएँ बताता है.docker prune का नियमित उपयोग करें
समय के साथ, Docker अनुपयोगी इमेज, रुके हुए कंटेनर और अनावश्यक वॉल्यूम इकट्ठा करता है—जो सभी काफी डिस्क स्पेस लेते हैं.
प्रूनिंग कमांड्स को नियमित रूप से चलाने से आपका परिवेश साफ रहता है और अत्यधिक डिस्क उपयोग से बचाव होता है। आपको इन्हें अपने मेंटेनेंस शेड्यूल का हिस्सा बनाना चाहिए.
हर कुछ हफ्तों में एक बार शुरूआत के लिए अच्छा है, लेकिन यदि आपका सेटअप बार-बार कंटेनर बनाता और हटाता है, तो और अधिक आवृत्ति पर विचार करें.
प्रोडक्शन में सावधानी बरतें
प्रोडक्शन परिवेश में कोई भी काम अतिरिक्त सावधानी मांगता है, और Docker प्रूनिंग भी अपवाद नहीं है.
ज़रा-सी असावधानी डाउनटाइम या डेटा हानि का कारण बन सकती है—और आप उसके ज़िम्मेदार नहीं होना चाहेंगे। प्रोडक्शन परिवेश में
docker pruneकमांड्स चलाने से पहले, हमेशाdocker ps -a,docker images, औरdocker volume lsसे सिस्टम संसाधनों का निरीक्षण करें, जैसा कि पिछले खंड में समझाया गया है.इसके अतिरिक्त, सर्वसमावेशी
docker system pruneकी बजाय विशिष्ट प्रूनिंग कमांड्स का उपयोग करना अच्छा विचार है, क्योंकि अनचाही डिलीशन्स से उबरना अपेक्षाकृत आसान हो सकता है.docker prune स्वचालित करें
एक और अच्छी प्रथा है निर्धारित कार्यों का उपयोग कर
docker pruneकमांड्स को स्वचालित बनाकर क्लीनअप प्रयासों को सरल करना.Linux पर, आप क्रॉन जॉब सेट कर सकते हैं ताकि कमांड्स नियमित अंतराल पर चलें, जबकि Windows पर, आप समान ऑटोमेशन के लिए Task Scheduler का उपयोग कर सकते हैं। इससे बिना मैन्युअल हस्तक्षेप के सिस्टम व्यवस्थित बना रहता है। हालांकि, प्रोडक्शन में सुनिश्चित करें कि स्वचालित प्रूनिंग महत्वपूर्ण वर्कलोड में हस्तक्षेप न करे.
उदाहरण के लिए, Linux पर यह क्रॉन जॉब हर रविवार आधी रात को सर्वसमावेशी प्रूनिंग कमांड चलाता है:
Docker Prune समस्याओं का निवारण
docker pruneकमांड्स डिस्क स्पेस पुनः प्राप्त करने का एक भरोसेमंद उपाय हैं, लेकिन नए इमेज पुल करने या नए कंटेनर चलाने के लिए पर्याप्त स्पेस सुनिश्चित करने में ये हमेशा पर्याप्त नहीं होते.इसके अलावा, आप अनजाने में महत्वपूर्ण संसाधन हटा सकते हैं, इसलिए रिकवरी रणनीतियों पर चर्चा करना ज़रूरी है.
इन दोनों विषयों को हम इस खंड में कवर करेंगे.
डिस्क स्पेस की समस्या आना
Docker इमेज बड़ी हो सकती हैं—हाल ही में हमारे पास 13GB से बड़ी एक इमेज थी—और हमें यकीन है कि और भी बड़ी मौजूद हैं। इसलिए,
docker pruneचलाने के बाद भी आपको लग सकता है कि सिस्टम पर अभी भी डिस्क स्पेस कम है.यह देखने के लिए कि इमेज, कंटेनर और वॉल्यूम्स द्वारा कुल कितना स्पेस उपयोग हो रहा है, यह कमांड चलाएँ:
छवि 18 - Docker द्वारा उपयोग किया गया स्पेस
docker pruneकमांड्स से डिस्क स्पेस वापस लेते समय,-aफ्लैग जोड़ें ताकि केवल डैंगलिंग या अनाम नहीं, सभी इमेज, वॉल्यूम या कंटेनर हटें। बेशक, इस तरीके के संभावित नकारात्मक पक्षों को ध्यान में रखें.यदि डिस्क स्पेस की समस्या फिर भी बनी रहती है, तो आपका एकमात्र विकल्प उपलब्ध डिस्क स्पेस बढ़ाना है.
अनजाने में हटाने के बाद रिकवरी
रिकवरी कहना आसान है, करना मुश्किल—इसीलिए हम सलाह देते हैं कि वास्तविक कमांड चलाने से पहले प्रूनिंग से क्या हटेगा, यह समझ लें.
फिर भी, यदि आप ऐसी स्थिति में हैं जहाँ आपने गलती से महत्वपूर्ण कंटेनर, इमेज या वॉल्यूम प्रून कर दिए हैं, तो लॉग्स जाँचने से शुरू करें ताकि पता चले क्या हटाया गया था.
macOS पर, आप निम्न दो कमांड्स चला सकते हैं (Windows और Linux के लिए विकल्प):
इन कमांड्स को चलाने से पिछले 30 मिनट के Docker-संबंधित लॉग्स
/tmp/logs.txtमें सेव हो जाएँगे। आपको इन लॉग्स की जाँच करनी चाहिए ताकि पता चल सके कि कौन से कंटेनर या इमेज डिलीट हुए।डिलीट हुई इमेज के लिए, आप उन्हें किसी रजिस्ट्री जैसे Docker Hub से दोबारा पुल कर सकते हैं। इस तरह की कमांड काम कर जाएगी:
और डिलीट हुए कंटेनर के लिए, यदि वे स्थायी इमेज पर आधारित थे, तो आप उन्हें हमेशा फिर से बना सकते हैं:
वैकल्पिक रूप से, यदि उपलब्ध हों, तो आप बैकअप से रिस्टोर कर सकते हैं, जिनका उपयोग वॉल्यूम और कंटेनर—दोनों का डेटा रिकवर करने में किया जा सकता है। भविष्य में, डेटा हानि से बचने के लिए वॉल्यूम स्नैपशॉट टूल्स का उपयोग करने पर विचार करें.
हालाँकि, सबसे अच्छी रणनीति यही है कि प्रूनिंग कमांड चलाने से पहले हटने वाले संसाधनों का निरीक्षण करें और तभी आगे बढ़ें जब आपको पूरा यकीन हो कि यह आपके वर्कफ़्लो को प्रभावित नहीं करेगा.
Docker Prune का सारांश
समाप्ति में,
docker pruneकमांड्स का परिवार डिस्क स्पेस वापस पाने का शक्तिशाली तरीका है, पर इसके साथ यह जोखिम भी है कि आप गलती से ज़रूरी संसाधन हटा दें, जिससे डेटा हानि हो सकती है। यह जोखिम और बढ़ जाता है जब आप वैकल्पिक-a -fफ्लैग्स का उपयोग करते हैं, जो सब कुछ बलपूर्वक हटा देंगे.फिर भी, सिस्टम को साफ और व्यवस्थित रखने के लिए प्रूनिंग अब भी प्राथमिक तरीका बना रहता है.
आपको बस सावधानी बरतनी है, खासकर प्रोडक्शन परिवेश में। प्रूनिंग से पहले
docker ps -a,docker images, औरdocker volume lsजैसी कमांड्स का उपयोग कर सभी कंटेनर, इमेज और वॉल्यूम सूचीबद्ध करें। प्रूनिंग कमांड तभी चलाएँ जब आपको यकीन हो कि सूचीबद्ध संसाधन हटाने में आपको आपत्ति नहीं (मान लेते हैं कि उन्हें कोई चल रहा कंटेनर उपयोग नहीं कर रहा)।यदि आप Docker, कंटेनरीकरण और कंटेनर ऑर्केस्ट्रेशन के बारे में और सीखना चाहते हैं, तो DataCamp पर ये कोर्स देखें: