به‌زودی — امروز: آینهٔ Docker Hub و رجیستری روی سرور خودتان

رجیستری خصوصی کانتینر، داخل ایران

رجیستری مدیریت‌شدهٔ ایران‌کلاد هنوز عرضه نشده است. تا آن زمان، روی سرورهای ایران‌کلاد ایمیج‌های عمومی Docker Hub را از آینهٔ داخلی دریافت کنید و برای ایمیج‌های خصوصی، رجیستری خودتان را در چند دقیقه روی یک سرور ابری راه بیندازید.

برای باخبر شدن از زمان عرضه وارد حساب شوید: خبرم کنید

لوگوی Docker

امروز چه کار می‌کند؟

آینهٔ Docker Hub + رجیستری روی سرور خودتان

$ docker pull nginx:alpine

via registry-mirror … Pulled

$ docker login registry.example.ir

Login Succeeded

$ docker push registry.example.ir/app:v2

رجیستری مدیریت‌شده
هنوز قابل سفارش نیست
سرور ابری برای رجیستری
از ۱٬۱۰۰ تومان / ساعت

وضعیت سرویس

رجیستری خصوصی کانتینر در ایران: وضعیت امروز

رجیستری کانتینر انبار ایمیج‌های Docker و OCI شماست: خط لولهٔ CI ایمیج را push می‌کند و سرورها و خوشه‌ها هنگام استقرار آن را pull می‌کنند. رجیستری مدیریت‌شدهٔ ایران‌کلاد هنوز عرضه نشده و سفارش یا قیمت ندارد.

دو راه همین حالا در دسترس است: روی سرورهای ایران‌کلاد، ایمیج‌های عمومی Docker Hub را از آینهٔ داخلی دریافت کنید؛ و برای ایمیج‌های خصوصی، Docker Registry یا Gitea را روی یک سرور ابری اجرا کنید. راهنمای پایین هر دو را قدم‌به‌قدم توضیح می‌دهد.

جایگزین‌های امروز

امروز چه چیزی در دسترس است؟

آینهٔ Docker Hub

روی سرورهای ایران‌کلاد، ایمیج‌های عمومی از حافظهٔ داخلی دریافت می‌شوند؛ تنظیمش در پنل آمده است.

رجیستری روی سرور ابری

Docker Registry سبک است و روی کوچک‌ترین سرور ابری اجرا می‌شود؛ فقط هزینهٔ ساعتی سرور را می‌پردازید.

Gitea با رجیستری بسته

کد، CI و ایمیج‌ها در یک‌جا، با همان کاربران و دسترسی‌ها.

سازگار با کوبرنتیز

در کوبرنتیز با imagePullSecrets و در داکر سوارم با docker login روی نود مدیر کار می‌کند.

اسکن در CI

Trivy را پیش از push اجرا کنید تا آسیب‌پذیری‌های شناخته‌شده پیش از استقرار پیدا شوند.

نسخهٔ مدیریت‌شده: به‌زودی

رجیستری مدیریت‌شده هنوز عرضه نشده؛ نیازتان را از صفحهٔ تماس اعلام کنید.

شروع کار

رجیستری خودتان را امروز بسازید

یک سرور ابری بگیرید، Docker یا Gitea را نصب کنید و رجیستری خصوصی را پشت HTTPS راه بیندازید. ایمیج‌ها استاندارد OCI‌اند و بعداً به هر رجیستری دیگری قابل انتقال‌اند.

راهنمای کامل

راهنمای رجیستری کانتینر برای تیم‌های ایرانی

هر تیمی که با Docker یا کوبرنتیز کار می‌کند، دیر یا زود به جایی برای نگه‌داری ایمیج‌هایش نیاز دارد. این راهنما می‌گوید رجیستری در ایران‌کلاد امروز در چه وضعیتی است، چه ابزارهایی همین حالا در دسترس‌اند و چطور در کمتر از یک ساعت یک رجیستری خصوصی و امن روی سرور ابری خودتان راه بیندازید.

۱۰ بخش حدود ۶ دقیقه مطالعه

فهرست مطالب

رجیستری کانتینر چیست و چرا به آن نیاز دارید؟

ایمیج کانتینر بستهٔ کاملی از برنامه و همهٔ وابستگی‌های آن است. رجیستری سروری است که این ایمیج‌ها را با نام و برچسب نسخه نگه می‌دارد؛ docker push ایمیج را به آن می‌فرستد و docker pull آن را روی سرور مقصد دریافت می‌کند. Docker Hub شناخته‌شده‌ترین رجیستری عمومی است.

وقتی کد شما خصوصی است، ایمیجش هم باید خصوصی بماند. رجیستری خصوصی با نام کاربری و رمز یا توکن محافظت می‌شود و فقط سرورها و خط لوله‌های مجاز به آن دسترسی دارند. علاوه بر این، نگه داشتن نسخه‌های قبلی ایمیج یعنی هر زمان بتوانید به نسخهٔ سالم قبلی برگردید.

رجیستری نزدیک به سرورها هم اهمیت دارد. وقتی خوشه یا سرور تولید برای هر استقرار ایمیج چندصد مگابایتی را از آن سر دنیا دریافت می‌کند، هر به‌روزرسانی چند دقیقه کندتر می‌شود و هر اختلال در مسیر بین‌المللی می‌تواند استقرار را نیمه‌کاره بگذارد. رجیستری داخل همان دیتاسنتر این وابستگی را حذف می‌کند.

رجیستری در ایران‌کلاد امروز چه وضعیتی دارد؟

رجیستری مدیریت‌شده هنوز عرضه نشده است: سفارش، پلن و قیمت ندارد و زمان عرضه هم اعلام نشده. چیزی که همین حالا روی سرورهای ایران‌کلاد در دسترس است، آینهٔ Docker Hub است؛ یک حافظهٔ میانی که ایمیج‌های عمومی را داخل شبکهٔ ما نگه می‌دارد تا pull آن‌ها سریع‌تر و پایدارتر باشد.

آینه فقط خواندنی است و جای رجیستری خصوصی را نمی‌گیرد. برای ایمیج‌های خودتان، بهترین مسیر فعلی اجرای یک رجیستری روی سرور ابری است. اگر سرویس مدیریت‌شده برای تیم شما مهم است، نیازتان را از صفحهٔ تماس بفرستید؛ درخواست‌ها در اولویت‌بندی عرضه اثر دارند.

بازگشت به فهرست مطالب

استفاده از آینهٔ Docker Hub روی سرورهای ایران‌کلاد

دسترسی مستقیم به Docker Hub از داخل ایران اغلب کند یا محدود است و همین می‌تواند استقرار را وسط کار متوقف کند. روی سرورهای ایران‌کلاد کافی است آدرس آینه را در فایل /etc/docker/daemon.json زیر کلید registry-mirrors بنویسید و سرویس Docker را دوباره راه‌اندازی کنید. آدرس دقیق و دستورها در صفحهٔ آینهٔ بسته‌ها و در پنل کاربری، بخش آینهٔ بسته‌ها آمده است.

از آن به بعد دستورهایی مثل docker pull nginx یا docker pull postgres بدون تغییر کار می‌کنند و Docker خودش ابتدا سراغ آینه می‌رود. اولین دریافت هر ایمیج از مبدأ انجام می‌شود و دفعه‌های بعد از حافظهٔ داخلی. برای نصب خود Docker، راهنمای نصب Docker را ببینید.

بازگشت به فهرست مطالب

سه راه برای رجیستری خصوصی روی سرور خودتان

هر سه ابزار زیر متن‌باز و رایگان‌اند و با docker login و کوبرنتیز کار می‌کنند. انتخاب به این بستگی دارد که چه امکاناتی کنار رجیستری لازم دارید:

ابزارویژگی اصلیمنابع لازممناسب برای
Docker Registry (distribution)فقط رجیستری، بدون رابط وببسیار کمتیم کوچک و CI ساده
Giteaمخزن گیت، CI و رجیستری بسته در یک‌جامتوسطتیمی که میزبان کدش هم هست
Harborرابط وب، اسکن آسیب‌پذیری، سیاست نگه‌داریزیادسازمان با چند تیم و الزامات امنیتی

اگر کد را در Gitea نگه می‌دارید، رجیستری بسته‌اش را فعال کنید تا ایمیج‌ها کنار همان مخزن و با همان کاربران مدیریت شوند.

بازگشت به فهرست مطالب

راه‌اندازی Docker Registry در شش قدم

ساده‌ترین رجیستری خصوصی با ایمیج رسمی registry:2 ساخته می‌شود. مسیر کلی این است:

  1. یک سرور ابری با دیسک کافی بسازید و Docker را نصب کنید
  2. یک زیردامنه مثل registry.example.ir را در مدیریت DNS به IP سرور اشاره دهید
  3. با ابزار htpasswd فایل کاربران را بسازید تا رجیستری بدون رمز در دسترس نباشد
  4. کانتینر registry:2 را با volume برای داده‌ها و تنظیم احراز هویت اجرا کنید
  5. یک reverse proxy با گواهی SSL روی پورت ۴۴۳ جلوی رجیستری بگذارید
  6. با docker login وارد شوید و اولین ایمیج را با برچسب نام دامنه push کنید

پورت‌های ۸۰ و ۴۴۳ روی سرورهای ایران‌کلاد به‌صورت پیش‌فرض باز است؛ پورت ۵۰۰۰ رجیستری را مستقیم باز نکنید و فقط از پشت پروکسی با HTTPS سرویس بدهید.

بازگشت به فهرست مطالب

هزینهٔ رجیستری روی سرور ابری

رجیستری روی سرور خودتان هزینهٔ جداگانه ندارد و فقط قیمت ساعتی سرور ابری را می‌پردازید. نرم‌افزار سبک است؛ عامل تعیین‌کننده فضای دیسک است، چون هر نسخهٔ جدید ایمیج لایه‌های تازه اضافه می‌کند. برای Gitea یا Harbor پلنی با رَم بیشتر انتخاب کنید.

قیمت‌های جدول لحظه‌ای‌اند و معادل ماهانه بر پایهٔ ۷۳۰ ساعت حساب شده است. هر سرور ۵۰ گیگابایت ترافیک ماهانه دارد؛ اگر خوشه‌ها و CI مدام ایمیج‌های حجیم pull می‌کنند، مصرف ترافیک را در پنل زیر نظر داشته باشید.

پلن سرور ابریمنابعساعتی (تومان)تقریبی ماهانه (تومان)
mini۱ هسته، ۱ گیگ رَم، ۲۰ گیگ دیسک۱٬۱۰۰۸۰۳٬۰۰۰
standard۲ هسته، ۲ گیگ رَم، ۴۰ گیگ دیسک۲٬۲۰۰۱٬۶۰۶٬۰۰۰
plus۲ هسته، ۴ گیگ رَم، ۸۰ گیگ دیسک۳٬۵۰۰۲٬۵۵۵٬۰۰۰

بازگشت به فهرست مطالب

اتصال رجیستری به کوبرنتیز و داکر سوارم

در کوبرنتیز مدیریت‌شده با دستور kubectl create secret docker-registry یک Secret شامل آدرس رجیستری، نام کاربری و توکن بسازید و در بخش imagePullSecrets هر Deployment به آن ارجاع دهید. اگر چند namespace دارید، Secret را در هر کدام بسازید یا به ServiceAccount پیش‌فرض متصل کنید.

در داکر سوارم مدیریت‌شده کافی است روی نود مدیر docker login کنید و دستور docker stack deploy را با گزینهٔ --with-registry-auth اجرا کنید تا اطلاعات ورود به نودهای کارگر هم برسد. برای خط لولهٔ CI، یک کاربر جدا با دسترسی فقط push بسازید.

بازگشت به فهرست مطالب

امنیت رجیستری و اسکن آسیب‌پذیری

رجیستری بدون احراز هویت روی اینترنت یعنی هر کسی می‌تواند ایمیج‌های شما را بخواند یا ایمیج آلوده جایگزین کند. همیشه HTTPS و رمز یا توکن را فعال کنید، برای هر سیستم کاربر جدا بسازید و دسترسی SSH سرور را با فایروال ابری محدود کنید.

برای پیدا کردن آسیب‌پذیری‌های شناخته‌شده، ابزار Trivy را در CI پیش از push اجرا کنید و اگر آسیب‌پذیری بحرانی پیدا شد، ساخت را متوقف کنید. Harbor همین کار را داخل خود رجیستری انجام می‌دهد. ایمیج پایه را کوچک نگه دارید؛ هرچه بستهٔ کمتری در ایمیج باشد، سطح حمله کمتر است.

برچسب latest را برای استقرار تولید استفاده نکنید. هر ایمیج را با شمارهٔ نسخه یا شناسهٔ کامیت برچسب بزنید تا دقیقاً بدانید چه چیزی روی سرور اجرا می‌شود و بازگشت به نسخهٔ قبلی فقط یک تغییر برچسب باشد.

بازگشت به فهرست مطالب

انتقال ایمیج‌ها از Docker Hub یا رجیستری دیگر

اگر امروز ایمیج‌های خصوصی‌تان در Docker Hub‏، GitLab یا رجیستری یک ارائه‌دهندهٔ خارجی است، انتقال آن‌ها ساده است. برای هر ایمیج، نسخه‌های مورد نیاز را pull کنید، با نام رجیستری جدید برچسب بزنید و push کنید. ابزار skopeo همین کار را بدون نیاز به Docker و مستقیم بین دو رجیستری انجام می‌دهد و برای انتقال تعداد زیاد ایمیج مناسب‌تر است.

بعد از انتقال، آدرس ایمیج را در manifest‌های کوبرنتیز، فایل‌های compose و خط لولهٔ CI عوض کنید و Secret‌های دسترسی را به‌روز کنید. پیشنهاد ما این است که چند روز هر دو رجیستری را نگه دارید و فقط وقتی همهٔ استقرارها از رجیستری جدید انجام شد، رجیستری قبلی را خاموش کنید. همهٔ نسخه‌ها را منتقل نکنید؛ معمولاً چند نسخهٔ آخر هر ایمیج کافی است.

بازگشت به فهرست مطالب

فضای ذخیره‌سازی، پاک‌سازی و بکاپ

رجیستری‌ها با گذشت زمان بزرگ می‌شوند. سیاست ساده‌ای بگذارید، مثلاً فقط ده نسخهٔ آخر هر ایمیج بماند، و پس از حذف برچسب‌ها garbage collection را اجرا کنید؛ حذف برچسب به‌تنهایی فضای دیسک را آزاد نمی‌کند. Docker Registry می‌تواند داده‌هایش را به‌جای دیسک محلی در فضای ذخیره‌سازی ابری سازگار با S3 نگه دارد تا محدودیت دیسک سرور از بین برود.

بکاپ رجیستری کمتر از بکاپ دیتابیس حیاتی است، چون ایمیج‌ها را می‌توان از روی کد دوباره ساخت. با این حال، نسخه‌های در حال اجرا در تولید را حتماً جایی دیگر هم نگه دارید تا در صورت خرابی سرور، استقرار متوقف نشود.

بازگشت به فهرست مطالب بازگشت به ابتدای راهنما

پرسش و پاسخ،  ۱۰ پرسش

سؤالات متداول

پاسخ پرسش خود را پیدا نکردید؟ با پشتیبانی در تماس باشید.

رجیستری کانتینر چه کاری انجام می‌دهد؟
رجیستری محل نگه‌داری ایمیج‌های Docker و OCI است. خط لولهٔ CI ایمیج را می‌سازد و در رجیستری push می‌کند و سرورها یا خوشه‌ها هنگام استقرار آن را pull می‌کنند. رجیستری خصوصی یعنی فقط کاربران مجاز به ایمیج‌ها دسترسی دارند.
آیا رجیستری مدیریت‌شدهٔ ایران‌کلاد آماده است؟
خیر. این سرویس هنوز عرضه نشده و سفارش، پلن یا قیمت ندارد. اگر به آن نیاز دارید، از صفحهٔ تماس اعلام کنید. تا آن زمان می‌توانید رجیستری خصوصی خودتان را روی یک سرور ابری اجرا کنید.
با کوبرنتیز و CI/CD چطور کار می‌کند؟
هر رجیستری استاندارد با docker login کار می‌کند. در کوبرنتیز یک Secret از نوع docker-registry بسازید و با imagePullSecrets در Deployment به آن ارجاع دهید؛ در داکر سوارم هنگام استقرار گزینهٔ --with-registry-auth را بزنید.
اسکن امنیتی ایمیج دارید؟
اسکن خودکار ارائه نمی‌شود، چون رجیستری مدیریت‌شده هنوز عرضه نشده است. ابزار متن‌باز Trivy را در خط لولهٔ CI اجرا کنید تا هر ایمیج پیش از push برای آسیب‌پذیری‌های شناخته‌شده بررسی شود. Harbor هم این قابلیت را داخلی دارد.
آینهٔ Docker Hub ایران‌کلاد چیست؟
یک حافظهٔ میانی برای ایمیج‌های عمومی Docker Hub است. سرورهای ایران‌کلاد با تنظیم registry-mirrors در فایل daemon.json ایمیج‌های عمومی را از این آینه دریافت می‌کنند. راهنمای دقیق تنظیم در پنل کاربری، بخش آینهٔ بسته‌ها آمده است.
آیا می‌توانم ایمیج خصوصی خودم را در آینه push کنم؟
خیر. آینه فقط برای دریافت ایمیج‌های عمومی است و push را نمی‌پذیرد. برای ایمیج‌های خصوصی به رجیستری خودتان نیاز دارید؛ مثلاً Docker Registry یا Gitea روی یک سرور ابری.
برای رجیستری شخصی چه سروری لازم است؟
خود نرم‌افزار رجیستری سبک است و کوچک‌ترین سرور ابری برای اجرایش کافی است. محدودیت اصلی فضای دیسک است: ایمیج‌ها با هر نسخهٔ جدید جا می‌گیرند. اگر Gitea یا Harbor نصب می‌کنید، دست‌کم ۲ تا ۴ گیگابایت رَم در نظر بگیرید.
رجیستری روی سرور ابری چقدر هزینه دارد؟
فقط هزینهٔ ساعتی همان سرور ابری را می‌پردازید. با قیمت فعلی، کوچک‌ترین سرور حدود ۱٬۱۰۰ و سرور plus با ۴ گیگابایت رَم حدود ۳٬۵۰۰ تومان در ساعت است. هر سرور ۵۰ گیگابایت ترافیک ماهانه دارد.
چطور فضای رجیستری را تمیز نگه دارم؟
برچسب‌های قدیمی را به‌صورت دوره‌ای حذف کنید و سپس garbage collection رجیستری را اجرا کنید تا لایه‌های بی‌استفاده واقعاً از دیسک پاک شوند. در Gitea و Harbor سیاست نگه‌داری نسخه‌ها از رابط وب تنظیم می‌شود.
وقتی رجیستری مدیریت‌شده عرضه شد، می‌توانم ایمیج‌ها را منتقل کنم؟
ایمیج‌ها استاندارد OCI هستند و بین هر دو رجیستری قابل انتقال‌اند؛ با docker pull و docker push یا ابزارهایی مثل skopeo. پس رجیستری‌ای که امروز روی سرور خودتان می‌سازید، مانعی برای مهاجرت بعدی نیست.

پاسخ پرسش خود را پیدا نکردید؟ با پشتیبانی در تماس باشید.

رجیستری مدیریت‌شده می‌خواهید؟

نیاز تیمتان را بنویسید: تعداد ایمیج، حجم تقریبی و ابزار CI. درخواست‌ها در اولویت‌بندی عرضهٔ این سرویس اثر دارند.