ऐसा लगता है कि रजिस्ट्री से छवियों को हटाने के लिए आज की कोई सरल विधि नहीं है और रजिस्ट्री 2.1 मील के पत्थर के लिए इसकी विशेषता की तरह दिखता है ।
विकल्पों में से एक जो हमारे पास है आज यह काम नहीं कर रहा है
anovil@ubuntu-anovil remove-registry]$ curl -X DELETE localhost:5000/v2/alpine/manifests/v1
{"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]}
[anovil@ubuntu-anovil remove-registry]$
इसे मैन्युअल रूप से रजिस्ट्री से स्वयं निकालना है। बस गलती से गलत फ़ाइल को हटाने से बचने के लिए, मैंने इसे इस स्क्रिप्ट के साथ जीथब से परीक्षण किया । मैं इस बात की कोई गारंटी नहीं लेता कि यह स्क्रिप्ट कैसे काम करती है (हालांकि मैंने इसे जांचने से पहले इसे जल्दी से जाँच लिया था)।
तो, मैंने एक परीक्षण किया और वह काम करने लगता है :)
[१] मैं यह मानता हूँ कि, आप स्वयं डॉकटर के साथ एक रजिस्ट्री चला रहे हैं।
[anovil@ubuntu-anovil remove-registry]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
88f8e1a1d7a7 registry:2 "/bin/registry /etc/d" 37 minutes ago Up 37 minutes 0.0.0.0:5000->5000/tcp registry
[anovil@ubuntu-anovil remove-registry]$
[२] मैंने केवल FROM alpine
सामग्री के साथ एक न्यूनतम डॉकरीफाइल बनाया और अल्पाइन: v1 बनाया और लोकलहोस्ट ५,००० पर चलने वाली मेरी निजी रजिस्ट्री में धकेल दिया। रजिस्ट्री से इसे छोड़कर, यह उम्मीद के मुताबिक वापस आ गया।
[anovil@ubuntu-anovil remove-registry]$ curl -X GET localhost:5000/v2/alpine/tags/list
{"name":"alpine","tags":["v1"]}
[anovil@ubuntu-anovil remove-registry]$
[३] तब मैं रजिस्ट्री में लॉग इन करता हूं docker exec
और अपना प्रयोग करने से पहले डिस्क के उपयोग की जांच करता हूं
root@88f8e1a1d7a7:/# du -sch /var/lib/registry/
2.5M /var/lib/registry/
2.5M total
root@88f8e1a1d7a7:/#
[४] अपने मेजबान में वापस लौटने के बाद मैंने अपने कंटेनर में एक भारी फ़ाइल (mongodb.tgz) की नकल की और एक निर्मित और धक्का दिया संस्करण v2 बनाया।
[anovil@ubuntu-anovil remove-registry]$ docker build -t localhost:5000/alpine:v2 .
Sending build context to Docker daemon 61.99 MB
Step 1 : FROM alpine
---> 2314ad3eeb90
Step 2 : COPY mongodb.tgz /mongodb.tgz
---> d7c7645a3fe2
Successfully built d7c7645a3fe2
[anovil@ubuntu-anovil remove-registry]$ docker push localhost:5000/alpine:v2
The push refers to a repository [localhost:5000/alpine] (len: 1)
d7c7645a3fe2: Pushed
5ff05309724e: Image already exists
v2: digest: sha256:7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774 size: 4467
[anovil@ubuntu-anovil remove-registry]$
[५] रजिस्ट्री में फिर से आकार की जाँच करने के बाद, यह बढ़कर ६२ एमबी हो गया:
root@88f8e1a1d7a7:/# du -sch /var/lib/registry/
62M /var/lib/registry/
62M total
root@88f8e1a1d7a7:/#
[६] चलाने के लिए delete_docker_registry_image
, आपको स्क्रिप्ट को उस कंटेनर में लाना होगा जो रजिस्ट्री की मेजबानी कर रहा है, ऐसा करने का एक विकल्प कर्ल के साथ है। साथ ही, इस स्क्रिप्ट की आवश्यकता है jq
।
root@88f8e1a1d7a7:/# apt-get update && apt-get install -y curl jq
...
root@88f8e1a1d7a7:/#
[[] स्क्रिप्ट चलाएँ, --dry-run
पहले विकल्प के साथ प्रयास करें और संस्करण टैग (इस मामले में v2) को न भूलें, एक अच्छा भी है-h
root@88f8e1a1d7a7:/# delete_docker_registry_image --image alpine:v2 --dry-run
DRY_RUN: would have deleted tag directory: repositories/alpine/_manifests/tags/v2
DRY_RUN: would have deleted manifest revision: repositories/alpine/_manifests/revisions/sha256/7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774
DRY_RUN: would have deleted directory: blobs/sha256/e2/e2cc9aed084e01fa5cf93c09121035ac4d712113425ae68b678c28591beec5c6
DRY_RUN: would have deleted directory: blobs/sha256/7a/7ada67971e952e353ab14d8f9bdd4e41e4c41099b05a5da09f2700b51d93908a
DRY_RUN: would have deleted directory: blobs/sha256/7b/7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774
DRY_RUN: would have deleted layer metadata directory: repositories/alpine/_layers/sha256/e2cc9aed084e01fa5cf93c09121035ac4d712113425ae68b678c28591beec5c6
root@88f8e1a1d7a7:/# delete_docker_registry_image --image alpine:v2
root@88f8e1a1d7a7:/#
[[] और वोइला !!
root@88f8e1a1d7a7:/# du -sch /var/lib/registry/
2.5M /var/lib/registry/
2.5M total
root@88f8e1a1d7a7:/#