একটি ব্যক্তিগত ডকার রেজিস্ট্রি থেকে চিত্রগুলি কীভাবে মুছবেন?


163

আমি একটি বেসরকারী ডকার রেজিস্ট্রি চালাচ্ছি এবং আমি latestকোনও সংগ্রহশালা থেকে সমস্ত চিত্র মুছতে চাই । আমি পুরো সংগ্রহস্থল মুছতে চাই না, এর ভিতরে থাকা কয়েকটি চিত্র। এপিআই ডক্স এই কাজ করতে একটি উপায় উল্লেখ না, কিন্তু নিশ্চয় এটা সম্ভব?


1
গৃহীত উত্তর আর সঠিক নয় (যদিও অবশ্যই খুব ভাল)। আপনি ডিলিট / ভি 2 / <নাম> / ম্যানিফাইস্ট
মাইকেল জেলেনস্কি

উত্তর:


116

বর্তমানে আপনি সেই কাজের জন্য রেজিস্ট্রি এপিআই ব্যবহার করতে পারবেন না। এটি আপনাকে কেবল কোনও সংগ্রহশালা বা একটি নির্দিষ্ট ট্যাগ মুছতে দেয়।

সাধারণভাবে, একটি সংগ্রহস্থল মুছে ফেলার অর্থ, এই রেপো সম্পর্কিত সমস্ত ট্যাগ মুছে ফেলা হয়েছে।

ট্যাগ মুছে ফেলার অর্থ, একটি চিত্র এবং একটি ট্যাগের মধ্যে সংযোগটি মুছে ফেলা হয়েছে।

উপরেরগুলির মধ্যে একটিও একটি চিত্র মুছে ফেলবে না। এগুলি আপনার ডিস্কে রেখে দেওয়া হয়েছে।


কার্যসংক্রান্ত

এই কর্মপরীক্ষার জন্য আপনার স্থানীয়ভাবে ডকারের চিত্রগুলি সংরক্ষণ করা উচিত।

আপনার সমাধানের জন্য একটি কার্যপ্রণালী হ'ল সর্বশেষ ট্যাগগুলি বাদ দিয়ে সমস্তগুলি মুছে ফেলা এবং এর মাধ্যমে সম্ভাব্যভাবে সম্পর্কিত চিত্রগুলির রেফারেন্সটি সরিয়ে দেওয়া হবে। তারপরে আপনি সমস্ত চিত্রগুলি সরাতে এই স্ক্রিপ্টটি চালাতে পারেন , যা কোনও ট্যাগ বা কোনও ব্যবহৃত চিত্রের পূর্বসূরি দ্বারা রেফারেন্স করা হয় না।

পরিভাষা (চিত্র এবং ট্যাগ)

এই হল যেখানে বড় হাতের অক্ষরে (যেমন একটি চিত্র গ্রাফ বিবেচনা করুন A, B, ...) সংক্ষিপ্ত চিত্র আইডিগুলি এবং প্রতিনিধিত্ব <-মানে যে একটি চিত্র অন্য চিত্র উপর ভিত্তি করে:

 A <- B <- C <- D

এখন আমরা ছবিতে ট্যাগ যুক্ত:

 A <- B <- C <- D
           |    |
           |    <version2>
           <version1>

এখানে ট্যাগটি <version1>চিত্রটির উল্লেখ করে Cএবং ট্যাগটি <version2>চিত্রটির উল্লেখ করে D

আপনার প্রশ্ন পরিমার্জন

আপনার প্রশ্নে আপনি বলেছিলেন যে আপনি সরাতে চেয়েছিলেন

সমস্ত চিত্র কিন্তু latest

। এখন, এই পরিভাষাটি বেশ সঠিক নয়। আপনি ছবি এবং ট্যাগ মিশ্রিত করেছেন। গ্রাফটি দেখে আমি মনে করি আপনি একমত হবেন যে ট্যাগটি <version2>সর্বশেষ সংস্করণটি উপস্থাপন করে। আসলে, এই প্রশ্ন অনুসারে আপনার কাছে এমন একটি ট্যাগ থাকতে পারে যা সর্বশেষ সংস্করণটি উপস্থাপন করে:

 A <- B <- C <- D
           |    |
           |    <version2>
           |    <latest>
           <version1>

যেহেতু <latest>ট্যাগ রেফারেন্স ইমেজটি Dআমি আপনাকে জিজ্ঞাসা করছি: আপনি কি সত্যই চিত্র বাদে সব মুছতে চান D? সম্ভবত না!

আপনি যদি একটি ট্যাগ মুছে ফেলেন তবে কী হবে?

আপনি যদি <version1>ডকার REST এপিআই ব্যবহার করে ট্যাগটি মুছে ফেলেন তবে আপনি এটি পাবেন:

 A <- B <- C <- D
                |
                <version2>
                <latest>

মনে রাখবেন: ডকার কখনই কোনও চিত্র মুছবেন না! এমনকি যদি তা করেও, এই ক্ষেত্রে এটি কোনও চিত্র মুছতে পারে না, যেহেতু চিত্রটি ইমেজটির Cজন্য পূর্বপুরুষের অংশ Dযা ট্যাগ হয়।

এমনকি আপনি যদি এই স্ক্রিপ্টটি ব্যবহার করেন তবে কোনও চিত্র মুছে ফেলা হবে না।

যখন কোনও চিত্র মুছতে পারে

যখন কেউ আপনার রেজিস্ট্রিটিকে টানতে বা ধাক্কা দিতে পারে তখন আপনি নিয়ন্ত্রণ করতে পারেন (যেমন: REST ইন্টারফেস অক্ষম করে)। অন্য কোনও চিত্র যদি এর উপর ভিত্তি করে না থাকে এবং কোনও ট্যাগ এটি উল্লেখ না করে আপনি কোনও চিত্র গ্রাফ থেকে কোনও চিত্র মুছতে পারেন।

লক্ষ্য করুন যে নিম্নলিখিত গ্রাফে, ইমেজ Dহয় না উপর ভিত্তি করে Cকিন্তু উপর B। সুতরাং, Dউপর নির্ভর করে না C। আপনি যদি <version1>এই গ্রাফের ট্যাগ মুছে ফেলেন তবে Cচিত্রটি কোনও চিত্র ব্যবহার করবে না এবং এই স্ক্রিপ্টটি এটি মুছে ফেলতে পারে।

 A <- B <--------- D
      \            |
       \           <version2>
        \          <latest>
         \ <- C
              |
              <version1>

পরিষ্কার করার পরে আপনার চিত্রের গ্রাফটি এমন দেখাচ্ছে:

 A <- B <- D
           |
           <version2>
           <latest>

এই কমান্ডের সাহায্যে আপনি চান কি?


আপনি ঠিক বলেছেন - ট্যাগগুলি মুছে ফেলা আসলে সম্পর্কিত চিত্রগুলি মুছেনি। বাক্সে ssh অ্যাক্সেস দেওয়া চিত্রগুলি মুছে ফেলার কোনও উপায় আছে কি?
লিও

1
আমি আমার উত্তরটি এমন একটি কাজের সাথে সম্পাদনা করেছি যা আমার জন্য কাজ করে। আমি আসা করি এটা সাহায্য করবে.
Konrad Kleine

ঠিক এটি - আমি বুঝতে পারি যে চিত্রগুলি ক্রমবর্ধমানভাবে নির্মিত হয়, তবে সেই মৃত শাখাগুলি ছাঁটাই করার জন্য আমার একটি উপায় প্রয়োজন। ধন্যবাদ!
লিও

@ কনরাডক্লাইন কীভাবে আপনি রেজিস্ট্রি থেকে প্রাপ্ত চিত্রগুলির তালিকা থেকে চিত্রগুলি গ্রাফটি তৈরি করবেন?
রাফায়েল ব্যারোস

9
আবর্জনা সংগ্রহ অবশেষে রেজিস্ট্রি v2.4.0 এ এসে পৌঁছেছে ডকস.ডোকার. com
মার্কাস লিন্ডবার্গ

68

আমি আমার রেজিস্ট্রি নিয়ে একই সমস্যার মুখোমুখি হয়েছি তখন আমি একটি ব্লগ পৃষ্ঠা থেকে নীচে তালিকাবদ্ধ সমাধানটি চেষ্টা করেছি। এটা কাজ করে।

পদক্ষেপ 1: তালিকাভুক্ত ক্যাটালগগুলি

আপনি এই url এ কল করে আপনার ক্যাটালগগুলি তালিকাভুক্ত করতে পারেন:

http://YourPrivateRegistyIP:5000/v2/_catalog

প্রতিক্রিয়া নিম্নলিখিত বিন্যাসে হবে:

{
  "repositories": [
    <name>,
    ...
  ]
}

পদক্ষেপ 2: সম্পর্কিত ক্যাটালগের জন্য ট্যাগের তালিকা দেওয়া

আপনি এই url এ কল করে আপনার ক্যাটালগের ট্যাগগুলি তালিকাভুক্ত করতে পারেন:

http://YourPrivateRegistyIP:5000/v2/<name>/tags/list

প্রতিক্রিয়া নিম্নলিখিত বিন্যাসে হবে:

{
"name": <name>,
"tags": [
    <tag>,
    ...
]

}

পদক্ষেপ 3: সম্পর্কিত ট্যাগের জন্য ম্যানিফেস্ট মানটি তালিকাভুক্ত করুন

আপনি এই কমান্ডটি ডকার রেজিস্ট্রি ধারকটিতে চালাতে পারেন:

curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET http://localhost:5000/v2/<name>/manifests/<tag> 2>&1 | grep Docker-Content-Digest | awk '{print ($3)}'

প্রতিক্রিয়া নিম্নলিখিত বিন্যাসে হবে:

sha256:6de813fb93debd551ea6781e90b02f1f93efab9d882a6cd06bbd96a07188b073

ম্যানিফেস্ট মান সহ নীচে প্রদত্ত কমান্ডটি চালান:

curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X DELETE http://127.0.0.1:5000/v2/<name>/manifests/sha256:6de813fb93debd551ea6781e90b02f1f93efab9d882a6cd06bbd96a07188b073

পদক্ষেপ 4: চিহ্নিত প্রকাশগুলি মুছুন

আপনার ডকার রেজিস্টি পাত্রে এই কমান্ডটি চালান:

bin/registry garbage-collect  /etc/docker/registry/config.yml  

এখানে আমার কনফিগারেশন

root@c695814325f4:/etc# cat /etc/docker/registry/config.yml
version: 0.1
log:
  fields:
  service: registry
storage:
    cache:
        blobdescriptor: inmemory
    filesystem:
        rootdirectory: /var/lib/registry
    delete:
        enabled: true
http:
    addr: :5000
    headers:
        X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

কমান্ডগুলি সাফল্য পেয়েছে, " Deleteing blob: /docker/..." সম্পর্কে বার্তা সহ তবে এটি ব্যবহৃত ডিস্কের স্থান পরিবর্তন করে না। বিন / রেজিস্ট্রি ব্যবহার করে github.com/docker/dist वितरण v2.4.1
জেমস থমাসমুন 1979

3
কোনও চিত্র মুছতে, আপনার নিবন্ধটি REGISTRY_STORAGE_DELETE_ENABLED = সত্য পরামিতি সহ চালানো উচিত।
আদিল

3
আমি "মুছুন: সক্ষম" মানটিকে /etc/docker/registry/config.yml ফাইলে সত্য হিসাবে সেট করেছি। এই কনফিগারেশনের জন্য REGISTRY_STORAGE_DELETE_ENABLED ভেরিয়েবল @ অ্যাডিলিহান
ইয়াভুজ সার্ট

পুনরায়: পদক্ষেপ 3, "ডকার-সামগ্রী-ডাইজেস্ট" অবশ্যই শিরোনামে থাকা উচিত? (এটি কার্ল আউটপুটে না দেখে)। আমি সফলভাবে চিহ্নিত করেছি তা চিহ্নিত করার জন্য চিহ্নিত মেনিফেস্টটি (গুলি) মুছে ফেলার আগে আমি কি ম্যানিফেস্টকে চিহ্নিত করার ফলাফলগুলি দেখতে পাব? দেখে মনে হচ্ছে এটি আমি 202 জবাব দিই না কেন তা আমি যাই পাঠাই না কেন।
স্টিভডাব্লু

Docker-Content-Digestঅংশ ছোট হাতের (Docker ইঞ্জিন v18.09.2 উপর পরীক্ষা) অর্থাত থাকা উচিতcurl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET http://localhost:5000/v2/<name>/manifests/<tag> 2>&1 | grep docker-content-digest | awk '{print ($3)}'
মুহাম্মদ আব্দুর রহমান

63

বর্তমান v2রেজিস্ট্রি এখন মুছে ফেলা সমর্থন করেDELETE /v2/<name>/manifests/<reference>

দেখুন: https://github.com/docker/dist वितरण/ blob/ master/ docs/ spec/ api.md#deleting-an-image

কাজের ব্যবহার: https://github.com/byrnedo/docker-reg-tool

সম্পাদনা করুন: <reference>উপরোক্ত প্রকাশটি অনুরোধ করা থেকে পুনরুদ্ধার করা যেতে পারে

GET /v2/<name>/manifests/<tag>

এবং Docker-Content-Digestপ্রতিক্রিয়া শিরোনাম পরীক্ষা করা ।

সম্পাদনা 2: নিম্নলিখিত এনভিও সেট সহ আপনার রেজিস্ট্রি চালাতে হতে পারে:

REGISTRY_STORAGE_DELETE_ENABLED="true"

সম্পাদনা 3: এই ডিস্কের স্থানটি খালি করতে আপনাকে আবর্জনা সংগ্রহ করতে হতে পারে: https://docs.docker.com/registry/garbage-collection/


3
এখানে আরও কিছু উত্তর দেখায় যে কীভাবে ম্যানিফেস্ট রেফারেন্স হ্যাশ বের করতে হয়। এটি কোনও কিছুতে পাস করার জন্য একটি ট্যাগ অনুবাদ করা প্রয়োজন DELETE
জেমস থমাসমুন 1979

অসমর্থিত ত্রুটি পাওয়া। আমি রেফারেন্স হিসাবে সঠিক ডাইজেস্ট মান দিয়েছি।
উইনস্টার

1
রেফারেন্স হ্যাশ পাওয়ার বিষয়ে নির্দেশাবলী সহ @ জেমস থমাস মুন ১৯৯৯ আপডেট হয়েছে।
বাইরনেডো

11
ভি 2 {"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]}
তেও

1
@

17

সমস্যা ঘ

আপনি উল্লেখ করেছেন এটি এটি আপনার ব্যক্তিগত ডকার রেজিস্ট্রি ছিল, সুতরাং আপনার সম্ভবত হাব রেজিস্ট্রি এপিআই ডকটির পরিবর্তে রেজিস্ট্রি এপিআই পরীক্ষা করা দরকার , এটি আপনার দেওয়া লিঙ্কটি।

সমস্যা 2

ডকার রেজিস্ট্রি এপিআই একটি ক্লায়েন্ট / সার্ভার প্রোটোকল, এটি ব্যাক-এন্ডে চিত্রগুলি সরিয়ে ফেলতে হবে কিনা তা নিয়ে সার্ভারের প্রয়োগের বিষয়। (আমি অনুমান করি)

DELETE /v1/repositories/(namespace)/(repository)/tags/(tag*)

বিস্তারিত ব্যাখ্যা

আমি ডেমো নীচে এটি আপনার প্রশ্নগুলির জন্য আমার বোঝার হিসাবে আপনার বর্ণনা থেকে এখন কীভাবে কাজ করে।

আপনি প্রাইভেট ডকার রেজিস্ট্রি চালান, আমি ডিফল্ট ব্যবহার করি এবং 5000বন্দরে শুনি

docker run -d -p 5000:5000 registry

তারপরে আমি স্থানীয় চিত্রটি ট্যাগ করি এবং এটিতে pushোকান।

$ docker tag ubuntu localhost:5000/ubuntu
$ docker push localhost:5000/ubuntu
The push refers to a repository [localhost:5000/ubuntu] (len: 1)
Sending image list
Pushing repository localhost:5000/ubuntu (1 tags)
511136ea3c5a: Image successfully pushed
d7ac5e4f1812: Image successfully pushed
2f4b4d6a4a06: Image successfully pushed
83ff768040a0: Image successfully pushed
6c37f792ddac: Image successfully pushed
e54ca5efa2e9: Image successfully pushed
Pushing tag for rev [e54ca5efa2e9] on {http://localhost:5000/v1/repositories/ubuntu/tags/latest}

এরপরে আপনি রেজিস্ট্রি এপিআই ব্যবহার করতে পারেন এটি আপনার ব্যক্তিগত ডকার রেজিস্ট্রিতে বিদ্যমান আছে তা পরীক্ষা করতে

$ curl -X GET localhost:5000/v1/repositories/ubuntu/tags
{"latest": "e54ca5efa2e962582a223ca9810f7f1b62ea9b5c3975d14a5da79d3bf6020f37"}

এখন আমি সেই এপিআই ব্যবহার করে ট্যাগটি মুছতে পারি !!

$ curl -X DELETE localhost:5000/v1/repositories/ubuntu/tags/latest
true

আবার চেক করুন, ট্যাগটি আপনার ব্যক্তিগত রেজিস্ট্রি সার্ভারে বিদ্যমান নেই

$ curl -X GET localhost:5000/v1/repositories/ubuntu/tags/latest
{"error": "Tag not found"}

2
দয়া করে এই আদেশটি কেন সহায়তা করে না তার ব্যাখ্যা জন্য আমার উত্তরটি দেখুন।
কনরাড ক্লাইন

2
আপনি ট্যাগগুলি মুছুন তবে চিত্রের ডেটা নয়। দ্বিতীয়টি আপনি ট্যাগ মুছে ফেলার পরে আমি স্ক্রিপ্ট দ্বারা উল্লেখ করেছি। আমি ট্যাগ মুছতে রেজিস্ট্রি এপিআইও ব্যবহার করি।
Konrad Kleine

3
প্রোটোকলের দৃষ্টিকোণ থেকে এটি প্রতিটি রেজিস্ট্রি এপিআই সার্ভারের প্রয়োগের অবধি, এটি বিদ্যমান নেই।
ল্যারি

আপনি ঠিক বলেছেন যে এটি বাস্তবায়নের উপরে রয়েছে - তবে আমি নীতিগত registryচিত্র থেকে চিত্রের ডেটা মোছার উপায় খুঁজছিলাম / করছি । এসএসএইচিং এবং স্ক্রিপ্ট চালানো কাজটি আদর্শ না হলেও। পার্শ্ব নোট হিসাবে আমি এখনও মনে করি এটি একটি অসম্পূর্ণ এপিআই - আপনি ট্যাগগুলি মুছতে পারেন, তবে আপনি পেলে /imagesসমস্ত বাম চিত্রের ডেটা দেখতে পাবেন।
লিও

রেজিস্ট্রি এপিআই উল্লেখ করার জন্য ধন্যবাদ, ব্যক্তিগত রেজিস্ট্রিতে কোনও চিত্র মুছে ফেলার উপায় খুঁজছিলেন। এই পদ্ধতিটি আমার পক্ষে যথেষ্ট ভাল এমনকি এটি যদি কেবল 'ডিসট্যাগিং' না করে বাস্তবে ডিস্কের জায়গা খালি করে না।
হাওয়ার্ড লি

16

এটি সত্যিই কুৎসিত তবে এটি কাজ করে, রেজিস্ট্রিতে পাঠ্য পরীক্ষা করা হয়: 2.5.1 মুছুন সক্ষম করার জন্য কনফিগারেশন আপডেট করার পরেও আমি মুছে ফেলা সহজভাবে পরিচালনা করতে পরিচালনা করি না। আইডিটি পুনরুদ্ধার করা সত্যিই কঠিন ছিল, এটি পেতে লগইন করতে হয়েছিল, কিছুটা ভুল বুঝাবুঝি হতে পারে। যাইহোক, নিম্নলিখিত কাজ করে:

  1. ধারকটিতে লগইন করুন

    docker exec -it registry sh
    
  2. আপনার ধারক এবং ধারক সংস্করণের সাথে মেলে ভেরিয়েবলগুলি সংজ্ঞায়িত করুন:

    export NAME="google/cadvisor"
    export VERSION="v0.24.1"
    
  3. রেজিস্ট্রি ডিরেক্টরিতে সরান:

    cd /var/lib/registry/docker/registry/v2
    
  4. আপনার হ্যাশ সম্পর্কিত ফাইলগুলি মুছুন:

    find . | grep `ls ./repositories/$NAME/_manifests/tags/$VERSION/index/sha256`| xargs rm -rf $1
    
  5. প্রকাশগুলি মুছুন:

    rm -rf ./repositories/$NAME/_manifests/tags/$VERSION
    
  6. প্রস্থান

    exit
    
  7. জিসি চালান:

    docker exec -it registry  bin/registry garbage-collect  /etc/docker/registry/config.yml
    
  8. যদি সমস্ত কিছু সঠিকভাবে করা হয় তবে মুছে ফেলা ব্লবগুলি সম্পর্কে কিছু তথ্য প্রদর্শিত হবে।


আমি উপরে উল্লিখিত একই পদক্ষেপগুলি অনুসরণ করেছি, কিন্তু যখন আমি ডকার রেজিস্ট্রি {ধারক} ডিস্ক ব্যবহার পরীক্ষা করেছিলাম তখন পদক্ষেপগুলি করার আগে এটি একই রকম দেখাচ্ছে ... কেন কোনও ধারণা কেন?
সাভিও ম্যাথিউ

কাজ করে না চেক করা সহজ। আপনি যখন নিম্নলিখিত পদক্ষেপগুলি করেন এবং আবার রেপোতে চাপ দিন তখন এটিতে "064794e955a6: স্তর ইতিমধ্যে বিদ্যমান" বলে জানিয়েছে
ওদুয়ান

8

কিছু ক্লায়েন্ট রয়েছে (পাইথন, রুবি ইত্যাদিতে) যা ঠিক তা করে। আমার স্বাদ জন্য, আমার রেজিস্ট্রি সার্ভারে একটি রানটাইম (যেমন পাইথন) ইনস্টল করা টেকসই নয়, কেবলমাত্র আমার রেজিস্ট্রি গৃহকর্মের জন্য!


deckschrubberআমার সমাধানটিও তাই :

go get github.com/fraunhoferfokus/deckschrubber
$GOPATH/bin/deckschrubber

একটি নির্দিষ্ট বয়সের চেয়ে পুরানো চিত্রগুলি স্বয়ংক্রিয়ভাবে মোছা হয়। বয়স ব্যবহার সুনির্দিষ্ট করা যেতে পারে -year, -month, -day, অথবা তাদের সংমিশ্রণ:

$GOPATH/bin/deckschrubber -month 2 -day 13 -registry http://registry:5000

আপডেট : এখানে ডেক্সক্রাব্বরের একটি সংক্ষিপ্ত পরিচিতি


1
deckschrubberএটি বেশ ভাল - ইনস্টল করা খুব সহজ (একক বাইনারি), এবং আপনাকে বয়সের পাশাপাশি নামের সাথে চিত্রগুলি মুছে ফেলতে দেয় (রেগেক্স ম্যাচের সাথে)।
রিচভেল

ERRO[0000] Could not delete image! repo=.... tag=latest: /
সাইকথারগন

আপনার স্পেসিফিকেশনটি সঠিক, তবে সিসিথারগন অসম্ভব বলা সম্ভব নয়।
জিটার

সতর্কতা: আমার সংগ্রহস্থলের উপর আক্ষরিক কিছুই করেনি।
রিচার্ড ওয়ারবার্টন

দুর্ভাগ্যক্রমে, এটি এমন চিত্রগুলি সরিয়ে ফেলবে না যার ট্যাগ নেই। সুতরাং আপনি যদি কোনও একক ট্যাগগুলিতে চিত্রগুলিকে ঠেলাঠেলি করে রাখেন তবে এটি কেবল যেটি ট্যাগ রয়েছে তা কেবল অন্যটি নয় যাচাই করবে।
ক্রিস্টিয়ান

1

সংক্ষেপে;

1) আপনাকে অবশ্যই একটি ডকার রেপো এর RepoDigests এর জন্য নিম্নলিখিত কমান্ডটি টাইপ করতে হবে;

## docker inspect <registry-host>:<registry-port>/<image-name>:<tag>
> docker inspect 174.24.100.50:8448/example-image:latest


[
    {
        "Id": "sha256:16c5af74ed970b1671fe095e063e255e0160900a0e12e1f8a93d75afe2fb860c",
        "RepoTags": [
            "174.24.100.50:8448/example-image:latest",
            "example-image:latest"
        ],
        "RepoDigests": [
            "174.24.100.50:8448/example-image@sha256:5580b2110c65a1f2567eeacae18a3aec0a31d88d2504aa257a2fecf4f47695e6"
        ],
...
...

gest {ডাইজেস্ট} = sha256: 5580b2110c65a1f2567eeacae18a3aec0a31d88d2504aa257a2fecf4f47695e6

2) রেজিস্ট্রি REST এপিআই ব্যবহার করুন

  ##curl -u username:password -vk -X DELETE registry-host>:<registry-port>/v2/<image-name>/manifests/${digest}


  >curl -u example-user:example-password -vk -X DELETE http://174.24.100.50:8448/v2/example-image/manifests/sha256:5580b2110c65a1f2567eeacae18a3aec0a31d88d2504aa257a2fecf4f47695e6

একটি সফল প্রার্থনার জন্য আপনার 202 স্বীকৃত হওয়া উচিত।

3-) আবর্জনা সংগ্রাহক চালান

docker exec registry bin/registry garbage-collect --dry-run /etc/docker/registry/config.yml

রেজিস্ট্রি - রেজিস্ট্রি ধারক নাম।

আরও বিশদ ব্যাখ্যার জন্য এখানে লিঙ্ক বিবরণ লিখুন



0

বাশ স্ক্রিপ্টের নীচে সাম্প্রতিকতম বাদে রেজিস্ট্রে অবস্থিত সমস্ত ট্যাগ মুছে ফেলে।

for D in /registry-data/docker/registry/v2/repositories/*; do
if [ -d "${D}" ]; then
    if [ -z "$(ls -A ${D}/_manifests/tags/)" ]; then
        echo ''
    else
        for R in $(ls -t ${D}/_manifests/tags/ | tail -n +2); do
            digest=$(curl -k -I -s -H -X GET http://xx.xx.xx.xx:5000/v2/$(basename  ${D})/manifests/${R} -H 'accept: application/vnd.docker.distribution.manifest.v2+json'  | grep Docker-Content-Digest | awk '{print $2}' )
            url="http://xx.xx.xx.xx:5000/v2/$(basename  ${D})/manifests/$digest"
            url=${url%$'\r'}
            curl -X DELETE -k -I -s   $url -H 'accept: application/vnd.docker.distribution.manifest.v2+json' 
        done
    fi
fi
done

এই রান পরে

docker exec $(docker ps | grep registry | awk '{print $1}') /bin/registry garbage-collect /etc/docker/registry/config.yml

এই সূক্ষ্ম স্ক্রিপ্টটি কীভাবে ব্যবহার করবেন সে সম্পর্কে আপনি আরও কিছুটা ব্যাখ্যা করতে পারেন?
খলিল ঘরবাউই

0

এই উত্তরের উপর ভিত্তি করে সরল রুবি লিপি : রেজিস্ট্রি_ক্যালেনার

আপনি এটি স্থানীয় মেশিনে চালাতে পারেন:

./registry_cleaner.rb --host=https://registry.exmpl.com --repository=name --tags_count=4

এবং তারপরে রেজিস্ট্রি মেশিনে ব্লবগুলি মুছে ফেলুন /bin/registry garbage-collect /etc/docker/registry/config.yml


0

ইয়াভুজ সার্টের উত্তরের উপর ভিত্তি করে এখানে একটি স্ক্রিপ্ট রয়েছে। এটি সর্বশেষতম সংস্করণ নয় এমন সমস্ত ট্যাগ মুছে ফেলে এবং তাদের ট্যাগটি 950 এর বেশি।

#!/usr/bin/env bash


CheckTag(){
    Name=$1
    Tag=$2

    Skip=0
    if [[ "${Tag}" == "latest" ]]; then
        Skip=1
    fi
    if [[ "${Tag}" -ge "950" ]]; then
        Skip=1
    fi
    if [[ "${Skip}" == "1" ]]; then
        echo "skip ${Name} ${Tag}"
    else
        echo "delete ${Name} ${Tag}"
        Sha=$(curl -v -s -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET http://127.0.0.1:5000/v2/${Name}/manifests/${Tag} 2>&1 | grep Docker-Content-Digest | awk '{print ($3)}')
        Sha="${Sha/$'\r'/}"
        curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X DELETE "http://127.0.0.1:5000/v2/${Name}/manifests/${Sha}"
    fi
}

ScanRepository(){
    Name=$1
    echo "Repository ${Name}"
    curl -s http://127.0.0.1:5000/v2/${Name}/tags/list | jq '.tags[]' |
    while IFS=$"\n" read -r line; do
        line="${line%\"}"
        line="${line#\"}"
        CheckTag $Name $line
    done
}


JqPath=$(which jq)
if [[ "x${JqPath}" == "x" ]]; then
  echo "Couldn't find jq executable."
  exit 2
fi

curl -s http://127.0.0.1:5000/v2/_catalog | jq '.repositories[]' |
while IFS=$"\n" read -r line; do
    line="${line%\"}"
    line="${line#\"}"
    ScanRepository $line
done
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.