आधिकारिक दस्तावेज के बाद (https://docs.docker.com/registry/spec/api/#deleting-an-image) मैं एक छवि को सफलतापूर्वक हटाने में सक्षम हूं । जैसा कि अपेक्षित था, हटाने के बाद, छवि को अब खींचा नहीं जा सकता है और न ही इसके मैनिफेस्ट को एपीआई के माध्यम से बुलाया जा सकता है ।
मुझे लगता है जैसे मैं मुश्किल हिस्सा किया मिल गया है, हालांकि समस्या यह है कि रेपो अभी भी नीचे सूचीबद्ध है /v2/_catalog
विलोपन समाप्त होने के बाद । मैं रजिस्ट्री को पूरी तरह से शुद्ध करने की कोशिश कर रहा हूं ।
यहाँ मेरी रजिस्ट्री कंपोज़ फ़ाइल है:
registry: image: registry:2.5.2 container_name: registry-test ports: - 5007:5000 environment: REGISTRY_STORAGE: s3 REGISTRY_HTTP_TLS_CERTIFICATE: /etc/cert.crt REGISTRY_HTTP_TLS_KEY: /etc/cert.key REGISTRY_STORAGE_S3_ACCESSKEY: ****** REGISTRY_STORAGE_S3_SECRETKEY: ****** REGISTRY_STORAGE_S3_REGION: us-west-1 REGISTRY_STORAGE_S3_BUCKET: ****** REGISTRY_STORAGE_S3_SECURE: "true" REGISTRY_STORAGE_DELETE_ENABLED: "true" volumes: - /dockerdata/volumes/registry-test/etc/cert.crt:/etc/cert.crt - /dockerdata/volumes/registry-test/etc/cert.key:/etc/cert.key restart: unless-stopped
छवि को हटाने के लिए मैंने जो किया, उस पर उच्च-स्तरीय विधि यहां दी गई है:
छवि डाइजेस्ट इकट्ठा करें:
HEAD https://myprivateregistry:5001/v2/myimage/manifests/mytag
साथ में"Accept: application/vnd.docker.distribution.manifest.v2+json"
कॉल पर हेडर में जोड़ा गयाकॉल हेडर कुंजी देता है
Docker-Content-Digest
एक मूल्य के साथ जैसेsha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd
चरण 2 से उस मान का उपयोग करके, हटाएं कॉल चलाएं:
DELETE https://myprivateregistry:5001/v2/myimage/manifests/sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd
रजिस्ट्री एपीआई रिटर्न
202 Accepted
कचरा संग्रह मैन्युअल रूप से चलाएं:
registry garbage-collect /etc/docker/registry/config.yml
कचरा कलेक्टर डिस्क से संबंधित ब्लॉब्स को हटा देता है (लॉग यहां छोड़ा गया है, लेकिन यह सफलतापूर्वक ब्लॉब्स को हटा देता है)
इस बिंदु पर मैं पुष्टि कर सकता हूं कि ब्लॉब्स डिस्क से पूरी तरह से हटा दिए गए हैं और मैं अब छवि विवरण नहीं कह सकता (जैसे ऊपर चरण 1 में) तो मुझे लगा कि मैं कर चुका हूं ।
हालांकि, जब चल रहा है: /v2/_catalog
मेरा संबद्ध रेपो अभी भी सूचीबद्ध है (भले ही इसके भीतर कोई चित्र न हों)! जाहिर है कि इसे खींच या इस्तेमाल नहीं किया जा सकता है, लेकिन अब मैं उस सूची से उस रेपो को पूरी तरह से कैसे हटा सकता हूं कि उसके पास इससे जुड़ी कोई छवि नहीं है?
मैं कहीं नहीं देखता कि कैसे ठीक से इसे एपीआई प्रलेखन पृष्ठ पर निकालें । शायद मैं इसे कहीं याद कर रहा हूँ?
संपादित करें -
मैं कुछ और जानकारी जोड़ना चाहता था कि उपरोक्त विलोपन से पहले और बाद में रजिस्ट्री कैसे दिखती है ।
ऊपर हटाए गए ऑपरेशन से पहले:
docker/registry/v2/repositories/myimage/_manifests/revisions/...docker/registry/v2/repositories/myimage/_manifests/tags/... docker/registry/v2/repositories/myimage/_layers/sha256/... (5 layers listed)docker/registry/v2/blobs/sha256/...
ऊपर हटाए गए ऑपरेशन के बाद:
docker/registry/v2/repositories/myimage/_layers/sha256/... (5 layers listed)
तो केवल एक चीज पर छोड़ दिया है _layers
सूचीबद्ध 5 एक्स परतों के साथ निर्देशिका । यही कारण है कि यह अभी भी सूचीबद्ध है _catalog
जब मैं हटाता हूं myimage
फ़ोल्डर (से docker/registry/v2/repositories/myimage
) तो भंडार अब में नहीं दिखाया गया है _catalog
यह इसे शुद्ध करने की एक विधि प्रतीत होती है _catalog
लिस्टिंग। हालांकि-क्या होगा यदि किसी छवि में 2 एक्स टैग हैं, फिर भी केवल 1 हटा दिया गया है-क्या कुछ भी हटाने का कोई कारण है _layers
उस मामले में? एक छवि के कई संस्करणों के साथ इसे कैसे संभाला जाएगा? जाहिर है मैं सिर्फ क्लोब नहीं कर सकता _layers
निर्देशिका अंतिम विधि के रूप में, वास्तविक दुनिया में, एक छवि के कई टैग किए गए संस्करण होंगे । इसलिए इसे समझदारी से करना होगा ।
मुझे बस डॉकर रजिस्ट्री के रखरखाव/रखरखाव और न ही स्कीमा के लिए किसी भी दस्तावेज को खोजने में मुश्किल हो रही है
_layers
उपनिर्देशिका और कचरा कलेक्टर उस निर्देशिका को साफ क्यों नहीं करता है जो वह मैनिफेस्ट और ब्लब्स के साथ करता है ।