راه اندازی رجیستری خصوصی داکر اوبونتو روی Ubuntu 20.04

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

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

اگر نصب داکر روی اوبونتو را انجام ندادید، قبل از نصب Docker Engine  برای اولین‌بار روی یک هاست جدید، باید مخزن Docker را راه‌ بیندازید. پس از آن، می‌توانید داکر را از Repository نصب و به‌روز کنید.

  • تنظیم فایروال
  • دامنه‌ واقعی برای سرور رجیستری
  • دو سرور اوبونتو ۲۰.۰۴ (یکی رجیستری، یکی کلاینت)
  • گواهی SSL فعال روی دامنه‌ مربوط به سرور رجیستری
  • نصب Docker، Docker Compose، و Nginx روی سرور رجیستری

پس از نصب، برای ایجاد یک رجیستری خصوصی، کافی‌ست یک فایل docker-compose.yml ساده بنویسید که سرویس Registry را روی پورت ۵۰۰۰ اجرا کند.

طبق گفته DigitalOcean، این فایل شامل تعریف سرویس registry با ایمیج registry:2 و ذخیره‌سازی فایل‌ها روی سیستم میزبان است.

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

مرحله ۱: نصب و پیکربندی Docker Registry

پیش از هر چیز، پوشه‌ای برای Registry به نام Data خواهیم ساخت:

mkdir ~/docker-registry

cd ~/docker-registry

mkdir data

اکنون فایلی به اسم docker-compose.yml خواهیم ساخت:

 

nano docker-compose.yml

دستور زیر یک نمونه اولیه از Docker Registry را تعریف می‌کنند:

~/docker-registry/docker-compose.yml

version: ‘3’

services:

registry:

image: registry:2

ports:

“5000:5000”

environment:

REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data

volumes:

./data:/data

 

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

  • سرویسی به اسم registry با ایمیج نسخه‌ ۲ ایجاد می‌کنید.
  • پورت ۵۰۰۰ سرور رو به پورت ۵۰۰۰ کانتینر وصل کنید.
  • مشخص خواهیم کرد که تصاویر داکر در مسیر /data ذخیره شوند.
  • در نهایت، با استفاده از بخش volumes کاری می‌کنیم که دیتا روی سیستم میزبان ذخیره شود.

پیکربندی را با اجرای دستور زیر شروع کنید:

docker-compose up

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

 

Output

Creating network “docker-registry_default” with the default driver

Pulling registry (registry:2)…

2: Pulling from library/registry

e95f33c60a64: Pull complete

4d7f2300f040: Pull complete

35a7b7da3905: Pull complete

d656466e1fe8: Pull complete

b6cb731e4f93: Pull complete

Digest: sha256:da946ca03fca0aade04a73aa94b54ff0dc614216bdd1d47585f97b4c1bdaa0e2

Status: Downloaded newer image for registry:2

Creating docker-registry_registry_1 … done

Attaching to docker-registry_registry_1

registry_1  | time=”2021-03-18T12:32:59.587157744Z” 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.11.2 instance.id=119fe50b-2bb6-4a8d-902d-dfa2db63fc2f service=registry version=v2.7.1

registry_1  | time=”2021-03-18T12:32:59.587912733Z” level=info msg=”redis not configured” go.version=go1.11.2 instance.id=119fe50b-2bb6-4a8d-902d-dfa2db63fc2f service=registry version=v2.7.1

registry_1  | time=”2021-03-18T12:32:59.598496488Z” level=info msg=”using inmemory blob descriptor cache” go.version=go1.11.2 instance.id=119fe50b-2bb6-4a8d-902d-dfa2db63fc2f service=registry version=v2.7.1

registry_1  | time=”2021-03-18T12:32:59.601503005Z” level=info msg=”listening on [::]:5000″ go.version=go1.11.2 instance.id=119fe50b-2bb6-4a8d-902d-dfa2db63fc2f service=registry version=v2.7.1

برای توقف اجرای کانتینر می‌توانید از ترکیب کلیدهای CTRL+C استفاده کنید.

راه اندازی یک رجیستری خصوصی Docker Ubuntu

مرحله ۲: تنظیم Nginx برای انتقال ترافیک

حالا که Docker Registry راه افتاده است، وقت آن رسیده آن را از طریق دامنه‌ در دسترس قرار دهیم. برای این کار از Nginx استفاده می‌کنیم تا درخواست‌های HTTPS را به Registry روی پورت ۵۰۰۰ فوروارد کند.

فایل پیکربندی Nginx برای دامنه را باز کنید:

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

قسمت location / را با این کد جایگزین کنید:

location / {

}

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

/etc/nginx/sites-available/your_domain

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;

}

اکنون فایل را ذخیره کنید. سپس سرویس Nginx را ری‌استارت کنید.

sudo systemctl restart nginx

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

دوباره Registry رو بالا آورید:

docker-compose up

سپس در مرورگرتان آدرس https://your domain/v2 را وارد کنید. درصورتی‌که همه چیز به‌خوبی پیش رفته باشد، شاهد یک خروجی jSON خواهید بود.

 

{}

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

 

Output registry_1 | time=”2018-11-07T17:57:42Z” level=info msg=”response completed” go.version=go1.7.6 http.request.host=cornellappdev.com http.request.id=a8f5984e-15e3-4946-9c40-d71f8557652f http.request.method=GET http.request.remoteaddr=128.84.125.58 http.request.uri=”/v2/” http.request.useragent=”Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7″ http.response.contenttype=”application/json; charset=utf-8″ http.response.duration=2.125995ms http.response.status=200 http.response.written=2 instance.id=3093e5ab-5715-42bc-808e-73f310848860 version=v2.6.2 registry_1 | 172.18.0.1 – – [07/Nov/2018:17:57:42 +0000] “GET /v2/ HTTP/1.0” 200 2 “” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7”

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

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

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.