लटकती छवि क्या है और अप्रयुक्त छवि क्या है?


155

डॉक इमेज प्रून के डॉक डॉक्यूमेंट में -a फ्लैग टू का उपयोग करना संभव है

सभी अप्रयुक्त छवियों को निकालें, न कि केवल झूलने वाले

और बादमें

सभी झूलने वाली छवियां निकालें। यदि -a निर्दिष्ट किया जाता है, तो किसी भी कंटेनर द्वारा संदर्भित नहीं की गई सभी छवियों को भी हटा देगा।

क्या कोई मुझे समझा सकता है कि झूलने वाली छवियां क्या हैं और झूलने वाली और अप्रयुक्त छवियों के बीच अंतर क्या है?


docker की छवि prune (बिना -a) ठीक वैसे ही करती है
herm

यह विफल हो जाता है जब आप जेनकिंस में इसका उपयोग करते हैं, तो हम डॉकटर बैकअप को उत्पादन में खो देंगे यदि हम डॉकटर छवि कैश पर निर्भर हैं। pruneउत्पादन में शामिल नहीं है /
जिन्ना बलू

जवाबों:


153

एक अप्रयुक्त छवि का मतलब है कि इसे कंटेनर में असाइन या उपयोग नहीं किया गया है। उदाहरण के लिए, दौड़ते समय docker ps -a- यह आपके सभी बाहर और वर्तमान में चल रहे कंटेनरों को सूचीबद्ध करेगा। किसी भी कंटेनर के अंदर उपयोग की जा रही कोई भी छवि एक "उपयोग की गई छवि" है।

दूसरी ओर, झूलने वाली छवि का मतलब है कि आपने छवि का नया निर्माण किया है, लेकिन इसे नया नाम नहीं दिया गया है। तो पुरानी छवियां आप "लटकती हुई छवि" बन गई हैं। वे पुरानी छवि वे हैं जो अनछुए हैं और <none>जब आप चलाते हैं तो इसके नाम पर " " प्रदर्शित होता है docker images

दौड़ते समय docker system prune -a, यह अप्रयुक्त और झूलने वाली दोनों छवियों को हटा देगा। इसलिए किसी भी कंटेनर में उपयोग की जा रही छवियां, चाहे वे बाहर निकाली गई हों या वर्तमान में चल रही हों, प्रभावित नहीं होंगी।


डॉक्यूमेंट के अनुसार जब डॉक प्रून रनिंग के बिना केवल झूलने वाले चित्र हटा दिए जाते हैं। -एक सुनिश्चित करेगा कि अप्रयुक्त चित्र भी सही हटाए जाएं? docs.docker.com/engine/reference/commandline/system_prune
herm


1
बहुत ही रोचक। तो एक झूलने वाली छवि का उपयोग कंटेनर द्वारा किया जा सकता है। नोट: डॉकर आपको चेतावनी देता है कि यदि कोई कंटेनर मौजूद है जो इन अप्रकाशित चित्रों का उपयोग कर रहा है।
जुलूस

7
docker system prune --all --filter "until=24h"हाल की छवियों को भी संरक्षित करता है
हैरी मोरेनो

1
Docs.docker.com/engine/reference/commandline/system_prune/… के अनुसार docker system prune -aबंद हुए कंटेनरों को भी हटाता है। तो यह केवल बाहर के कंटेनरों से जुड़ी छवियों को भी हटा देना चाहिए, है ना?
LFK

41

सबसे खतरनाक और सबसे आसान तरीका है डैंगलिंग इमेजेज को साफ करना

docker images --quiet --filter=dangling=true | xargs --no-run-if-empty docker rmi

डॉकर छवियों में कई परतें होती हैं। खतरनाक छवियां, ऐसी परतें हैं जिनका किसी भी टैग की गई छवियों से कोई संबंध नहीं है। वे अब एक उद्देश्य की सेवा नहीं करते हैं और डिस्क स्थान का उपभोग करते हैं।

नोट: मैं pruneउत्पादन में उपयोग नहीं करने की सलाह देता हूं , क्योंकि docker system prune -aकंटेनर द्वारा संदर्भित नहीं की गई सभी छवियां हटा दी जाएंगी, जिसके द्वारा हम पिछली रिलीज़ पर वापस नहीं आ सकते।

, फिल्टर झंडा जोड़कर छवियों झूलते सूचीबद्ध करने के लिए -fके एक मूल्य के साथ dangling=trueकरने के लिए docker images

खतरनाक छवियों की सूची बनाएं

docker images -f dangling=true

डैंगलिंग इमेजेस को हटा दें

docker rmi $(docker images -f dangling=true -q)

या

docker images --quiet --filter=dangling=true | xargs --no-run-if-empty docker rmi

जब हम किसी भी क्रॉन जॉब्स को चलाने के लिए थान झूलने वाले सामान को हटाते हैं, तो यह सुनिश्चित करने के लिए उपरोक्त का उपयोग करें कि नौकरी सफलतापूर्वक चलती है। जेन्किन्स की तरह अगर हम बेलो कमोड जॉब के साथ फ्री स्टाइल जॉब चलाते हैं तो कभी भी फेल नहीं होंगे भले ही मशीन में कोई झूलने वाला सामान मौजूद न हो।

यह झूलने वाली छवियों को साफ करने और उपयोग के लिए हमारे डिस्क स्थान को वापस पाने का सबसे सुरक्षित और आसान तरीका है।


2
डॉकटर इमेज प्रून के बारे में क्या? डॉक्स कहते हैं: "सभी झूलने वाली छवियों को हटा दें। यदि कोई निर्दिष्ट है, तो किसी भी कंटेनर द्वारा संदर्भित नहीं की गई सभी छवियों को भी हटा देगा।" docs.docker.com/engine/reference/commandline/image_prune/…
herm

2
@herm, आपके द्वारा संदर्भित पृष्ठ के नीचे से "नोट: आपको कुछ भी हटाने से पहले पुष्टिकरण के लिए संकेत दिया जाता है, लेकिन आपको संभावित रूप से हटा दिया जाएगा" की एक सूची नहीं दिखाई जाती है। मुझे लगता है कि इस उत्तर में बिंदु यह है कि आप झूलने वाली छवियों की एक सूची प्राप्त कर सकते हैं, जिन्हें आप स्पष्ट रूप से हटाने के लिए निर्दिष्ट करते हैं, जैसा कि prune के साथ सभी झूलने वाली छवियों को नेत्रहीन रूप से हटाने का विरोध किया गया है।
bzier

कोई भी नाम और टैग वाली छवियां docker imagesखतरे में नहीं हैं। उनके आकार की जांच कैसे करें? इसके अलावा, नाम और टैग वाली docker images -aछवियां कोई भी मध्यवर्ती छवि नहीं हैं। क्या उन्हें हटाया जा सकता है और उनके आकार की जांच कैसे की जा सकती है?
चर

17

Docker में छवियाँ को sha256 डाइजेस्ट द्वारा संदर्भित किया जाता है, जिसे अक्सर छवि आईडी कहा जाता है। यह पचाने के लिए आप को डॉकटर होस्ट पर मौजूद छवि की आवश्यकता है। आमतौर पर, आपके पास इन डिगेट्स को इंगित करने वाले टैग होंगे, उदाहरण के लिए टैग बिजीबॉक्स: छवि आईडी पर नवीनतम वर्तमान बिंदु c30178c523 ... मेरे सिस्टम पर। एकाधिक टैग एक ही छवि को इंगित कर सकते हैं, और किसी भी टैग को एक अलग आईडी को इंगित करने के लिए बदला जा सकता है, उदाहरण के लिए जब आप बिजीबॉक्स की एक नई प्रतिलिपि खींचते हैं: अपनी एप्लिकेशन छवि का एक नया संस्करण नवीनतम या निर्मित करें।

झकझोरने वाली छवियां ऐसी छवियां होती हैं जिनमें कोई टैग नहीं होता है, और उनमें कोई बाल छवि नहीं होती है (उदाहरण के लिए एक पुरानी छवि जिसका उपयोग एक अलग संस्करण होता है FROM busybox:latest), उन्हें इंगित करता है। हो सकता है कि पहले उनका कोई टैग लगा हो और बाद में वह टैग बदल गया हो। या उनके पास कभी टैग नहीं था (जैसे docker buildबिना टैग विकल्प को शामिल किए बिना आउटपुट )। ये आमतौर पर तब तक निकालने के लिए सुरक्षित हैं जब तक कि कोई कंटेनर अभी भी पुरानी छवि आईडी के संदर्भ में नहीं चल रहा है। उनके आसपास रखने का मुख्य कारण कैशिंग उद्देश्यों के निर्माण के लिए है।

इसके अलावा, आपने ऐसी छवियां डाउनलोड की हो सकती हैं जिनका उपयोग आप वर्तमान में कंटेनरों (बंद किए गए कंटेनर सहित) द्वारा नहीं किया जाता है। ये पूरी तरह से झूलने वाली छवियों से अलग हैं और जब तक आप भविष्य में इनका उपयोग करने की योजना नहीं बनाते हैं या जब तक आपको उनकी आवश्यकता नहीं होती है, तब तक एक और कॉपी डाउनलोड करने का मन नहीं करते।


जबकि एक डॉक बिल्ड बन रहा है (वह प्रक्रिया जिसमें यह भविष्य की झूलने वाली छवियों के लिए परतें और संभव उम्मीदवार बनाता है), एक नई विंडो में अगर मैं डॉक इमेज प्रून चलाता हूं, तो क्या यह किसी भी तरह से प्रगति को प्रभावित करेगा?
चर

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

क्या मध्यस्थ चित्र (जिनके चलने पर कोई नाम / टैग नहीं है docker images -a) को भी ख़तरनाक चित्र कहा जाता है? क्या वे डॉकटर छवि के साथ साफ हो जाते हैं?
चर

मेरे पास अब अपने वातावरण में नहीं हैं (बिल्डकिट का उपयोग करके), इसलिए मैं खुद को प्रयोगशाला वातावरण में देखने की कोशिश करूँगा कि क्या होता है।
BMitch

उस ने कहा, जब तक आप अंतिम टैग की गई छवि को नहीं हटाते हैं, तब तक मध्यवर्ती चरणों से अनचाही "छवियों" को हटाना बहुत ही व्यर्थ है, बाद की छवि में सभी परतों का पुन: उपयोग किया जाता है और हटाया नहीं जा सकता। यदि आप उन्हें हटाते हैं, तो आप अपनी बिल्ड कैशे को नष्ट कर देते हैं और भविष्य की सभी छवियों को बनाने और स्टोर करने के लिए जगह बनाने में अधिक समय लेते हैं।
BMitch

5

झूलने वाली छवियां ऐसी परतें हैं जिनका किसी भी टैग की गई छवियों से कोई संबंध नहीं है। वे अब एक उद्देश्य की सेवा नहीं करते हैं और डिस्क स्थान का उपभोग करते हैं।

एक अप्रयुक्त छवि एक छवि है जिसे किसी कंटेनर में असाइन या उपयोग नहीं किया गया है।

खतरनाक छवियों की सूची बनाएं

docker images -f dangling=true

3

झूलने वाली छवियां अनगढ़ चित्र हैं। निम्नलिखित आदेश लटकती छवियों की सूची देता है।

docker images --filter "dangling=true"

docker image prune सभी झूलने वाली छवियों को हटाता है।

अप्रयुक्त छवियां ऐसी छवियां हैं जिनके टैग हैं लेकिन वर्तमान में कंटेनर के रूप में उपयोग नहीं किया जा रहा है। आपको भविष्य में इसकी आवश्यकता हो सकती है या नहीं।

docker image prune -a सभी झूलने के साथ ही अप्रयुक्त छवियों को हटा दें।

आप आमतौर पर कुछ समय तक सभी अप्रयुक्त छवियों को हटाना नहीं चाहते हैं। इसलिए एक फिल्टर के साथ निकालना बेहतर है।

docker image prune -f --filter "until=6h"


1) docker image prune -a -f --filter "until=6h"झूलने वाली छवियों को भी हटाता है?
चर

2) आपके अंतिम आदेश में docker image prune -f --filter "until=6h"- आप का उल्लेख नहीं है, क्योंकि कोई -a नहीं है - तो यह कैसे अप्रयुक्त छवियों को हटा देगा?
चर

0

मैंने झूलने वाली छवियों को हटाने के लिए उपयोगी कमांड (उपनाम) देखे, यहाँ के सौजन्य से: https://forums.docker.com/t/how-to-delete-cache/5753 :

alias docker_clean_images='docker rmi $(docker images -a --filter=dangling=true -q)' 
alias docker_clean_ps='docker rm $(docker ps --filter=status=exited --filter=status=created -q)' 

पहले वाला सभी झूलने वाली छवियों को साफ करता है। यह कई बिल्ड से इंटरमीडिएट छवियों को हटाने के लिए उपयोगी है। दूसरा बंद कंटेनर को हटाने के लिए है। ये उपनाम हैं जिनका मैं नियमित रखरखाव के लिए उपयोग करता हूं

यदि आप अपने सभी कैश को निकालना चाहते हैं, तो आपको पहले यह सुनिश्चित करना होगा कि सभी कंटेनरों को रोक दिया जाए और हटा दिया जाए, क्योंकि आप एक कंटेनर द्वारा उपयोग में एक छवि को नहीं निकाल सकते हैं। तो ऐसा ही कुछ

docker kill $(docker ps -q) docker_clean_ps docker rmi $(docker images
-a -q)

यह आपके कैश में मौजूद सभी छवियों को मार देगा और हटा देगा।


0

छवियों के स्क्रीनशॉट में, "कोई नहीं" नाम छवियों को झूल रहा है। झूलने वाली छवि का मतलब है कि आपने छवि का नया निर्माण किया है, लेकिन इसे नया नाम नहीं दिया गया है। तो पुरानी छवियां जो आपने "लटकती हुई छवि" बन गई हैं। वे पुरानी छवि वे हैं जो अनछुए हैं और जब आप डॉक चित्र चलाते हैं तो इसके नाम पर "" प्रदर्शित होता है।

docker system prune -a, यह अप्रयुक्त और झूलने वाली दोनों छवियों को हटा देगा। इसलिए, किसी भी कंटेनर में उपयोग की जा रही छवियां, चाहे वे बाहर निकाली गई हों या वर्तमान में चल रही हों, प्रभावित नहीं होंगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.