الف container رجیستری یک کاتالوگ ذخیره سازی است که از آنجا می توانید فشار دهید و بکشید container تصاویر

بسیاری از رجیستری های عمومی و خصوصی مانند Docker Hub، Amazon ECR و Google Cloud Artifact Registry در دسترس توسعه دهندگان است. اما گاهی به جای تکیه کردن روی یک فروشنده خارجی، شاید بخواهید host خودت تصاویرت این به شما کنترل بیشتری بر روش پیکربندی رجیستری و مکان آن می دهد container تصاویر میزبانی می شوند.

این مقاله یک دست است-روی آموزشی که به شما یاد می دهد چگونه خودhost الف Container رجیستری

فهرست مطالب

  • الف چیست Container تصویر؟

  • الف چیست Container رجیستری؟

  • چرا ممکن است بخواهید خودتان راhost الف Container رجیستری

  • چگونه خود راhost الف Container رجیستری

  • مرحله 1: Docker و Docker Compose را نصب کنید روی سرور

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

  • مرحله 3: NGINX را برای مدیریت TLS اجرا کنید

  • آماده رفتن!

  • گزینه های دیگر

  • نتیجه گیری

اگر از قبل با ابزارهایی مانند Docker و NGINX آشنا باشید و درک کلی از آنچه container است.

الف چیست Container تصویر؟

قبل از اینکه در مورد صحبت کنیم container ثبت، اجازه دهید ابتدا بفهمیم که a container تصویر است. به طور خلاصه، الف container image بسته ای است که شامل تمام فایل ها، کتابخانه ها و تنظیمات برای اجرای a است container. آنها از لایه‌هایی تشکیل شده‌اند که هر لایه نشان‌دهنده مجموعه‌ای از تغییرات سیستم فایل است که فایل‌ها را اضافه، حذف یا تغییر می‌دهد.

رایج ترین راه برای ایجاد یک container تصویر برای استفاده از a Dockerfile.

# build an image
docker build -t pliutau/hello-world:v0 .

# check the images locally
docker images
# REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
# hello-world   latest    9facd12bbcdd   22 seconds ago   11MB

این باعث ایجاد یک container تصویری که ذخیره می شود روی ماشین محلی شما اما اگر بخواهید این تصویر را با دیگران به اشتراک بگذارید یا از آن استفاده کنید چه می شود روی یک ماشین متفاوت؟ اینجاست که container رجیستری ها وارد می شوند

الف چیست Container رجیستری؟

الف container رجیستری یک کاتالوگ ذخیره سازی است که در آن می توانید فشار دهید و بکشید container تصاویر از. تصاویر در مخازن گروه بندی می شوند که مجموعه ای از تصاویر مرتبط با همین نام هستند. به عنوان مثال، روی رجیستری Docker Hub، nginx نام مخزنی است که شامل نسخه‌های مختلف تصاویر NGINX است.

برخی از رجیستری ها عمومی هستند، به این معنی که تصاویر میزبانی می شوند روی آنها برای هر کسی قابل دسترسی هستند روی اینترنت ثبت عمومی مانند Docker Hub گزینه خوبی برای این کار است host پروژه های متن باز

از سوی دیگر، ثبت خصوصی راهی برای گنجاندن امنیت و حریم خصوصی در سازمان ارائه می دهد container ذخیره سازی تصویر، یا در فضای ابری یا روی-محل. این رجیستری های خصوصی اغلب دارای ویژگی های امنیتی پیشرفته و پشتیبانی فنی هستند.

پیشنهاد می‌کنیم بخوانید:  PHP 7 را روی آن نصب کنید CentOS 7

لیست رو به رشدی از رجیستری های خصوصی موجود مانند Amazon ECR، GCP Artifact Registry، GitHub وجود دارد. Container Registry و Docker Hub همچنین یک ویژگی مخزن خصوصی را ارائه می دهد.

به عنوان یک توسعه دهنده، شما با a تعامل دارید container رجیستری هنگام استفاده از docker push و docker pull دستورات

docker push docker.io/pliutau/hello-world:v0

# In case of Docker Hub we could also skip the registry part
docker push pliutau/hello-world:v0

بیایید به آناتومی a نگاه کنیم container آدرس تصویر:

docker pull docker.io/pliutau/hello-world:v0@sha256:dc11b2...
                |            |            |          |
                ↓            ↓            ↓          ↓
             registry    repository      tag       digest

چرا ممکن است بخواهید خودتان را انجام دهیدhost الف Container رجیستری

گاهی به جای تکیه کردن روی ممکن است بخواهید ارائه دهنده ای مانند AWS یا GCP host تصاویر شما را خودتان این زیرساخت شما را درونی نگه می دارد و باعث می شود کمتر به آن اعتماد کنید روی فروشندگان خارجی در برخی از صنایع به شدت تحت نظارت، این حتی یک الزام است.

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

چگونه خودhost الف Container رجیستری

چندین منبع باز وجود دارد container راه حل های رجیستری موجود است. محبوب ترین مورد به طور رسمی توسط Docker به نام رجیستری پشتیبانی می شود و برای ذخیره و توزیع آن پیاده سازی می شود. container تصاویر و مصنوعات این بدان معنی است که شما می توانید رجیستری خود را در داخل a اجرا کنید container.

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

  • Docker و Docker Compose را نصب کنید روی سرور

  • را پیکربندی و اجرا کنید رجیستری container.

  • اجرا کنید NGINX برای رسیدگی به TLS و ارسال درخواست ها به رجیستری container.

  • گواهینامه های SSL را راه اندازی کنید و دامنه را پیکربندی کنید.

مرحله 1: Docker و Docker Compose را نصب کنید روی سرور

می توانید از هر سروری که از Docker پشتیبانی می کند استفاده کنید. به عنوان مثال، می توانید از DigitalOcean Droplet با اوبونتو استفاده کنید. برای این نسخه نمایشی از Google Cloud Compute برای ایجاد یک VM با اوبونتو استفاده کردم.

neofetch

# OS: Ubuntu 20.04.6 LTS x86_64
# CPU: Intel Xeon (2) @ 2.200GHz
# Memory: 3908MiB

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

# install docker engine and docker-compose
sudo snap install docker

# verify the installation
docker --version
docker-compose --version

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

در مرحله بعد باید رجیستری خود را پیکربندی کنیم container. موارد زیر compose.yaml فایل یک رجیستری ایجاد می کند container با حجم برای ذخیره تصاویر و حجم برای ذخیره فایل رمز عبور.

services:
  registry:
    image: registry:latest
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.password
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      # Mount the password file
      - ./registry/registry.password:/auth/registry.password
      # Mount the data directory
      - ./registry/data:/data
    ports:
      - 5000

فایل رمز تعریف شده در REGISTRY_AUTH_HTPASSWD_PATH برای احراز هویت کاربران هنگام فشار دادن یا کشیدن تصاویر از رجیستری استفاده می شود. ما باید یک فایل رمز عبور با استفاده از htpasswd فرمان همچنین باید یک پوشه برای ذخیره تصاویر ایجاد کنیم.

mkdir -p ./registry/data

# install htpasswd
sudo apt install apache2-utils

# create a password file. username: busy, password: bee
htpasswd -Bbn busy bee > ./registry/registry.password

اکنون می توانیم رجیستری را شروع کنیم container. اگر این پیام را می بینید، همه چیز همانطور که باید کار می کند:

docker-compose up

# successfull run should output something like this:
# registry | level=info msg="listening روی [::]:5000"

مرحله 3: NGINX را برای مدیریت TLS اجرا کنید

همانطور که قبلا ذکر شد، ما می توانیم از NGINX برای رسیدگی به TLS و ارسال درخواست ها به رجیستری استفاده کنیم container.

پیشنهاد می‌کنیم بخوانید:  چگونه در ایالات متحده بیت کوین بخریم؟

Docker Registry برای کار کردن به یک گواهی SSL معتبر و قابل اعتماد نیاز دارد. می توانید از چیزی مانند Let’s Encrypt استفاده کنید یا آن را به صورت دستی دریافت کنید. مطمئن شوید که یک نام دامنه به سرور شما اشاره دارد (registry.pliutau.com در مورد من). برای این نسخه ی نمایشی من قبلاً گواهی ها را با استفاده از certbot به دست آورده و در آن قرار داده ام ./nginx/certs دایرکتوری

از آنجایی که ما در حال اجرای Docker Registry در یک container، می توانیم NGINX را در a اجرا کنیم container و همچنین با افزودن سرویس زیر به compose.yaml فایل:

services:
  registry:
    # ...
  nginx:
    image: nginx:latest
    depends_on:
      - registry
    volumes:
      # mount the nginx configuration
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      # mount the certificates obtained from Let's Encrypt
      - ./nginx/certs:/etc/nginx/certs
    ports:
      - "443:443"

ما nginx.conf فایل می تواند شبیه این باشد:

worker_processes auto;

events {
    worker_connections 1024;
}

http {
    upstream registry {
        server registry:5000;
    }

    server {
        server_name registry.pliutau.com;
        listen 443 ssl;

        ssl_certificate /etc/nginx/certs/fullchain.pem;
        ssl_certificate_key /etc/nginx/certs/privkey.pem;

        location / {
            # important setting for large images
            client_max_body_size                1000m;

            proxy_pass                          http://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;
            proxy_read_timeout                  900;
        }
    }
}

آماده رفتن!

پس از این مراحل می توانیم رجیستری و ظروف Nginx خود را اجرا کنیم.

docker-compose up

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

docker login registry.pliutau.com

# Username: busy
# Password: bee
# Login Succeeded

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

docker build -t registry.pliutau.com/pliutau/hello-world:v0 .

docker push registry.pliutau.com/pliutau/hello-world:v0
# v0: digest: sha256:a56ea4... size: 738

در سرور خود می توانید تصاویر آپلود شده را در پوشه داده بررسی کنید:

ls -la ./registry/data/docker/registry/v2/repositories/

گزینه های دیگر

با پیروی از مثال بالا، می توانید رجیستری را نیز اجرا کنید روی کوبرنتیس یا می توانید از یک سرویس رجیستری مدیریت شده مانند Harbor استفاده کنید که یک رجیستری منبع باز است که ویژگی های امنیتی پیشرفته ای را ارائه می دهد و با Docker و Kubernetes سازگار است.

همچنین، اگر می خواهید یک رابط کاربری برای رجیستری خود میزبان داشته باشید، می توانید از پروژه ای مانند joxit/docker-registry-ui استفاده کنید و آن را در یک جداگانه اجرا کنید. container.

نتیجه گیری

خود میزبان Container رجیستری ها به شما این امکان را می دهند که کنترل کاملی بر رجیستری خود و روش استقرار آن داشته باشید. در عین حال هزینه نگهداری و ایمن سازی رجیستری نیز به همراه دارد.

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

می توانید کد منبع کامل این دمو را پیدا کنید روی GitHub. همچنین، شما می توانید آن را به عنوان یک ویدیو تماشا کنید روی کانال یوتیوب ما