قاعدة تسجيل المجلدات هي قاعدة تخزين للبيانات من حيث يمكنك أن تضغط وتسحب صور المجلدات.

وهناك عدد كبير من الأرشيفات العامة والخاصة المتاحة للمطورين مثل Docker Hub، Amazon ECR، و Google Cloud Artifact Registry، ولكن في بعض الأحيان بدلاً من الاعتماد على مزود خارجي قد ترغب في توفير صورك الخاصة بنفسك. هذا يعطيك أكثر 控制 بما يتعلق بكيفية تكوين المجلد وأين يتم تسجيل الصور الخاصة بالمجلدات.

هذا المقال هو درس يدوي سيعلمك كيفية توفير قاعدة تسجيل المجلدات الخاصة.

جدول محتويات

سوف تحصل على الما يحتاج من هذا المقال إذا كنت مهنيًا بالأدوات مثل دوكر وNGINX ولديك فهم عام لما هو ما يعنيه البحث الوطني.

ما هو صورة البحث الوطني؟

قبل أن نتحدث عن معاينات البحث الوطني، دعونا نفهم ما هو صورة البحث الوطني. بإختصار، تمثل صورة البحث الوطني معالجة تشمل جميع الملفات والمكتبات والإعدادات اللازمة لتشغيل البحث الوطني. إنها تكون من تشكيل طبقات حيث كل طبقة تمثل مجموعة من التغيرات التي تأسيس، تحذف أو تغير الملفات.

أفضل طريقة لإنشاء صورة البحث الوطني هي استخدام Dockerfile.

# بناء صورة
docker build -t pliutau/hello-world:v0 .

# مراجعة الصور الموجودة محلياً
docker images
# المخزن    التسمية     المعرفي     تاريخ الإنشاء     حجم
# hello-world   latest    9facd12bbcdd   22 ثانية مضت     11MB

هذا يخلق صورة القارورة التي تتخزن على جهازك المحلي. لكن ماذا لو أردت مشاركة هذه الصورة مع الآخرين أو استخدامها على جهاز آخر؟ وهنا حيث يأتي مراكز التسجيلات القارورية.

ما هو مركز تسجيلات القارورات؟

مركز تسجيلات القارورات هو قاعدة تخزين للمجموعات حيث يمكنك أن تضغط وتسحب صور القارورات منها. الصور تتم تجميعها في مستودعات، وهي مجموعات من الصور المرتبطة بنفس الإسم. على سبيل المثال، في مركز Docker Hub، nginx هو أسم مستودع الذي يحتوي على أصدقاء إصدارات مختلفة للصفات NGINX.

بعض المراكز عامة، وهذا يعني أن صور القارورات الموجودة فيها تستخدم من أي شخص على الإنترنت. المراكز العامة مثل Docker Hub خيار جيد لمشاركة مشاريع المصدر المفتوح.

ومن جهة أخرى، توفر المراكز الخاصة طريقة لتأسيس أمن وخصوصية في تخزين صور القارورات الحكومية، سواء كانت مضافة في السحابة أو على الأرض. تتضمن هذه المراكز الخاصة ميزات أمن متقدمة ودعم تقني في الغالب.

وهناك قائمة تتزايد من المراكز الخاصة المتوفرة مثل Amazon ECR، GCP Artifact Registry، GitHub Container Registry، ويقدم Docker Hub أيضًا ميزة مستودع خاص.

كمطوّر، تتفاعل مع سجل الحاويات عند استخدام الأمرين <رمز >docker push و <رمز >docker pull.

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

# في حالة Docker Hub يمكننا أيضًا تخطي جزء السجل
docker push pliutau/hello-world:v0

دعونا نلقي نظرة على تشريح عنوان URL لصورة الحاوية:

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

لماذا قد ترغب في استضافة سجل حاويات ذاتيًا

في بعض الأحيان، بدلاً من الاعتماد على مزود مثل AWS أو GCP، قد ترغب في استضافة صورك بنفسك. هذا يحافظ على بنيتك التحتية داخلية ويجعلك أقل اعتمادًا على البائعين الخارجيين. في بعض الصناعات شديدة التنظيم، يعد هذا مطلبًا.

يعمل السجل المستضاف ذاتيًا على خوادمك الخاصة، مما يمنحك مزيدًا من التحكم في كيفية تكوين السجل ومكان استضافة صور الحاويات. في نفس الوقت يأتي ذلك مع تكلفة صيانة السجل وتأمينه.

كيفية الاستضافة الذاتية لسجل الحاويات

هناك العديد من حلول سجل الحاويات مفتوحة المصدر المتاحة. أكثرها شيوعًا مدعوم رسميًا من قبل Docker، ويسمى سجل، مع تطبيقه لتخزين وتوزيع صور الحاويات والقطع الأثرية. هذا يعني أنه بإمكانك تشغيل السجل الخاص بك داخل الحاوية.

إليك الخطوات الرئيسية لتشغيل سجل على الخادم:

  • تثبيت Docker وDocker Compose على الخادم.
  • تكوين وتشغيل حاوية السجل وتشغيلها.

    .

  • شغّل NGINX لمعالجة TLS وتوجيه الطلبات إلى عبء المسجل.

  • إعداد شهادات SSL وتكوين النطاق.

الخطوة 1: تثبيت Docker وDocker Compose على الخادم

يمكنك استخدام أي خادم يدعم Docker. على سبيل المثال، يمكنك استخدام Droplet DigitalOcean مع Ubuntu. لهذه العرض استخدمت خوادم الحاسوب العصبي للغوغل لخلق جهاز وirtual مع Ubuntu.

neofetch

# نظام التشغيل: Ubuntu 20.04.6 LTS x86_64
# CPU: Intel Xeon (2) @ 2.200GHz
# الذاكرة: 3908MiB

بمجرد وصولنا إلى الجهاز الافتراضي، يجب علينا تثبيت Docker وDocker Compose. Docker Compose هو اختياري، لكنه يجعل من السهل إدارة تطبيقات مع عبئات متعددة.

# تثبيت محرك Docker وdocker-compose
sudo snap install docker

# التحقق من التثبيت
docker --version
docker-compose --version

الخطوة 2: تكوين وتشغيل عبء المسجل

بعد ذلك يتوجب علينا تكوين عبء المسجل. سيخلق ملف compose.yaml التالي عبء المسجل مع حجم لتخزين الصور وحجم لتخزين ملف كلمة المرور.

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:
      # توصيل ملف المرور
      - ./registry/registry.password:/auth/registry.password
      # توصيل دليل البيانات
      - ./registry/data:/data
    ports:
      - 5000

يُستخدم ملف المرور المحدد في REGISTRY_AUTH_HTPASSWD_PATH للتحقق من المستخدمين عندما يقومون بتحميل أو تخزين الصور من المخزن. يجب علينا إنشاء ملف مرور باستخدام أمر htpasswd. سيتوجب علينا أيضًا إنشاء مجلد لتخزين الصور.

mkdir -p ./registry/data

# تثبيت htpasswd
sudo apt install apache2-utils

# إنشاء ملف مرور. اسم المستخدم: busy, كلمة المرور: bee
htpasswd -Bbn busy bee > ./registry/registry.password

يمكننا استART ال容器 المخزن الآن. إذا رأيتم هذه الرسالة، فإن كل شيء يعمل كما يجب.

docker-compose up

# التشغيل الناجح يتم به إخراج شيء من هذا القبيل:
# registry | level=info msg="listening on [::]:5000"

الخطوة 3: تشغيل NGINX لمعالجة TLS

وكما ذكرت مسبقًا، يمكننا استخدام NGINX لمعالجة TLS وتوجيه ال solicitudes إلى ال容器 المخزن.

تتطلب المخزن الدوكر المصرفي شهادة SSL موثوقة ومصرحة للعمل. يمكنك استخدام شيء مثل Let’s Encrypt أو تحصل عليه يدويًا. تأكد من أن لديك إسم منصة يوجه الى مخزنك (registry.pliutau.com في حالتي). لهذه العرضة قمت بحصد الشهادات باستخدام certbot ووضعتها في مجلد ./nginx/certs.

لأننا نقوم بتشغيل مخزون الدوكر في حاجز، يمكننا أيضًا تشغيل NGINX في حاجز بإضافة الخدمة التالية إلى ملف compose.yaml:

services:
  registry:
    # ...
  nginx:
    image: nginx:latest
    depends_on:
      - registry
    volumes:
      # ت montar la configuración de nginx
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      # montar los certificados obtenidos de Let's Encrypt
      - ./nginx/certs:/etc/nginx/certs
    ports:
      - "443:443"

Nuestro archivo nginx.conf podría verse así:

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 / {
            # Ajuste importante para imágenes grandes
            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;
        }
    }
}

Listo para ir!

Después de estos pasos, podemos ejecutar nuestros contenedores de registro y Nginx.

docker-compose up

Ahora, del lado del cliente, puedes empujar y tirar imágenes de su registro. Sin embargo, primero necesitamos iniciar sesión en el registro.

docker login registry.pliutau.com

# Nombre de usuario: ocupado
# Contraseña: abeja
# Inicio de sesión exitoso

Ya es hora de construir y enviar nuestra imagen a nuestro registro autohospedado:

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

En tu servidor puedes ver las imágenes subidas en la carpeta de datos:

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

Otras opciones

siguiendo el ejemplo anterior, también puedes ejecutar el registro en Kubernetes. O podrías usar un servicio de registro administrado como Harbor, que es un registro de código abierto que ofrece funciones de seguridad avanzadas y es compatible con Docker y Kubernetes.

أيضًا، إذا كنت ترغب في أن تحصل على واجهة مستخدم لمعارفك المُسْتِدْركة، يمكنك استخدام مشروع مثل joxit/docker-registry-ui وتشغيله في 容器 منفصل.

ختام

المستودعات المُسْتِدْركة الخاصة تسمح لك بالسيطرة الكامل على معارفك والطريقة التي تتم تنظيمها. وفي الوقت نفسه يوجد تكاليف للمراقبة وتأمين هذه المعارف.

مهما كان سبب تشغيل معارفك الخاصة، فإنك بالآن تعلم كيف يتم ذلك. من هنا يمكنك مقارنة خيارات مختلفة واختيار الواحد الأفضل المتماسك بحاجياتك.

يمكنك ايجاد مصادر البرمجيات الكاملة لهذه التمويلة على GitHub. وأيضًا، يمكنك مشاهدتها كفيلم على قناتنا على YouTube.