انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

إعداد Docker Registry الخاص: تخزين الصور وإدارتها

إعداد Docker Registry الخاص، registry آمن مع TLS، المصادقة، عمليات push/pull للصور، registry مؤسسي مع Harbor وتكامل CI/CD.

وقت القراءة: 14 dk الحاويات والتنسيق
dockerregistryصورةharborحاويةci/cdتخزينregistry خاص

جدول المحتويات

إعداد Docker Registry الخاص

رغم أن الـ registries العامة مثل Docker Hub مريحة، إلا أن استضافة registry خاص بك للصور الخاصة يوفر مزايا في الأمان والسرعة والتكلفة. يتناول هذا الدليل الخيارات من Docker Registry البسيط إلى Harbor المؤسسي.

لماذا registry خاص؟

الميزةالوصف
الأمانالصور الخاصة غير مكشوفة للعموم
السرعةpull/push سريع على الشبكة المحلية
التكلفةلا حدود لمعدل Docker Hub
التحكمتحكم كامل في دورة حياة الصور
الامتثالمتطلبات توطين البيانات

1. Docker Registry البسيط (registry:2)

الإعداد الأساسي

hljs bash
# تشغيل حاوية الـ registry
docker run -d \
  --name registry \
  --restart always \
  -p 5000:5000 \
  -v registry-data:/var/lib/registry \
  registry:2

# التحقق من تشغيل الـ registry
curl http://localhost:5000/v2/
# الناتج: {}

Push و Pull للصور

hljs bash
# وضع تاغ للصورة
docker tag myapp:latest localhost:5000/myapp:latest

# رفع إلى الـ registry
docker push localhost:5000/myapp:latest

# سحب من الـ registry
docker pull localhost:5000/myapp:latest

# عرض قائمة الصور في الـ registry
curl http://localhost:5000/v2/_catalog

2. Registry آمن مع TLS

hljs bash
# إنشاء مجلد الشهادات
mkdir -p /etc/docker/certs/registry

# إنشاء شهادة موقّعة ذاتياً
openssl req -newkey rsa:4096 -nodes -sha256 \
  -keyout /etc/docker/certs/registry/domain.key \
  -x509 -days 365 \
  -out /etc/docker/certs/registry/domain.crt \
  -subj "/CN=registry.example.com" \
  -addext "subjectAltName=DNS:registry.example.com,IP:192.168.1.100"

# إضافة الشهادة إلى شهادات Docker الموثوقة
mkdir -p /etc/docker/certs.d/registry.example.com:5000
cp /etc/docker/certs/registry/domain.crt \
   /etc/docker/certs.d/registry.example.com:5000/ca.crt

systemctl restart docker

تشغيل الـ Registry مع TLS

hljs bash
docker run -d \
  --name registry \
  --restart always \
  -p 5000:5000 \
  -v registry-data:/var/lib/registry \
  -v /etc/docker/certs/registry:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  registry:2

3. Registry مع المصادقة

hljs bash
# إنشاء ملف htpasswd
mkdir -p /etc/docker/registry/auth
docker run --rm \
  --entrypoint htpasswd \
  httpd:2 -Bbn admin StrongPass123! > /etc/docker/registry/auth/htpasswd

# تشغيل الـ registry مع المصادقة
docker run -d \
  --name registry \
  --restart always \
  -p 5000:5000 \
  -v registry-data:/var/lib/registry \
  -v /etc/docker/certs/registry:/certs \
  -v /etc/docker/registry/auth:/auth \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  -e REGISTRY_AUTH=htpasswd \
  -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  registry:2

# تسجيل الدخول
docker login registry.example.com:5000

4. Registry مع Docker Compose

hljs yaml
version: '3.8'

services:
  registry:
    image: registry:2
    restart: always
    ports:
      - "5000:5000"
    environment:
      REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
      REGISTRY_HTTP_TLS_KEY: /certs/domain.key
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      REGISTRY_STORAGE_DELETE_ENABLED: "true"
    volumes:
      - registry-data:/var/lib/registry
      - ./certs:/certs:ro
      - ./auth:/auth:ro

  registry-ui:
    image: joxit/docker-registry-ui:latest
    ports:
      - "8080:80"
    environment:
      - REGISTRY_TITLE=REXE Private Registry
      - REGISTRY_URL=https://registry.example.com:5000
      - SINGLE_REGISTRY=true

volumes:
  registry-data:

5. Harbor — Registry المؤسسي

hljs bash
wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-online-installer-v2.9.0.tgz
tar xzf harbor-online-installer-v2.9.0.tgz
cd harbor
cp harbor.yml.tmpl harbor.yml
nano harbor.yml
hljs yaml
hostname: registry.example.com

https:
  port: 443
  certificate: /etc/harbor/certs/domain.crt
  private_key: /etc/harbor/certs/domain.key

harbor_admin_password: StrongPass123!
data_volume: /data/harbor
hljs bash
./install.sh
docker login registry.example.com

6. تنظيف الـ Registry (Garbage Collection)

hljs bash
# تنظيف الطبقات غير المستخدمة
docker exec registry registry garbage-collect \
  /etc/docker/registry/config.yml

# تشغيل تجريبي
docker exec registry registry garbage-collect \
  --dry-run \
  /etc/docker/registry/config.yml

7. تكامل CI/CD

hljs yaml
# .github/workflows/build-push.yml
name: Build and Push

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Login to Private Registry
        uses: docker/login-action@v3
        with:
          registry: registry.example.com:5000
          username: ${{ secrets.REGISTRY_USER }}
          password: ${{ secrets.REGISTRY_PASSWORD }}

      - name: Build and Push
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: registry.example.com:5000/myapp:${{ github.sha }}

الخلاصة

Docker Registry الخاص ضروري لأمان الصور وإدارتها في البيئات المؤسسية. اختر registry:2 للحالات البسيطة، وHarbor للميزات المؤسسية (RBAC، فحص الأمان، النسخ المتماثل). مع registry خاص على خوادم REXE يمكنك تخزين صورك بأمان ودمجها في CI/CD pipelines.