برنامه نویسی

رجیستری Docker Private – Community Dev

اخیراً ، از این پست ، Docker Hub نرخ خود را برای پلت فرم “تیم” خود افزایش داده است. ما بیشتر از Docker Hub برای میزبانی تصاویر خصوصی استفاده می کردیم و از “تیم ها” کمی استفاده می کردیم. نمی توانم بگویم که آیا این یک افزایش نرخ غیر منطقی بود یا نه ، اما برای من کافی بود که در مقایسه با قیمت جدید به استفاده ما نگاه کنم. ما تصاویر خصوصی برای بارگیری ظروف در سرورهای خود داریم. نرم افزار میزبان یک رجیستری Docker ، سرویس Docker Hub ارائه می دهد ، خود به عنوان یک تصویر Docker در دسترس است. بنابراین ما سرورهای خودمان را داریم ، چرا رجیستری خودمان نیستیم؟

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

در این پست من:

  1. برای رجیستری ما یک پرونده آهنگسازی Docker ایجاد کنید. وت
  2. پیکربندی رجیستری به درخواست های پروکسی به Docker Hub برای تصاویر عمومی. وت
  3. یک پیکربندی NGINX با SSL و پشتیبانی رمز عبور ایجاد کنید تا به عنوان یک پروکسی برای رجیستری ما عمل کنید. وت
  4. نحوه فشار و کشیدن تصاویر را از رجیستری خصوصی ما نشان دهید.

شما باید بدانید که چگونه می توانید کارهای زیر را انجام دهید که در این پست پوشش داده نشده است:

  • ایجاد ، ویرایش و استقرار ظروف داکر از یک فایل YML آهنگسازی. فایل آهنگسازی همچنین می تواند در Portainer و احتمالاً سایر ابزارهای مدیریت Docker استفاده شود. وت
  • آشنایی با پیکربندی Nginx یا برخی از ابزارهای پروکسی دیگر ، زیرا ایده خوبی نیست که مستقیماً رجیستری Docker خود را در اینترنت افشا کنید.

آهنگسازی

در اینجا پرونده compose.yml ما برای چرخش رجیستری و UI خود استفاده خواهیم کرد. من به برخی از پیکربندی هایی که می خواهید برای محیط خاص خود در زیر انجام دهید ، می پردازم.

services:
  registry-ui:
    image: joxit/docker-registry-ui:main
    restart: always
    ports:
      - 80:80
    environment:
      - SINGLE_REGISTRY=true
      - REGISTRY_TITLE=Docker Registry UI
      - DELETE_IMAGES=true
      - NGINX_PROXY_PASS_URL=http://registry-server:5000
      - SHOW_CONTENT_DIGEST=true
      - SHOW_CATALOG_NB_TAGS=true
      - CATALOG_MIN_BRANCHES=1
      - CATALOG_MAX_BRANCHES=1
      - TAGLIST_PAGE_SIZE=100
      - REGISTRY_SECURED=false
      - CATALOG_ELEMENTS_LIMIT=1000
    container_name: registry-ui

  registry-server:
    image: registry:2
    restart: always
    ports:
      - "5000:5000"     
    volumes:
      - /var/lib/docker-registry:/var/lib/registry
    environment:
      - REGISTRY_STORAGE_DELETE_ENABLED=true
      - REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io
      - REGISTRY_PROXY_USERNAME= 
      - REGISTRY_PROXY_PASSWORD= 
    container_name: registry-server
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

رجیستری

تغییر اصلی که باید به این سرویس انجام دهید ، پورت ای است که می خواهید ظرف آن گوش دهید.

    ports:
      - 80:80
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اگر می خواهید UI در یک درگاه متفاوت در دسترس باشد ، شماره پورت را در سمت چپ روده بزرگ تغییر دهید. اگر می خواهید آن را در پورت 8080 گوش دهید ، مشخصات پورت ها را به “8080: 80” تغییر می دهید.

همچنین ممکن است بخواهید این گزینه ها را ویرایش کنید:

      - REGISTRY_TITLE=Docker Registry UI
      - DELETE_IMAGES=true
      - NGINX_PROXY_PASS_URL=http://registry-server:5000
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در اینجا می توانید عنوان صفحه وب نمایش داده شده را تغییر دهید. من دوست دارم یک روش آسان برای حذف تصاویر داشته باشم ، بنابراین “Delete_Images” را فعال کرده ام ، اما اگر این ویژگی را نمی خواهید ، می توانید آن را روی “کاذب” تنظیم کنید. “nginx_proxy_pass_url” باید به نام سرویس رجیستری شما (“رجیستری-سرور” در مثال من) تنظیم شود و پورت ای که در آن گوش می دهد (5000).

می توانید اطلاعات بیشتری در مورد UI در اینجا پیدا کنید.

رجیستری

برای سرویس رجیستری ، مانند UI ، درگاه مورد نظر خود را که می خواهید رجیستری گوش دهید تنظیم کرده اید.

   ports:
      - "5000:5000"     
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

    volumes:
      - /var/lib/docker-registry:/var/lib/registry
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

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

محیط

    environment:
      - REGISTRY_STORAGE_DELETE_ENABLED=true
      - REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io  
      - REGISTRY_PROXY_USERNAME= 
      - REGISTRY_PROXY_PASSWORD= 
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

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

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

احتمالاً نیازی به تغییر “registry_proxy_remoteurl” ندارید. این به رجیستری Docker Hub همانطور که هست اشاره می کند.

Docker Hub درخواست های دریچه گاز را انجام می دهد:
زباله

اگر 10 در ساعت برای تنظیم شما کافی نباشد ، می توانید یک حساب توپی Docker Tier Tier Free ایجاد کنید و سپس رجیستری خصوصی خود را پیکربندی کنید تا با استفاده از آن اعتبارنامه ها بکشید. این به شما 40 کشش در ساعت از Docker Hub می دهد.

      - REGISTRY_PROXY_USERNAME= 
      - REGISTRY_PROXY_PASSWORD= 
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

“registry_proxy_username” باید روی نام کاربری حساب Hub Docker شما تنظیم شود. “registry_proxy_password” را می توان در رمز عبور Docker Hub شما تنظیم کرد اما من آن را توصیه نمی کنم. در عوض به تنظیمات حساب خود بروید و روی “نشانه های دسترسی شخصی” کلیک کنید.
نشانه های دسترسی شخصی
هنگامی که یک نشانه جدید ایجاد می کنید ، حتماً درست در کلیپ بورد کپی کنید. بعداً نمی توانید آن را ببینید. آن نشانه را در قسمت “registry_proxy_password” قرار دهید.

فایده ای که رجیستری خصوصی شما به عنوان یک پروکسی برای رجیستری Docker Hub عمل می کند این است که رجیستری خصوصی شما این تصاویر را ذخیره می کند. بنابراین اگر ظروف زیادی برای چرخش دارید که به تصاویر عمومی متکی هستند فقط 1 کشش از Docker Hub برای ظرف 1 ساخته می شود و بقیه نسخه ذخیره شده را دریافت می کنند.

رجیستری را شروع کنید

شما رجیستری را مانند هر پروژه دیگری که Docker Constit انجام می دهید ، شروع می کنید. از دایرکتوری که در آن وجود دارد آهنگسازی پرونده:

# Depending on which version of docker you are using the command
# is:
docker compose up 
# or
docker-compose up
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

شما باید عضو گروه “Docker” باشید یا برای شروع ظروف از “sudo” استفاده کنید.

اگر ظروف شما بدون خطا شروع می شود ، می توانید CTRL-C را بکشید تا آنها را با افزودن “-D” در پس زمینه مجدداً راه اندازی کنید.

docker compose up -d
# or
docker-compose up -d
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پروکسی رجیستری با استفاده از nginx

توصیه می کنم NGINX یا برخی از پروکسی های وب دیگر را در مقابل رجیستری Docker خود تنظیم کنید ، به خصوص اگر در حال حاضر از آن برای خدمات دیگری که میزبان آن هستید استفاده می کنید. تغییرات زیادی در تنظیمات NGINX وجود دارد که من نمی توانم به شما سهام بدهم ، “این کار خواهد کرد” ، برای راه اندازی شما. اما این پیکربندی اساسی برای من کار می کند:

# Upstreams
upstream docker-registry {
   server 127.0.0.1:5000;
}


server  {
  listen 10000 ssl;
  server_name    myserver.com;

  ssl_protocols TLSv1.3 TLSv1.2;

  chunked_transfer_encoding on;
  gzip off;

  client_max_body_size 0;  
  proxy_buffering off;  
  proxy_request_buffering off;  
  proxy_max_temp_file_size 0;  

  #access_log /var/log/nginx/docker-registry-access.log;
  error_log /var/log/nginx/docker-registry-error.log;

  ssl_certificate /etc/letsencrypt/live/myserver.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myserver.com/privkey.pem;

  location / {

        auth_basic "Registry Realm";
        auth_basic_user_file /etc/docker-registry-htpasswd;  

        proxy_pass http://docker-registry/;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
  }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این پرونده در “/etc/nginx/سایت های موجود در دسترس/docker-Registry” ، با یک پیوند نمادین در “/etc/nginx/sites- فعال/” می رود:

sudo ln /etc/nginx/sites-available/docker-registry /etc/nginx/sites-enabled/
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

شما نیاز به تغییر چند خط دارید:

server  {
  listen 10000 ssl;
  server_name    myserver.com;
  ssl_certificate /etc/letsencrypt/live/myserver.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myserver.com/privkey.pem;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

درگاه گوش را با درگاه مورد نظر خود جایگزین کنید. “myserver.com” را در هر 3 مکان با نام دامنه ای که استفاده می کنید جایگزین کنید. اگر از Let's Encrypt استفاده نمی کنید ، کل مسیر را با جایی که گواهی SSL خود را نگه دارید جایگزین کنید.

    auth_basic "Registry Realm";
    auth_basic_user_file /etc/docker-registry-htpasswd;  
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در این بخش محافظت از رمز عبور به رجیستری شما اضافه می شود. از یک فایل استاندارد HTPassWD استفاده می کند. برای ایجاد این پرونده ، این مراحل را دنبال کنید (فقط مبتنی بر دبیان):

sudo apt update
sudo apt install apache2-utils
htpasswd -c /etc/docker-registry-htpasswd username
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

“نام کاربری” را با هر آنچه می خواهید برای یک نام جایگزین کنید. از شما خواسته می شود برای رمز عبور. می توانید با تکرار دستور بدون “-C” کاربران اضافی را اضافه کنید.

پس از ایجاد پرونده و ایجاد تغییرات لازم ، می توانید با استفاده از این دستور ، تنظیمات پیکربندی NGIX خود را آزمایش کنید:

sudo nginx -t
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اگر پیکربندی قابل قبول باشد ، پیام هایی مانند این را مشاهده خواهید کرد:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

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

sudo systemctl restart nginx
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

با استفاده از رجیستری

برای شروع استفاده از رجیستری خصوصی خود ، باید وارد شوید که پرونده “~ .docker/config.json” را ایجاد می کند. از خط فرمان:

docker login myserver.com:PORT
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

جایگزین کردن “myserver.com” و “پورت” با ارزش های خود. شما از نام کاربری و رمز عبور خودداری خواهید کرد.

اکنون بالاخره آماده استفاده از رجیستری هستیم! ابتدا باید تصویری را به آن سوق دهیم:

docker push myserver.com:port/yourimage:tag
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

کشیدن:

docker pull myserver.com:port/yourimage:tag
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این دو دستور برای رجیستری خصوصی شما کار می کنند ، اما اگر می خواهید یک تصویر عمومی را از Docker Hub بکشید ، باید مسیر تصویر عادی را تنظیم کنید تا شامل “/کتابخانه/” مانند این:

docker pull myserver.com:port/library/publicimage:tag
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

“/کتابخانه” مسیر اصلی برای همه تصاویر Docker Hub است.

خلاصه

در این پست نحوه پیکربندی یک رجیستری داکر خصوصی را نشان داده ام. رجیستری از Docker Hub به عنوان یک فروشگاه پشتیبان برای تصاویر عمومی استفاده می کند. NGINX برای تهیه رمزگذاری SSL و همچنین رمز عبور از رجیستری خصوصی استفاده می شود.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا