इस प्रोजेक्ट के बारे में

Unregistry एक हल्का कंटेनर इमेज रजिस्ट्री है जो इमेज को सीधे Docker डेमन के स्टोरेज (containerd इमेज स्टोर) से संग्रहीत और परोसता है। इसे मशीनों के बीच इमेज ले जाते समय बाहरी रजिस्ट्री की आवश्यकता को खत्म करने के लिए डिज़ाइन किया गया है। प्रोजेक्ट एक Docker CLI प्लगइन कमांड, `docker pussh` (अतिरिक्त 's' SSH के लिए है) शामिल करता है, जो इमेज को SSH के जरिए सीधे रिमोट Docker सर्वर पर भेजता है। केवल वे लेयर जो रिमोट साइड पर गायब हैं, ट्रांसफर की जाती हैं, जिसे README तेज़ और कुशल ऑपरेशन के रूप में वर्णित करता है। README के अनुसार यह कैसे काम करता है: कमांड रिमोट सर्वर के लिए एक SSH टनल स्थापित करता है, वहां एक अस्थायी unregistry कंटेनर शुरू करता है, टनल के माध्यम से एक रैंडम लोकलहोस्ट पोर्ट को unregistry पोर्ट पर फॉरवर्ड करता है, उस फॉरवर्ड किए गए पोर्ट के माध्यम से unregistry पर `docker push` चलाता है (केवल उन लेयर को ट्रांसफर करता है जो रिमोट पर पहले से मौजूद नहीं हैं), फिर unregistry कंटेनर को रोकता है और टनल बंद करता है। ट्रांसफर की गई इमेज रिमोट Docker डेमन पर उपलब्ध हो जाती है। README इस दृष्टिकोण की तुलना Docker इमेज के लिए rsync से करता है। प्रेरणा: README सामान्य विकल्पों और उनकी कमियों को सूचीबद्ध करता है — सार्वजनिक रजिस्ट्री (कोड एक्सपोज़र या भुगतान किए गए निजी रिपो), स्व-होस्टेड रजिस्ट्री (बनाए रखने और सुरक्षित करने के लिए अतिरिक्त सेवा), `docker save | ssh ... docker load` (पूरी इमेज ट्रांसफर करता है भले ही अधिकांश लेयर रिमोट पर पहले से मौजूद हों), और रिमोट रीबिल्ड (समय और संसाधन बर्बाद)। Unregistry मूल रूप से Uncloud के लिए बनाया गया था, जो कई Docker होस्टों पर कंटेनर तैनात करने का एक उपकरण है। आवश्यकताएँ: स्थानीय रूप से, प्लगइन समर्थन वाला Docker CLI (Docker 19.03+) और एक OpenSSH क्लाइंट। रिमोट सर्वर पर, Docker स्थापित और चालू होना चाहिए, SSH उपयोगकर्ता docker कमांड चलाने में सक्षम होना चाहिए (रूट या docker समूह में उपयोगकर्ता), और यदि sudo आवश्यक हो तो पासवर्ड रहित `sudo docker` आवश्यक है। सर्वर को पहली बार उपयोग पर unregistry इमेज खींचने के लिए ghcr.io तक इंटरनेट एक्सेस की आवश्यकता होती है, जब तक कि इमेज को एयर-गैप्ड या प्रतिबंधित वातावरण के लिए मैन्युअल रूप से प्रीलोड न किया जाए। unregistry कंटेनर को /run/containerd/containerd.sock पर containerd सॉकेट तक पहुंच की आवश्यकता होती है और यह रूट के रूप में चलता है। प्रलेखित स्थापना विकल्प: Homebrew (`brew install psviderski/tap/docker-pussh`, साथ ही ~/.docker/cli-plugins में सिमलिंक), प्लगइन निर्देशिका में docker-pussh स्क्रिप्ट का सीधा डाउनलोड, और एक अलग रिपॉजिटरी में बनाए गए अनौपचारिक Debian पैकेज। Windows वर्तमान में समर्थित नहीं है, हालांकि Linux निर्देशों के साथ WSL 2 सुझाया गया है। स्थापना को `docker pussh --help` से सत्यापित किया जा सकता है। एक उल्लेखनीय कॉन्फ़िगरेशन विषय containerd इमेज स्टोर है। Unregistry इमेज को containerd के इमेज स्टोर में संग्रहीत करता है, लेकिन डिफ़ॉल्ट रूप से Docker अपनी अलग स्टोरेज परत रखता है। Docker में containerd इमेज स्टोर सक्षम होने पर, पुश की गई इमेज बिना किसी डुप्लिकेशन के तुरंत Docker के लिए उपलब्ध होती हैं और pussh ऑपरेशन तेज़ होते हैं। इसके बिना, pussh रिमोट होस्ट पर एक अतिरिक्त `docker pull` चलाता है, इमेज दो बार संग्रहीत होती हैं, और अप्रबंधित containerd इमेज जमा हो सकती हैं; README मैन्युअल सफाई के लिए `ctr -n moby images ls` और `ctr -n moby images rm` दिखाता है। containerd इमेज स्टोर सक्षम करना क्लासिक स्टोरेज ड्राइवर के साथ बनाई गई इमेज और कंटेनरों के अस्थायी नुकसान का कारण बनता है, जैसा प्रलेखित है। उपयोग उदाहरणों में रिमोट होस्ट पर पुश करना, `-i` के साथ SSH कुंजी प्रमाणीकरण, कस्टम SSH पोर्ट, `-F` के साथ कस्टम SSH कॉन्फ़िग फ़ाइल, मल्टी-प्लेटफ़ॉर्म इमेज के लिए प्लेटफ़ॉर्म चयन (स्थानीय रूप से containerd इमेज स्टोर की आवश्यकता), और UNREGISTRY_IMAGE पर्यावरण चर के माध्यम से unregistry इमेज संस्करण को ओवरराइड करना शामिल है। प्रलेखित उपयोग मामले प्रोडक्शन सर्वर पर तैनाती, CI/CD पाइपलाइन, और होमलैब या एयर-गैप्ड वातावरण हैं। Unregistry को पोर्ट 5000 पर स्थानीय रजिस्ट्री के रूप में containerd सॉकेट माउंट करके स्टैंडअलोन भी चलाया जा सकता है। README तृतीय-पक्ष प्रोजेक्ट्स से लिंक करता है: docker-pussh के साथ इमेज पुश करने के लिए एक GitHub Action, प्लगइन स्थापित करने के लिए एक GitHub Action, और स्व-होस्टेड रजिस्ट्री में इमेज साफ करने के लिए एक Python टूल। यह रजिस्ट्री बैकएंड के रूप में containerd इमेज स्टोर का उपयोग करने के लिए Spegel को प्रेरणा के रूप में श्रेय देता है और Docker Distribution को उस रजिस्ट्री कार्यान्वयन के रूप में जिस पर unregistry आधारित है।