Table of Contents
क्यों स्वचालित डॉकर क्लीनअप डिस्क स्पेस मैनेजमेंट के लिए आवश्यक है
डोकर कंटेनर आवेदन विकास, परीक्षण और तैनाती के लिए एक हल्के, सुसंगत वातावरण प्रदान करते हैं। हालांकि, तेजी से कताई और कंटेनरों को फाड़ने की सुविधा एक लागत पर आती है: डिस्क ब्लोट। समय के साथ, छवियों को अलग करना, कंटेनरों को बंद करना, अप्रयुक्त वॉल्यूम और बायओवर बिल्ड कैश संचित करना, कीमती डिस्क स्थान का उपभोग करना। बाएं अचेक किए गए, यह अव्यवस्था गिरावट प्रदर्शन, असफल तैनाती और यहां तक कि सिस्टम आउटेज का कारण बन सकती है। ऑटोमेटिंग क्लीनअप न केवल भंडारण को पुनः प्राप्त करता है बल्कि एक पूर्वानुमान योग्य, रखरखाव योग्य डोकर होस्ट भी सुनिश्चित करता है।
एक एकल डेवलपर वर्कस्टेशन ]] के गिगाबाइट्स को सप्ताह के भीतर इस्तेमाल किया गया डोकर छवियों का एकत्र कर सकता है। उत्पादन वातावरण में, जहां कंटेनरों को अक्सर अद्यतन किया जाता है या प्रतिस्थापित किया जाता है, समस्या तेजी से पैमाने पर होती है। मैनुअल क्लीनअप त्रुटि-प्रवण है और अक्सर उपेक्षा की जाती है। स्वचालित, निर्धारित प्रूनिंग रणनीति को लागू करके, आप अनुमान लगा सकते हैं और उन मामलों के लिए संसाधनों को मुक्त कर सकते हैं: अपने अनुप्रयोगों को चलाना।
Docker's Cleanup उपयोगिताओं को समझना
Docker, unused डेटा को हटाने के लिए कमांड का एक सूट प्रदान करता है। सबसे शक्तिशाली है , जो कंटेनर, छवियों, वॉल्यूम और नेटवर्क को लक्षित कर सकता है। चलो कुंजी विकल्पों को तोड़ते हैं:
- ]]]]]]]]]]]] - सभी बंद कंटेनरों, सभी dangling छवियों को हटा देता है, और नेटवर्क का इस्तेमाल किया।
- ]]]] - सभी अप्रयुक्त छवियों को हटाने के लिए (केवल डांगल नहीं) शामिल है, जिसमें किसी भी कंटेनर द्वारा संदर्भित छवियां शामिल नहीं हैं।
- ]]] – इसके अलावा, प्रयुक्त मात्रा (डिफ़ॉल्ट मात्रा से हटाया नहीं जाता है) का प्रयोग किया जाता है।
- ]]] - सभी झंडे को जोड़ती है: पुष्टि के बिना बल हटाने, सभी अप्रयुक्त छवियों और वॉल्यूम। यह सफाई के लिए परमाणु विकल्प है।
अधिक दानेदार नियंत्रण के लिए, Docker अलग-अलग कमांड प्रदान करता है: , , , और ]. प्रत्येक फिल्टर स्वीकार करता है (जैसे, ) एक निश्चित समय से पुराने संसाधनों को हटाने को सीमित करने के लिए।
क्रोन आधारित स्वचालन के लिए चरण-दर-चरण सेटअप
लिनक्स सिस्टम पर, क्रोन आवर्ती कार्यों के लिए सरलतम शेड्यूलिंग टूल बना रहता है। डोकर क्लीनअप को स्वचालित करने के लिए आपको अपने क्रॉनटैब में केवल कुछ ही लाइनों की आवश्यकता होती है।
1. सत्यापित डोकर कमांड पथ
क्रोन नौकरियां सीमित वातावरण के साथ चलती हैं। दौड़कर का पूरा पथ निर्धारित करें:
which docker
आमतौर पर यह रिटर्न ]. अपने क्रोन कमांड में उस पथ का प्रयोग करें।
2. अपने Crontab संपादित करें
रन:
crontab -e
यदि यह आपका पहला समय है, तो आपको एक संपादक चुनने के लिए प्रेरित किया जाएगा। 2:00 बजे दैनिक चलाने के लिए निम्नलिखित पंक्ति जोड़ें:
0 2 * * * /usr/bin/docker system prune -af --volumes > /dev/null 2>&1
]]]] अपने मेलबॉक्स को आउटपुट के साथ भरने से बचने के लिए टोंटी और stderr को फिर से निर्देशित करता है। साप्ताहिक के लिए आवश्यकतानुसार (जैसे, ]]] के रूप में शेड्यूल को समायोजित करें।
3. नौकरी का परीक्षण
क्रोन पर भरोसा करने से पहले, मैन्युअल रूप से यह सुनिश्चित करने के लिए कि यह उम्मीद के रूप में काम करता है आदेश चलाएं:
sudo /usr/bin/docker system prune -af --volumes
यदि आप एक गैर-रूट डॉकर इंस्टॉलेशन का उपयोग कर रहे हैं, तो आपको जोड़ने की आवश्यकता हो सकती है या समूह में उपयोगकर्ता के रूप में क्रोन नौकरी चलाने की आवश्यकता हो सकती है।
व्यवस्थित टाइमर के साथ उन्नत स्वचालन
हालांकि क्रोन कई के लिए पर्याप्त है, सिस्टमेड टाइमर बेहतर लॉगिंग, निर्भरता हैंडलिंग और बाकी के इनिट सिस्टम के साथ एकीकरण प्रदान करते हैं। यहां डॉकर क्लीनअप के लिए एक टाइमर कैसे बनाया जाए।
1. एक सर्विस यूनिट बनाएं
निम्न को ] के रूप में सहेजें:
[Unit]
Description=Docker system prune
Wants=docker.service
After=docker.service
[Service]
Type=oneshot
ExecStart=/usr/bin/docker system prune -af --volumes
User=root
StandardOutput=journal
2. एक टाइमर इकाई बनाएँ
] के रूप में सहेजें:
[Unit]
Description=Run Docker cleanup daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
3. सक्षम और टाइमर शुरू
sudo systemctl daemon-reload
sudo systemctl enable docker-cleanup.timer
sudo systemctl start docker-cleanup.timer
] के साथ सत्यापित करें। यह दृष्टिकोण सिस्टम जर्नल में आउटपुट लॉग करता है, जिससे क्लीनअप रनों का ऑडिट करना आसान हो जाता है।
अवधारण नीतियों के लिए क्लीनअप फ़िल्टर को कॉन्फ़िगर करना
आक्रामक छंटाई अधिकांश विकास वातावरण के लिए सुरक्षित है, लेकिन उत्पादन प्रणालियों की आवश्यकता हो सकती है ]retention नीतियों उदाहरण के लिए, आप ]] के रूप में टैग की गई छवियों को रखना चाहते हैं, या केवल 48 घंटे से अधिक पुरानी संसाधनों को हटा दें।
आयु द्वारा फ़िल्टर करें
24 घंटे से अधिक उम्र के अप्रयुक्त छवियों और कंटेनरों का प्रबल होना:
docker system prune -af --filter "until=24h" --volumes
[[FLT::29]] फिल्टर छवियों और कंटेनरों दोनों के लिए काम करता है। अधिक जटिल नियमों के लिए ] के साथ संयोजन।
विशिष्ट संसाधन
Docker में एक अंतर्निहित उपेक्षा सूची नहीं है, लेकिन आप हटाने को रोकने के लिए लेबल का उपयोग कर सकते हैं। लेबल महत्वपूर्ण कंटेनर या छवियों (जैसे, [[FLT: 31]]), फिर एक नकारात्मक लेबल फ़िल्टर का उपयोग करें (]]])। एक वर्कअराउंड को कस्टम स्क्रिप्ट के साथ जोड़ना है जो हटाने से पहले लेबल की जांच करता है। वैकल्पिक रूप से, ] ]]Dock-gc]] ] या [F:]] ] [FLT]] [F]]] [FLT[F]]]]]] [F]]] [FLT]] [FLT[F]]]]] [F]] [F] [F]]]] [F] [F]]] [F]]] [F] [FLT] [F] [F]]]]]]]]]]]] [F] [FLT] [F] [F]] [F] [F]] [F] [F
डिस्क स्पेस और क्लीनअप प्रभावशीलता की निगरानी
स्वचालन केवल आपकी निगरानी के रूप में अच्छा है। प्रत्येक सफाई के बाद डिस्क उपयोग को ट्रैक करने के लिए अलर्ट सेट करें। सरल दृष्टिकोणों में शामिल हैं:
- ]]] ]]]] ]]]] ]]] ]]]]]] ]]]]] ]]]]] ]]]]]]]] ]]]]]]] ]]]]]]] ]]]]]]] [[FLT ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] [[[[[[[[[[[[[[[[[[[[[[[[[FLT [[[[[[[[FLT [[[[FLT]]]]]]]]]]]]]]]]]]]
- ]]] जैसे एक उपकरण का उपयोग करना docker-system-resource-influx] ] influxDB या Prometheus के लिए मीट्रिक भेजने के लिए।
- ]]Datadog]]] या न्यू Relic]] के साथ एकीकृत समय के साथ डोकर भंडारण को देखने के लिए।
यदि आपका क्लीनअप रन लेकिन डिस्क का उपयोग उच्च रहता है, तो का उपयोग करके जांच करें कि अंतरिक्ष कहाँ खाया जाता है। आम अपराधियों में सीआई सिस्टम में कैश का निर्माण या बड़ी मात्रा में शामिल हैं जो नहीं हटा दिए जाते हैं क्योंकि वे अभी भी बंद कंटेनरों द्वारा संदर्भित हैं।
उत्पादन वातावरण के लिए सर्वश्रेष्ठ अभ्यास
1. हमेशा एक स्टेज दृष्टिकोण का उपयोग करें
एक साप्ताहिक सूखी रन के साथ शुरू ] का उपयोग करके कोई झंडा (देखने के लिए कि क्या हटाया जाएगा) नहीं है। स्वचालित हटाने को सक्षम करने से पहले उत्पादन की समीक्षा करें।
2. CI/CD पाइपलाइनों के साथ समन्वय
यदि आपकी निर्माण प्रणाली कई अस्थायी छवियां बनाती है, तो निर्माण के बाद या कम यातायात वाली खिड़कियों के दौरान छंटनी निर्धारित की जाती है। जबकि निर्माण में सुधार से बचने के लिए मध्यवर्ती परतों की आकस्मिक हटाने को रोका जा सकता है जो अभी भी उपयोग में हैं।
3. बैकअप क्रिटिकल डेटा
डेटाबेस या उपयोगकर्ता अपलोड वाले वॉल्यूम को किसी भी आक्रामक वॉल्यूम प्रूनिंग से पहले बैक अप करना चाहिए। [[FLT: 38]] जैसे Docker वॉल्यूम प्रबंधन टूल का उपयोग करें, जैसे कि [[FLT: 38]], जिसमें [[FLT: 39]]]] को बाहरी भंडारण को बांधने के लिए जो प्रून से प्रभावित नहीं होगा।
4. एक गैर रूट उपयोगकर्ता के रूप में रन प्रूनिंग
सुरक्षा के लिए, जब तक आवश्यक हो तब तक क्रोन नौकरियों को रूट के रूप में नहीं चलाते। अपने उपयोगकर्ता को समूह में जोड़ें और बिना के बिना काम चलाएं। हालांकि, ध्यान दें कि समूह में किसी भी उपयोगकर्ता को प्रभावी रूप से मेजबान तक रूट एक्सेस है; अपने वातावरण में जोखिम का मूल्यांकन करें।
5. लॉग क्लीनअप गतिविधि
]] के बजाय एक लॉग फ़ाइल में आउटपुट को पुनर्निर्देशित करें:
0 2 * * * /usr/bin/docker system prune -af --volumes >> /var/log/docker-cleanup.log 2>&1
नियमित रूप से त्रुटियों या अप्रत्याशित हटाने के लिए लॉग की जांच करें।
Them से बचने के लिए कैसे
- ]Missing रनिंग कंटेनर डेटा : ] ध्वज सभी अप्रयुक्त छवियों को हटा देता है, जिसमें मध्यवर्ती परतें शामिल हैं जिन्हें भविष्य के निर्माण के लिए आवश्यक हो सकता है। यदि आप अक्सर पुनर्निर्माण करते हैं, तो एक छोटा फ़िल्टर या ]] को बिना ]] को सेट करने पर विचार करें।
- ]]Volumes, जिसमें महत्वपूर्ण राज्य : डिफ़ॉल्ट रूप से, , वॉल्यूम को तब तक नहीं हटाता जब तक ]] झंडा का इस्तेमाल नहीं किया जाता है। केवल उस झंडा को जोड़ दें यदि आप कुछ मात्रा में लगातार डेटा नहीं रखते हैं।
- ]नेटवर्क प्रून ब्रेकिंग कंटेनर कनेक्टिविटी : अप्रयुक्त नेटवर्क को हटा दें। यदि किसी भी कंटेनर द्वारा एक कस्टम नेटवर्क का संदर्भ नहीं दिया जाता है, तो इसे हटा दिया जाएगा, संभावित रूप से भविष्य के कंटेनर स्टार्टअप को तोड़ देगा। यदि आप स्वैरा में ओवरले नेटवर्क का उपयोग करते हैं तो इसे ध्यान में रखें।
- क्रोन पर्यावरण के मुद्दे : जब क्रोन रन करता है तो डोकर PATH में नहीं हो सकता। हमेशा द्विआधारी के लिए पूर्ण पथ का उपयोग करें।
वैकल्पिक उपकरण और दृष्टिकोण
जबकि मूल डोकर कमांड अधिकांश जरूरतों को कवर करते हैं, कई तीसरे पक्ष के उपकरण उन्नत सुविधाओं को प्रदान करते हैं:
- ] Watchtower]]]]] – स्वचालित रूप से चल कंटेनर अद्यतन करने के बाद पुराने छवियों को साफ कर सकते हैं।
- ] Portainer]]]]] - एक वेब यूआई फॉर डोकर प्रबंधन जिसमें एक निर्धारित सफाई सुविधा शामिल है।
- ] docker बिल्डर prune]]]] - विशेष रूप से कैश बनाने का लक्ष्य है, जो CI/CD पाइपलाइनों में बहुत बड़ा हो सकता है।
Kubernetes वातावरण के लिए, ]kubelet कचरा संग्रह और ]]Kured]] या Descheduler[]]]]] का उपयोग करने पर विचार करें नोड-स्तर सफाई के लिए।
निष्कर्ष
ऑटोमेटिंग डोकर कंटेनर क्लीनअप एक स्वस्थ, कुशल डोकर होस्ट को बनाए रखने के लिए एक सरल लेकिन महत्वपूर्ण अभ्यास है। चाहे आप क्रोन, व्यवस्थित टाइमर, या तीसरे पक्ष के उपकरण का चयन करते हैं, कुंजी नियमित रूप से एक नीति के साथ छंटनी करना है जो आपको आवश्यक डेटा को हटाने के जोखिम के खिलाफ डिस्क बचत को संतुलित करती है। फ़िल्टर और लॉग के साथ रूढ़िवादी रूप से शुरू करें, फिर अपने शेड्यूल को अपने आत्मविश्वास के बढ़ने के रूप में कस लें। अपने परिचालन दिनचर्या में स्वचालित सफाई को एकीकृत करके, आप यह सुनिश्चित करते हैं कि डिस्क स्थान कभी भी एक बोतलबंद नहीं बन जाता है और आपका कंटेनर दुबला, सुरक्षित और प्रदर्शनकारी रहता है।