Docker Registry چیست؟
Docker Registry یک سیستم ذخیرهسازی متمرکز و توزیعشده برای جمعآوری و مدیریت ایمیجهای Docker است. این سرویس بهعنوان یک برنامه سمت سرور عمل میکند که ایمیجهای کانتینری را در محیطهای مختلف ذخیره، مدیریت و توزیع میکند. داکر رجیستری یکی از اجزای ضروری در جریان کاری کانتینرسازی محسوب میشود که فرآیند استقرار و مدیریت برنامهها را سادهسازی میکند.
در این مطلب با مفهوم Docker Registry، معماری آن، انواع مختلف، کاربردها و دستورات مهم مرتبط با آن آشنا میشویم تا بهطور کامل درک کنید چگونه در پروژههای خود از آن بهره ببرید.
ویژگیهای Docker Registry:
- بدون وضعیت (Stateless) و مقیاسپذیر
- سازمانیافته در قالب مخازن (Repository) که هر مخزن شامل چندین نسخه (Tag) از یک ایمیج است
- قابل دسترسی برای کاربران جهت Push (بارگذاری) و Pull (دانلود) ایمیجها
- Docker Image :
Docker Image یک قالب (Blueprint) است که برای ایجاد کانتینرهای Docker استفاده میشود. - Docker Images Registry :
Docker Registry یک سیستم ذخیرهسازی است که در آن ایمیجهای Docker بارگذاری (Push) و دانلود (Pull) میشوند. - Docker Hub :
Docker Hub سرویس رسمی رجیستری ابری ارائهشده توسط Docker Inc است. این رجیستری پیشفرضی است که هنگام اجرای دستورات docker pull یا docker run بدون مشخصکردن رجیستری، Docker برای یافتن ایمیجها به آن مراجعه میکند. - Docker Login :
Docker Login یک دستور در Docker CLI است که برای احراز هویت کلاینت لوکالDocker با یک Docker Registry (مانند Docker Hub، Amazon Elastic Container Registry، Google Container Registry، Azure Container Registry یا یک رجیستری خصوصی) استفاده میشود. این دستور امکان Push (بارگذاری) و Pull (دانلود) امن ایمیجهای Docker را از طریق تایید نام کاربری و گذرواژه یا توکن دسترسی فراهم میکند. - Authentication of Dockerhub :
احراز هویت در Docker Hub تضمین میکند که عملیات Push و Pull ایمیجهای Docker، بهویژه هنگام کار با مخازن خصوصی و پایپلاینهای DevOps، بهصورت ایمن انجام شود.
انواع مختلف Docker Registry
- Cloud-Hosted / Public Registries:
این رجیستریها سرویسهای مدیریتشدهای هستند که استفاده از آنها آسان بوده و با سایر پلتفرمهای ابری یکپارچه میشوند. - Docker Hub: بزرگترین و پیشفرضترین رجیستری عمومی که میلیونها ایمیج رسمی و انجمنی را میزبانی میکند.
- Amazon Elastic Container Registry (ECR): رجیستری مدیریتشده AWS که با اکوسیستم ابری آن یکپارچه شده است.
- Google Artifact Registry (GAR): رجیستری پیشنهادی Google Cloud برای ایمیجهای کانتینری و سایر آرتیفکتها. (توجه: Google Container Registry (GCR) منسوخ شده است.)
- Azure Container Registry (ACR): سرویس رجیستری مایکروسافت برای پلتفرم Azure.
- GitLab Container Registry: بهصورت مستقیم در پلتفرم CI/CD گیتلب یکپارچه شده است.
- Private / Self-Hosted Registries:
این رجیستریها روی زیرساخت اختصاصی شما اجرا میشوند و بیشترین سطح کنترل، امنیت و سرعت را فراهم میکنند. - Docker Registry Image: Docker یک ایمیج رسمی متنباز (registry:2) ارائه میدهد که امکان اجرای یک رجیستری ساده را فراهم میکند.
- Harbor: یک رجیستری متنباز در سطح سازمانی با قابلیتهایی پیشرفته مانند اسکن آسیبپذیری و کنترل دسترسی مبتنی بر نقش (RBAC).
اگر به دنبال یک راهکار میزبانی قدرتمند هستید، سرور مجازی پارسدو با امکان انتخاب سیستمعامل دلخواه و تحویل آنی در ایران، فرانسه، آلمان، هلند و آمریکا، انتخابی هوشمندانه است.
دستورات پایه برای Docker Registry
در ادامه، دستورات پایه مربوط به Docker Registry آورده شده است:
راهاندازی رجیستری
این دستور یک Docker Registry را روی ماشین لوکال یا سرور شما اجرا میکند که از طریق پورت 5000 در دسترس خواهد بود.
این دستور به Docker اعلام میکند که رجیستریای با ایمیج registry:2 را در حالت Detached و با نام registry اجرا کند، پورت 5000 رجیستری را به پورت 5000 لوکال نگاشت کند و در صورت توقف، آن را دوباره راهاندازی نماید.
دریافت برخی ایمیجها از هاب
دستور زیر برای دریافت ایمیج از رجیستری عمومی Docker استفاده میشود. در اینجا ایمیج ubuntu دریافت میشود:
برچسبگذاری ایمیج و اشاره به رجیستری خود
دستور زیر برای برچسبگذاری (تگینگ) ایمیج و اشاره دادن آن به رجیستری لوکال استفاده میشود:
ارسال (Push) ایمیج
این دستور ایمیج را به رجیستری لوکال که روی localhost:5000 اجرا شده است، ارسال میکند:
توقف رجیستری
این دستور به Docker اعلام میکند کانتینری با نام registry را متوقف کند:
توقف رجیستری و حذف دادهها
دستور زیر برای توقف رجیستری و حذف کامل دادههای مرتبط با آن استفاده میشود:
نحوه عملکرد Docker Registry
Docker Registry ایمیجهای Docker را ذخیره و توزیع میکند. کاربران میتوانند ایمیجها را در رجیستری Push (بارگذاری) کرده و در زمان نیاز آنها را Pull (دانلود) کنند.
- Docker Registry یک بستر ذخیرهسازی و توزیع برای ایمیجهای Docker فراهم میکند.
- کاربران میتوانند ایمیجهای Docker خود را در رجیستری بارگذاری کنند و این ایمیجها میتوانند با یک نام و شماره نسخه (Tag) برچسبگذاری شوند.
- سایر کاربران میتوانند این ایمیجها را در رجیستری جستجو کرده و دانلود نمایند.
- Docker Registry میتواند بهصورت Self-Hosted اجرا شود یا بهعنوان یک سرویس ابری مورد استفاده قرار گیرد.
- Docker Registry به مدیران کمک میکند تا کنترلهای دسترسی و سطح مجوزها را پیادهسازی کنند و اطمینان حاصل شود که فقط کاربران و سیستمهای مجاز دسترسی دارند.
- Docker Registry امکان یکپارچهسازی بدون وقفه با پایپلاینهای Continuous Integration / Continuous Deployment (CI/CD) را فراهم میکند.
اهمیت رجیستریها
رجیستریهای Docker یکی از ارکان اصلی توسعه نرمافزار مدرن محسوب میشوند و دلایل مهم آن عبارتند از:
- CI/CD Automation: رجیستریها نقش پل ارتباطی در پایپلاینهای CI/CD را ایفا میکنند. فرآیند CI یک ایمیج جدید میسازد و آن را در رجیستری Push میکند، سپس فرآیند CD همان ایمیج را Pull کرده و در محیطهای staging یا production مستقر مینماید.
- Centralized Management & Collaboration: رجیستریها یک منبع واحد و متمرکز برای تمامی ایمیجهای کانتینری فراهم میکنند و اشتراکگذاری و همکاری تیمها روی برنامهها را تسهیل مینمایند.
- Version Control: با استفاده از Tagها، رجیستریها امکان نسخهبندی ایمیجها را فراهم میکنند تا بتوان تغییرات را ردیابی کرده و در صورت نیاز به نسخههای قبلی بازگشت (Rollback) انجام داد.
- Enhanced Security: رجیستریهای خصوصی کنترل کامل بر دسترسی به ایمیجها را فراهم میکنند. بسیاری از رجیستریهای میزبانیشده نیز قابلیت اسکن آسیبپذیری داخلی ارائه میدهند تا پیش از استقرار، مشکلات امنیتی شناسایی شوند.
جمعبندی
Docker Registry یکی از بخشهای اساسی در زیرساختهای مدرن توسعه و استقرار نرمافزار است. این سرویس امکان ذخیرهسازی، مدیریت، نسخهبندی و توزیع تصاویر Docker را فراهم میکند و در انواع رجیستریهای عمومی و خصوصی قابل پیادهسازی است. با یادگیری نحوه کار با Registry و دستورات مرتبط، توسعهدهندگان و تیمهای DevOps میتوانند به شکل موثرتری تصاویر کانتینر را مدیریت و در پروژههایشان از آن استفاده کنند.