تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

آموزش گام به گام راه‌ اندازی رجیستری خصوصی داکر در اوبونتو


۳۰ بهمن ۱۴۰۳

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

برای آشنایی با آموزش نصب داکر روی ابونتو مقاله زیر را بخوانید: آموزش نصب داکر روی اوبونتو 22.04

مزایای استفاده از یک رجیستری خصوصی داکر

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

  • کنترل کامل روی مدیریت ایمیج‌ها
  • حفظ حریم خصوصی
  • رفع محدودیت‌ها و تحریم‌های Docker
  • صرفه‌جویی در پهنای باند اینترنت از طریق ذخیره‌سازی محلی ایمیج‌ها
  • افزایش سرعت Pull و Push در محیط‌های سازمانی و شبکه‌های داخل

پیش نیازهای راه اندازی رجیستری خصوصی داکر

  1. دو سرور با سیستم عامل ubuntu 22.04 با یک کاربر غیر ریشه که دارای دسترسی sudo است و یک فایروال فعال. یکی از سرورها به عنوان میزبان رجیستری خصوصی داکر و سرور دوم نقش کلاینت را خواهد داشت.
  2. حتما روی دو سرور داکر را نصب کرده باشید. در صورتی که هنوز داکر را نصب نکرده‌اید مراحل 1 و 2 از آموزش نصب داکر روی اوبونتو 22.04 را بخوانید.
  3. روی سرور میزبان داکر کامپوز را نصب کنید. برای نصب داکر کامپوز، مرحله 1 از آموزش نصب و استفاده از داکر کامپوز (Docker Compose) در اوبونتو را بخوانید.
  4. وب سرور Nginx را روی سرور میزبان نصب کنید.
  5. وب‌سرور Nginx نصب شده روی سرور میزبان، با استفاده از Let’s Encrypt ایمن شده باشد. حتما، مطمئن شوید که تمامی ترافیک HTTP به HTTPS ریدایرکت می‌شود.
  6. یک دامنه ثبت شده که به سرور میزبان رجیستری خصوصی داکر متصل باشد.

مرحله اول: نصب و پیکربندی داکر رجیستری

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

در مرحله اول با استفاده از Docker Compose، یک فایل yml. ایجاد کنید که در آن بتوانید پیکربندی‌ها و اطلاعات مورد نیاز را برای برقراری ارتباط بین کانتینرها تنظیم کنید. علاوه بر این، از ابزار Docker Compose برای مدیریت و کنترل گروهی تمام اجزای برنامه می‌توانید استفاده کنید.

توجه داشته باشید که Docker Registry یک برنامه با چندین کانتینر است، بنابراین برای مدیریت ساده‌تر آن از Docker Compose استفاده می‌کنیم. برای شروع کار، یک فایل docker-compose.yml ایجاد می‌کنیم که در آن، تعریف و پیکربندی رجسیتری را مشخص می‌کنیم.

پیکربندی را در دایرکتوری‌ای به نام docker-registry انجام خواهیم داد. برای ایجاد این دایرکتوری از دستور زیر استفاده کنید:

mkdir ~/docker-registry

حالا وارد این دایرکتوری شوید:

cd ~/docker-registry

طبق دستور زیر در ادامه، یک دایرکتوری جدید درون پوشه docker-registry ایجاد کنید و نام آن را data بگذارید. این زیرپوشه جایی خواهد بود که رجیستری خصوصی شما، ایمیج‌ها را در آن ذخیره می‌کند:

mkdir data

برای ایجاد فایل docker-compose.yml و باز کردن آن جهت ویرایش، دستور زیر را اجرا کنید:

nano docker-compose.yml

خطوط زیر را به این فایل اضافه کنید. این کدها نمونه‌ای اولیه از Docker Registry را ایجاد خواهند کرد:

version: '3'

services:
  registry:
    image: registry:latest
    ports:
    - "5000:5000"
    environment:
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - ./data:/data

اگر کمی دقت کنید، متوجه خواهید شد که ابتدا سرویس را با نام Registry تعریف کرده‌ایم و سپس ایمیج آن را روی آخرین نسخه رجیستری Docker تنظیم کردیم. سپس در قسمت Ports، پورت 5000 روی سرور میزبان را به پورت 5000 کانتینر نگاشت کرده‌ایم. این پیکربندی به ما اجازه می‌دهد درخواست‌ها (Requests) را به پورت5000 سرور ارسال کرده و آن‌ها را به رجیستری هدایت (Forward) کنیم.

در بخش environment، متغیر REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY را روی مقدار /data تنظیم کنید تا محل ذخیره‌سازی داده‌ها مشخص باشد. این پیکربندی باعث می‌شود داده‌ها در واقع روی سیستم فایل میزبان ذخیره شوند.

فایل را ذخیره کنید و ببندید. حالا با استفاده از دستور زیر، می‌توانید پیکربندی را شروع کنید:

docker compose up

حالا، کانتینر رجیستری و Dependency‌های آن دانلود و راه‌اندازی خواهد شد:

Output
[+] Running 2/2
 ⠿ Network docker-registry_default       Created  0.1s
 ⠿ Container docker-registry-registry-1  Created  0.1s
Attaching to docker-registry-registry-1
docker-registry-registry-1  | time="2022-11-19T14:31:20.40444638Z" level=warning msg="No HTTP secret provided - generated random secret. This may cause problems with uploads if multiple registries are behind a load-balancer. To provide a shared secret, fill in http.secret in the configuration file or set the REGISTRY_HTTP_SECRET environment variable." go.version=go1.16.15 instance.id=4fb8d420-eaf8-4a69-b740-bdc94fa52d91 service=registry version="v2.8.1+unknown"
docker-registry-registry-1  | time="2022-11-19T14:31:20.404960549Z" level=info msg="redis not configured" go.version=go1.16.15 instance.id=4fb8d420-eaf8-4a69-b740-bdc94fa52d91 service=registry version="v2.8.1+unknown"
docker-registry-registry-1  | time="2022-11-19T14:31:20.412312462Z" level=info msg="using inmemory blob descriptor cache" go.version=go1.16.15 instance.id=4fb8d420-eaf8-4a69-b740-bdc94fa52d91 service=registry version="v2.8.1+unknown"
docker-registry-registry-1  | time="2022-11-19T14:31:20.412803878Z" level=info msg="Starting upload purge in 52m0s" go.version=go1.16.15 instance.id=4fb8d420-eaf8-4a69-b740-bdc94fa52d91 service=registry version="v2.8.1+unknown"
docker-registry-registry-1  | time="2022-11-19T14:31:20.41296431Z" level=info msg="listening on [::]:5000" go.version=go1.16.15 instance.id=4fb8d420-eaf8-4a69-b740-bdc94fa52d91 service=registry version="v2.8.1+unknown"
...

همان طور که در آخرین خط خروجی بالا می‌بینید، فرایند با موفقیت آغاز شده و Listening روی پورت۵۰۰۰ در حال انجام است. برای متوقف کردن اجرا، می‌توانید از کلیدهای ترکیبی Ctrl+C استفاده کنید.

در این مرحله، پیکربندی Docker Compose را با موفقیت ایجاد کردیم. یک Docker Registry راه‌اندازی شده که به پورت 5000 گوش می‌دهد. در مراحل بعدی، نحوه دسترسی به رجیستری از طریق دامنه و همچنین پیکربندی احراز هویت آن را خواهید آموخت.

مرحله دوم: تنظیم Port Forwarding در Nginx

در بخش پیش نیازها، گفتیم که پروتکل HTTPS باید روی دامنه فعال شده باشد. حالا برای دسترسی ایمن به Docker Registry باید Nginx را طوری پیکربندی کنید تا ترافیک ورودی از دامنه شما به کانتینر رجیستری ارسال شود.

شما قبلاً فایل /etc/nginx/sites-available/your_domain را که شامل پیکربندی سرور است، تنظیم کرده‌اید. برای ویرایش این فایل، دستور زیر را اجرا کنید:

sudo nano /etc/nginx/sites-available/your_domain

بلوک location را در این فایل پیدا کنید:

...
        location / {
  ...
        }
...

باید ترافیک را به پورت ۵۰۰۰ هدایت کنید؛ جایی که رجیستری شما به درخواست‌ها گوش می‌دهد. همچنین، لازم است Headerهایی را به درخواست‌های ارسال‌شده به رجیستری اضافه کنید تا اطلاعات بیشتری از سرور درباره درخواست داده شود.

برای این کار، محتوای بلوک location را با خطوط زیر جایگزین کنید:

...
location / {
    # Do not allow connections from docker 1.5 and earlier
    # docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
    if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
      return 404;
    }

    proxy_pass                          http://localhost:5000;
    proxy_set_header  Host              $http_host;   # required for docker client's sake
    proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
    proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;
    proxy_read_timeout                  900;
}
...

شرط if در این بخش از کد، وظیفه بررسی نسخه‌ی Docker را بر عهده دارد. اگر نسخه‌ی Docker پایین‌تر از ۱.۵ باشد، سرور خطای ۴۰۴ را بازمی‌گرداند. بعد از اینکه فایل، ویرایش شد و با موفقیت به پایان رسید، تغییرات را ذخیره کنید و فایل را ببندید. برای توضیحات بیشتر درباره این پیکربندی، می‌توانید به راهنمای تنظیم هدرهای Nginx در مستندات رجیستری Docker مراجعه کنید.

سپس، برای اعمال تغییرات، وب‌سرور Nginx را با استفاده از دستور زیر مجدد راه‌اندازی کنید:

sudo systemctl restart nginx

اگر بعد از اجرای این دستور پیغام خطا دریافت کردید، تغییرات اضافه شده به فایل پیکربندی Ngnix را مجددا بررسی کنید.

برای بررسی اینکه Nginx به درستی ترافیک را به کانتینر رجیستری شما در پورت 5000 ارسال می‌کند یا خیر، دستور زیر را اجرا کنید:

docker compose up

سپس، در مرورگر خود آدرس دامنه را وارد کرده و در انتهای عبارت v2 را اضافه کنید:

https://your_domain/v2

مرورگر شما یک آبجکت JSON خالی به شما نشان خواهد داد:

{}

در ترمینال خود نیز باید خروجی‌ای مشابه نمونه زیر مشاهده کنید:

Output
docker-registry-registry-1  | time="2022-11-19T14:32:50.082396361Z" level=info msg="response completed" go.version=go1.16.15 http.request.host=your_domain http.request.id=779fe265-1a7c-4a15-8ae4-eeb5fc35de98 http.request.method=GET http.request.remoteaddr=87.116.166.89 http.request.uri="/v2" http.request.useragent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36" http.response.contenttype="text/html; charset=utf-8" http.response.duration="162.546µs" http.response.status=301 http.response.written=39
docker-registry-registry-1  | 172.19.0.1 - - [19/Nov/2022:14:32:50 +0000] "GET /v2 HTTP/1.0" 301 39 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
docker-registry-registry-1  | 172.19.0.1 - - [19/Nov/2022:14:32:50 +0000] "GET /v2/ HTTP/1.0" 200 2 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
docker-registry-registry-1  | time="2022-11-19T14:32:50.132472674Z" level=info msg="response completed" go.version=go1.16.15 http.request.host=your_domain http.request.id=0ffb17f0-c2a0-49d6-94f3-af046cfb96e5 http.request.method=GET http.request.remoteaddr=87.116.166.89 http.request.uri="/v2/" http.request.useragent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36" http.response.contenttype="application/json; charset=utf-8" http.response.duration=2.429608ms http.response.status=200 http.response.written=2
docker-registry-registry-1  | 172.19.0.1 - - [19/Nov/2022:14:32:50 +0000] "GET /favicon.ico HTTP/1.0" 404 19 "your_domain/v2/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"

با استفاده از کلیدهای ترکیبی Ctrl+C اجرای دستور را متوقف کنید، حالا که Port Forwarding به درستی انجام شده است، امنیت رجیستری شما نیز افزایش خواهد یافت.

مرحله سوم: تنظیمات مربوط به احراز هویت

وب‌سرور Nginx به شما این امکان را می‌دهد که احراز هویت HTTP را برای وب‌سایت‌هایی که مدیریت می‌کند، تنظیم کنید. این قابلیت به شما امکان می‌دهد تا دسترسی به رجیستری داکر خود را محدود کنید. برای این کار ابتدا باید با استفاده از ابزار htpasswd یک فایل احراز هویت ایجاد کنید و ترکیب نام کاربری و رمز عبور مجاز را به آن اضافه کنید. این فرایند باعث فعال شدن احراز هویت برای رجیستری شما می‌شود.

با نصب پکیج apache2-utils می‌توانید ابزار htpasswd را دریافت کنید. برای این کار از دستور زیر استفاده کنید:

sudo apt install apache2-utils -y

فایل احراز هویت در مسیر  ~/docker-registry/auth ایجاد خواهد شد، با استفاده از دستور زیر، پوشه مورد نظر را ایجاد کنید:

mkdir ~/docker-registry/auth

سپس وارد آن شوید:

cd ~/docker-registry/auth

اولین کاربر را با استفاده از کد زیر ایجاد کنید. توجه کنید که به‌جای username، نام کاربری دلخواه و به‌جای password، رمز عبور مورد نظر خود را وارد کنید. همچنین، استفاده از فلگ -b باعث استفاده از الگوریتم bcrypt می‌شود که Docker به آن نیاز دارد:

htpasswd -Bc registry.password username

سپس از شما خواسته می‌شود تا رمز عبور خود را نیز وارد کنید. در این صورت، ترکیب اعتبارنامه‌ها به فایل registry.password اضافه خواهد شد.

حالا که فهرست اعتبارنامه‌ها ایجاد شده است، باید فایل docker-compose.yml را ویرایش کنید تا به Docker دستور دهید از این فایل برای احراز هویت کاربران استفاده کند. برای ویرایش، فایل را با دستور زیر باز کنید:

nano ~/docker-registry/docker-compose.yml

خط های هایلایت شده در قسمت زیر را به آن اضافه کنید:

version: '3'

services:
  registry:
    image: registry:latest
    ports:
    - "5000:5000"
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.password
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
     - ./auth:/auth
     - ./data:/data

حالا زمان آن رسیده است که بررسی کنید آیا احراز هویت به درستی انجام می‌شود یا خیر. برای این کار، طبق دستور زیر ابتدا به دایرکتوری اصلی پروژه بروید:

cd ~/docker-registry

سپس با استفاده از دستور زیر، رجیستری را اجرا کنید:

docker compose up

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

{}

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

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

مرحله چهارم: راه‌اندازی رجیستری داکر به عنوان سرویس

شما می‌توانید Docker Compose را طوری پیکربندی کنید که پس از هر بار بوت شدن سیستم یا حتی در صورت Crashکردن، رجیستری را به‌صورت خودکار مجدداً اجرا کند.

فایل docker-compose.yml را باز کنید تا بتوانید آن را ویرایش کنید:

nano docker-compose.yml

کدهای زیر را به بلوک registry اضافه کنید:

...
  registry:
    restart: always
...

می‌بینید که تنظیم مقدار restart روی always باعث می‌شود، کانتینر پس از هر بار بوت شدن سیستم همچنان فعال بماند. پس از اعمال تغییرات فایل را ذخیره کرده و آن را ببندید.

حالا می‌توانید رجیستری خود را به صورت فرایندی که در پس زمینه‌ اجرا می‌شود با استفاده از -d تنظیم کنید:

docker compose up -d

اجرای رجیستری در پس‌زمینه به شما این امکان را می‌دهد که بدون نگرانی از متوقف شدن فرایند، جلسه (Session) را ببندید. با‌توجه‌ به اینکه ایمیج‌های Docker معمولاً حجم بالایی دارند، در مرحله‌ی بعد لازم است محدودیت اندازه‌ی فایل‌هایی که Nginx برای آپلود می‌پذیرد را افزایش دهید.

مرحله پنجم: افزایش اندازه فایل‌ آپلود شده در Nginx

پیش از Push کردن یک ایمیج به رجیستری، باید مطمئن شوید که رجیستری شما امکان مدیریت فایل‌های حجیم را دارد. به‌طور پیش‌فرض، Nginx تنها اجازه آپلود فایل‌هایی تا ۱ مگابایت را می‌دهد، که برای ایمیج‌های داکر کافی نیست. برای افزایش این محدودیت، باید فایل پیکربندی اصلی Nginx را در مسیر /etc/nginx/nginx.conf ویرایش کنید.

sudo nano /etc/nginx/nginx.conf

در قسمت http، خط هایلایت‌شده را اضافه کنید:

...
http {
        client_max_body_size 16384m;
        ...
}
...

همان طور که می‌بینید، پارامتر client_max_body_size اکنون روی 16384m تنظیم شده است، بعد از اِعمال تغییرات، فایل را ذخیره کرده و ببندید. سپس برای اعمال تنظیمات جدید، Nginx را با دستور زیر ری‌استارت کنید:

sudo systemctl restart nginx

حالا بدون نگرانی از خطاهای Nginx، ایمیج‌های حجیم خود را به رجیستری داکر آپلود کنید.

مرحله ششم: ارسال ایمیج به رجیستری خصوصی داکر

در این مرحله سرور Docker Registry شما در حال اجراست و قابلیت پذیرش فایل‌های بزرگ را نیز دارد. حالا می‌توانید یک ایمیج را در آن Push کنید. از آنجا که ممکن است ایمیجی برای تست در اختیار نداشته باشید، از ایمیج اوبونتو در Docker Hub برای بررسی صحت عملکرد سرور استفاده خواهیم کرد.

در یک Session جدید در ترمینال کلاینت سرور خود، از دستور زیر استفاده کنید. این دستور برای دانلود، اجرا و دسترسی به پوسته (Shell) ایمیج اوبونتو کاربرد دارد:

docker run -t -i ubuntu /bin/bash

فلگ‌های -i و -t به شما امکان می‌دهند، به‌ صورت تعامل‌پذیر (Interactive) به پوسته (Shell) کانتینر دسترسی داشته باشید.

سپس با استفاده از دستور زیر، فایلی با نام SUCCESS ایجاد کنید:

touch /SUCCESS

با ایجاد این فایل، کانتینر خود را شخصی سازی کرده‌اید. برای خروج از پوسته (Shell) کانتینر، دستور زیر را اجرا کنید:

exit

حالا یک ایمیج جدید از کانتینری که شخصی‌سازی کرده‌اید، ایجاد کنید:

docker commit $(docker ps -lq) test-image

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

docker login https://your_domain

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

Output
...
Login Succeeded

بعد از ورود، نام ایمیجی که ایجاد کرده‌اید را تغییر دهید:

docker tag test-image your_domain/test-image

در‌نهایت ایمیج جدید را در رجیستری خود Push کنید:

docker push your_domain/test-image

سپس با خروجی زیر مواجه خواهید شد:

Output
Using default tag: latest
The push refers to a repository [your_domain/test-image]
1cf9c9034825: Pushed
f4a670ac65b6: Pushed
latest: digest: sha256:95112d0af51e5470d74ead77932954baca3053e04d201ac4639bdf46d5cd515b size: 736

حالا تائید کرده‌اید که رجیستری شما احراز هویت کاربران را مدیریت می‌کند و به افراد احراز هویت‌شده اجازه می‌دهد تا ایمیج‌ها را در رجیستری Push کنند. در بخش انتهایی مقاله ایمیج را از رجیستری Pull خواهیم کرد.

مرحله هفتم: Pull گرفتن ایمیج از رجیستری خصوصی داکر

برای Pull گرفتن از رجیستری خصوصی داکر، ابتدا با استفاده از نام کاربری و رمز‌عبور خود، در سرور Login کنید:

docker login https://your_domain

سپس، از دستور test-image به‌صورت زیر استفاده کنید:

docker pull your_domain/test-image

بنابراین، داکر ایمیج را دانلود خواهد کرد. با دستور زیر، کانتینر را اجرا کنید:

docker run -it your_domain/test-image /bin/bash

دستور بالا Shell کانتینر را اجرا خواهد کرد.

حالا با دستور زیر فهرستی از فایل‌ها ایجاد کنید:

ls

این فهرست شامل فایل SUCCESS نیز هست که خودتان آن را ایجاد کرده‌اید؛ بنابراین، می‌توان مطمئن شد که این کانتینر دقیقاً از همان ایمیجی که ساخته‌اید، استفاده می‌کند.

SUCCESS  bin  boot  dev  etc  home  lib  lib64  media   mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

در پایان با استفاده از دستور exit، از Shell کانتینر خارج شوید:

exit

جمع بندی

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

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

1- آیا اندازه ایمیج‌های آپلود‌ شده در Nginx محدودیت دارد؟

بله، مقدار پیش‌فرض مجاز برای آپلود در Nginx برابر با ۱ مگابایت است. بااین‌حال، می‌توان این مقدار را با استفاده از client_max_body_size افزایش داد. در این مقاله، نحوه انجام این کار را به‌صورت کامل و مرحله‌به‌مرحله توضیح داده‌ایم.

2- چرا هنگام Push کردن ایمیج، با خطای TLS certificate error مواجه می‌شویم؟

اگر از HTTPS و یک گواهینامه معتبر SSL استفاده نکرده باشید، داکر به‌صورت پیش‌فرض اجازه Push به رجیستری‌های ناامن را نمی‌دهد. برای حل این مشکل باید SSL را پیکربندی کنید یا از تنظیمات رجیستری insecure-registries در فایل دیمون داکر استفاده کنید.

3- چگونه می‌توانیم رجیستری را با یک CI/CD مانند GitLab یا Jenkins ادغام کرد؟

می‌توانید از Docker Registry Integration در ابزارهای CI/CD برای Push خودکار ایمیج‌ها پس از هر Build استفاده کنید. برای این کار باید اطلاعات احراز هویت را در Pipeline Configuration تنظیم کنید.

4- چگونه می‌توان رجیستری را مانیتور و لاگ‌های آن را بررسی کرد؟

با استفاده از docker logs registry-container-name می‌توانید لاگ‌های رجیستری را مشاهده کنید. همچنین می‌توان از Prometheus و Grafana برای مانیتورینگ پیشرفته استفاده کرد.

5- تفاوت بین رجیستری خصوصی و Docker Hub چیست؟

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