Skip to content
VDS · Docker والحاويات

سجل الصور الخاص بك

متى تحتاج إلى سجل خاص بك، وكيف تُعدّه بكلمة مرور وشهادة، وكم يستهلك من القرص، وكيف لا تحوّله إلى مكبّ للصور القديمة.

آخر تحديث 23 أغسطس 2026

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

الخيار البسيط: registry:2

services:
  registry:
    image: registry:2
    restart: unless-stopped
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      REGISTRY_STORAGE_DELETE_ENABLED: "true"
    volumes:
      - ./data:/var/lib/registry
      - ./auth:/auth:ro
    ports:
      - "127.0.0.1:5000:5000"

أنشئ كلمة المرور هكذا:

mkdir -p auth
docker run --rm --entrypoint htpasswd httpd:2 -Bbn deploy 'long-password' > auth/htpasswd
docker compose up -d

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

العمل معه

docker login registry.example.com
docker tag myapp:1.5.0 registry.example.com/myapp:1.5.0
docker push registry.example.com/myapp:1.5.0
docker pull registry.example.com/myapp:1.5.0

curl -u deploy https://registry.example.com/v2/_catalog
curl -u deploy https://registry.example.com/v2/myapp/tags/list

بعد docker login، تُحفظ بيانات الاعتماد في ~/.docker/config.json بنص صريح (فك ترميز base64 ليس تشفيرًا). على أجهزة البناء، أنشئ حسابًا منفصلًا بصلاحيات قراءة فقط.

المستودع بلا حد للحجم وبلا تنظيف هو أسرع طريق لملء القرص. كل عملية بناء تضيف طبقات، وحذف وسم لا يحرّر مساحة: تحتاج إلى جمع المهملات. على VDS-1 بسعة 40 GB، سيملأ مستودع مشروع نشط القرص في غضون أسبوعين.

التنظيف

حذف وسم ثم جمع المهملات التالي:

docker compose exec registry registry garbage-collect \
  --delete-untagged /etc/docker/registry/config.yml

يجب إيقاف المستودع أثناء تشغيل جمع المهملات — وإلا فقد يفقد دفع متزامن بعض الطبقات:

docker compose stop registry
docker compose run --rm registry registry garbage-collect --delete-untagged /etc/docker/registry/config.yml
docker compose start registry

اضبط هذا كـمهمة مجدولة مرة واحدة في الأسبوع وراقب مساحة القرص.

البديل: مستودع مضمّن مع خادم Git

إذا كنت قد أعددت بالفعل Forgejo أو Gitea، فلديهما مخزن حزم مضمّن، بما في ذلك صور Docker. لا تحتاج إلى خدمة منفصلة: يتم الوصول عبر الحسابات نفسها، وتكون الصور مرئية بجانب الشيفرة. للمشاريع الصغيرة، هذا أكثر ملاءمة من registry:2 المستقل.

أخطاء شائعة

  • المستودع مفتوح بلا تفويض. من خلاله يمكن لشخص ما زرع صورة تُنشر على جهاز الإنتاج الخاص بك.
  • وسم latest بدلًا من الإصدارات. يتوقف المستودع عن كونه مصدرًا لقابلية إعادة الإنتاج: لا يتضح ما الذي نُشر بالضبط. راجع تحديث الحاويات.
  • التخزين على القرص نفسه الذي تحوي قاعدة البيانات. ارتفاع مفاجئ في عمليات الدفع يستهلك عرض نطاق القرص ويُبطئ خدمة الإنتاج — راجع سرعة القرص.
  • دليل ./data غير مشمول في نسخك الاحتياطية. ستفقد كل الصور التي لا تتوفر على مصادرها في متناول يدك. راجع ما يجب نسخه احتياطيًا.