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 کوئی انکرپشن نہیں ہے)۔ بلڈ مشینوں پر صرف پڑھنے کے حقوق والا الگ اکاؤنٹ بنائیں۔

بغیر سائز کی حد اور بغیر صفائی والی ریجسٹری ڈسک بھرنے کا تیز ترین طریقہ ہے۔ ہر بلڈ لیئرز کا اضافہ کرتا ہے، اور ٹیگ حذف کرنے سے جگہ خالی نہیں ہوتی: آپ کو گاربیج کلیکشن کی ضرورت ہوتی ہے۔ 40 GB والے VDS-1 پر، ایک فعال پروجیکٹ کی ریجسٹری چند ہفتوں میں ڈسک بھر دے گی۔

صفائی

ٹیگ حذف کرنا اور اس کے بعد گاربیج کلیکشن:

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 ڈائریکٹری آپ کے بیک اپس میں شامل نہیں۔ آپ وہ تمام امیجز کھو دیں گے جن کے سورسز آپ کے پاس موجود نہیں ہوں گے۔ کیا بیک اپ کرنا ہے دیکھیں۔