راه اندازی رجیستری خصوصی داکر اوبونتو روی 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 استفاده کنید.
مرحله ۲: تنظیم 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 این امکان را فراهم میکند که ایمیجهای موردنیاز خود را بدون نیاز به ریجیستریهای عمومی، در محیطی امن و کنترلشده نگهداری کنید. فراموش نکنید قبل از نصب رجیستری نیاز است از نصب داکر خیالتان راحت شود.