क्या नियमित आधार पर पुरानी डॉकर छवियों को साफ करने के लिए कोई सर्वोत्तम अभ्यास और / या उपकरण हैं?


13

क्या डोकर रजिस्ट्री से पुरानी छवियों को हटाने के लिए एक सुंदर तरीका या सबसे अच्छा अभ्यास है?

मुझे यहाँ बहुत सारे अनुरोध / मुद्दे दिखाई देते हैं: https://github.com/docker/docker-registry/labels/delete , लेकिन इसके लिए एक अच्छा / लोकप्रिय समाधान नहीं मिला।

तो, क्या कोई उपकरण या तकनीक है जो मुझे ऐसा करने में मदद करेगी?

इसके अलावा, क्या कोई सर्वोत्तम प्रथा है जिसे आप इसे करते समय पालन करते हैं?


2
क्या आप पूछ रहे हैं कि रजिस्ट्री को कैसे साफ करें? (जो आपके द्वारा प्रदान की गई लिंक और प्रश्न है), लेकिन स्वीकृत उत्तर रजिस्ट्री की सफाई नहीं कर रहा है, बल्कि आपके स्थानीय डॉकटर को साफ कर रहा है।
dalore

जवाबों:


10

मुझे Spotify / docker-gc के साथ अच्छी किस्मत मिली है । इसे क्रोन से या डॉकटर कंटेनर के रूप में चलाया जा सकता है।

एक साधारण डॉकटर कंटेनर और छवि कचरा संग्रह स्क्रिप्ट।

  • एक घंटे से अधिक समय से बाहर रखे कंटेनर हटा दिए जाते हैं।
  • छवियाँ जो हटाए जाने के बाद किसी भी शेष कंटेनर से संबंधित नहीं हैं।

2
पहली नज़र में, यह सभी बैश सामान के पीछे, कमोबेश @rombob के जवाब से वन-लाइनर्स के सबसेट को लगता है। क्या यह सच है, या कुछ "बुद्धिमत्ता" है docker-gcजिसमें मैं गायब हूँ?
AnoE

1
ओप लिंक और रजिस्ट्री से सफाई कैसे करें पर एक प्रश्न पूछते हैं, लेकिन रजिस्ट्री से डॉकटर-जीसी साफ नहीं होता है, यह सिर्फ आपके स्थानीय मशीन से साफ करता है। मुझे लगता है कि ओपी वास्तव में स्थानीय स्तर पर सफाई करने के लिए कह रहा था
10

डॉकर-जीसी के पेज अब docker system pruneइसके बजाय उपयोग करने की सलाह देते हैं । लेकिन मुझे पता नहीं चला कि डोकर के प्रून के साथ कुछ छवियों को कैसे हटाया जाए। यह कुछ छवियों को बाहर करने का एक तरीका है docker system prune?
अलेक्जेंडर आर्टेमेंको

9

इसे सबसे अच्छा अभ्यास नहीं कह सकते, लेकिन यह है कि हम क्रोन द्वारा ट्रिगर का उपयोग करते हैं, बेहतर सुझावों को देखकर खुश होते हैं।

echo "safely removing untagged images"
docker rmi $(docker images | awk '/<none>/{print $3}')

echo "safely removing stopped containers"
docker rm $(docker ps -a -q)

echo "safely removing old containers"
docker ps -a | awk '/weeks ago|months ago|days ago/{print $1}' | xargs --no-run-if-empty docker rm

echo "safely removing old images"
docker images | awk '/weeks ago|months ago|days ago/{print $3}' | xargs --no-run-if-empty docker rmi

echo "safely removing old volumes, custom rebuild of martin/docker-cleanup-volumes image"
docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(readlink -f /var/lib/docker):/var/lib/docker --rm example/docker-cleanup-volumes

echo "native cleanup Docker => 12"
docker system prune -f

कृपया grep और awk को चेन न करें, awk कमांड से पहले एक ही फिल्टर करें `regex {कमांड}`
Tensibai

1
AWT जादूगरों को खुश करने के लिए @Tensibai कुछ भी :)
rombob

बस के मामले में, यह सिर्फ पांडित्य नहीं है, आप प्रक्रिया को बचाते हैं और संदर्भ का एक बड़ा गुच्छा बदल जाता है :) यह यहां बहुत कुछ नहीं बदलता है, लेकिन इसके लिए वकालत करने का कोई भी अवसर अच्छा है :)
तेनसीबाई

@ टेंसीबाई निश्चित रूप से, अच्छी आदतें समय के साथ भुगतान करती हैं, हमारे लिए समय और पैसा खर्च होता है :)
रोमबॉब

विशेष रूप से जब आप पार्स / प्रारूप अरबों लाइनों आर इनपुट के लिए तैयार करने के लिए फ़ाइलों को लॉग करते हैं :) यहां मुझे कुछ दर्जन से अधिक लाइनों की उम्मीद नहीं है।
तेंसिबाई

4

अपनी स्थानीय मशीन (मैक) पर मेरे पास एक छोटी सी स्क्रिप्ट है जो मैंने पाया कि मैं समय-समय पर चलाता हूं जो सभी अतिरिक्त छवियों को साफ करता है- docker-for-mac.sh

अपने सर्वर के लिए मैं meltwater / docker-cleanup चलाता हूं जो समय - समय पर बाहर निकलने वाले कंटेनरों को साफ करता है और उन छवियों और संस्करणों को हटा देता है जो उपयोग में नहीं हैं।

मैं कोडमेसन पर अपने काम के लिए कई अलग-अलग डॉकरों की छवियों का उपयोग करता हूं जो कि इस तरह की स्क्रिप्ट मेरे लिए आवश्यक हैं। का आनंद लें!


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