निजी रजिस्ट्री से टैग की गई डॉकर छवि निकालें

मैं एक निजी डॉकर रजिस्ट्री में एक छवि से गलती से जोड़े गए टैग को कैसे हटा सकता हूं? विकल्प-आरएमआई डॉकर 1.9.1 में दूरस्थ छवियों के लिए काम नहीं करता है ।

user@ubuntu-user:~$ docker --version  Docker version 1.9.1, build a34a1d5user@ubuntu-user:~$ docker search myregistry:5000/user/imageNAME                                                                     myregistry:5000/user/image:20160119                                         myregistry:5000/user/image:20160119-20160120        user@ubuntu-user:~$ docker rmi myregistry:5000/user/image:20160119-20160120Error response from daemon: could not find image: no such id: myregistry:5000/user/image:20160119-20160120Error: failed to remove images: [myregistry:5000/user/image:20160119-20160120]

ऐसा लगता है कि आज तक रजिस्ट्री से छवियों को हटाने का कोई सरल तरीका नहीं है और रजिस्ट्री के लिए इसकी एक विशेषता की तरह दिखता है 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]$ 

इसे मैन्युअल रूप से रजिस्ट्री से ही हटाना है । गलती से गलत फ़ाइल को हटाने से बचने के लिए, मैंने इसका परीक्षण किया इस स्क्रिप्ट से github. मैं इस बात की कोई गारंटी नहीं लेता कि यह स्क्रिप्ट कैसे काम करती है (हालांकि मैंने इसका परीक्षण करने से पहले इसे जल्दी से जांच लिया) ।

इसलिए, मैंने एक परीक्षण किया और यह काम करने लगता है :)

[1] मुझे लगता है कि, आप डॉकर के साथ ही एक रजिस्ट्री चला रहे हैं ।

[anovil@ubuntu-anovil remove-registry]$ docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES88f8e1a1d7a7        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]$ 

[2] मैंने बस के साथ एक न्यूनतम डॉकरफाइल बनाया FROM alpine सामग्री और बनाया अल्पाइन: वी 1 और लोकलहोस्ट पर चल रही मेरी निजी रजिस्ट्री को धक्का दिया:5000 । इसे रजिस्ट्री से क्वेरी करते हुए, यह उम्मीद के मुताबिक वापस आ गया ।

[anovil@ubuntu-anovil remove-registry]$ curl -X GET localhost:5000/v2/alpine/tags/list{"name":"alpine","tags":["v1"]}[anovil@ubuntu-anovil remove-registry]$ 

[3] फिर मैं रजिस्ट्री में लॉग इन करता हूं docker exec और अपना प्रयोग करने से पहले डिस्क उपयोग की जाँच की

root@88f8e1a1d7a7:/# du -sch /var/lib/registry/                     2.5M    /var/lib/registry/2.5M    totalroot@88f8e1a1d7a7:/# 

[4] अपने मेजबान पर वापस लौटने के बाद मैंने एक भारी फ़ाइल (मोंगोडीबी । टीजीजेड) मेरे कंटेनर में और एक निर्मित और धक्का दिया संस्करण वी 2 बनाया ।

[anovil@ubuntu-anovil remove-registry]$ docker build -t localhost:5000/alpine:v2 .Sending build context to Docker daemon 61.99 MBStep 1 : FROM alpine ---> 2314ad3eeb90Step 2 : COPY mongodb.tgz /mongodb.tgz ---> d7c7645a3fe2Successfully built d7c7645a3fe2[anovil@ubuntu-anovil remove-registry]$ docker push localhost:5000/alpine:v2The 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]$ 

[5] रजिस्ट्री में फिर से आकार की जांच करने के बाद, यह बढ़कर 62 एमबी हो गया है:

root@88f8e1a1d7a7:/# du -sch /var/lib/registry/                                                                               62M /var/lib/registry/62M totalroot@88f8e1a1d7a7:/# 

[6] चलाने के लिए delete_docker_registry_image, आपको स्क्रिप्ट को कंटेनर में लाने की आवश्यकता है जो रजिस्ट्री की मेजबानी कर रहा है, ऐसा करने का एक विकल्प कर्ल के साथ है । साथ ही, इस स्क्रिप्ट की आवश्यकता है jq.

root@88f8e1a1d7a7:/# apt-get update && apt-get install -y curl jq...root@88f8e1a1d7a7:/#

[7] स्क्रिप्ट चलाएं, इसके साथ प्रयास करें --dry-run पहले विकल्प और संस्करण टैग (इस मामले में वी 2) को मत भूलना, एक अच्छा भी है -h

root@88f8e1a1d7a7:/# delete_docker_registry_image --image alpine:v2 --dry-runDRY_RUN: would have deleted tag directory: repositories/alpine/_manifests/tags/v2DRY_RUN: would have deleted manifest revision: repositories/alpine/_manifests/revisions/sha256/7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774DRY_RUN: would have deleted directory: blobs/sha256/e2/e2cc9aed084e01fa5cf93c09121035ac4d712113425ae68b678c28591beec5c6DRY_RUN: would have deleted directory: blobs/sha256/7a/7ada67971e952e353ab14d8f9bdd4e41e4c41099b05a5da09f2700b51d93908aDRY_RUN: would have deleted directory: blobs/sha256/7b/7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774DRY_RUN: would have deleted layer metadata directory: repositories/alpine/_layers/sha256/e2cc9aed084e01fa5cf93c09121035ac4d712113425ae68b678c28591beec5c6root@88f8e1a1d7a7:/# delete_docker_registry_image --image alpine:v2          root@88f8e1a1d7a7:/#

[8] और वोइला !!

root@88f8e1a1d7a7:/# du -sch /var/lib/registry/                     2.5M    /var/lib/registry/2.5M    totalroot@88f8e1a1d7a7:/#  

अभी हाल ही में यह अपने आप में भाग गया, लेकिन फिर सोचा, क्यों हटाएं, मैं अभी एक पुराने संस्करण को फिर से जारी करूंगा:

docker push my/image:1.0.0docker push my/image:1.0.1 # This is brokendocker tag  my/image:1.0.0 my/image:1.0.2docker push my/image:1.0.2

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

यदि आप इसे हटाना चाहते हैं तो इसका कारण यह है कि इसमें रहस्य हैं या कुछ ऐसा है जिसे आप बाहर नहीं निकालना चाहते हैं, अन्य समाधान बेहतर हैं, लेकिन मान लें कि जो कुछ भी था वह अब ज्ञात है और इसे बदल दें (पासवर्ड, कुंजी, जो भी हो) ।