إعداد Docker Registry الخاص: تخزين الصور وإدارتها
إعداد Docker Registry الخاص، registry آمن مع TLS، المصادقة، عمليات push/pull للصور، registry مؤسسي مع Harbor وتكامل CI/CD.
جدول المحتويات
إعداد Docker Registry الخاص
رغم أن الـ registries العامة مثل Docker Hub مريحة، إلا أن استضافة registry خاص بك للصور الخاصة يوفر مزايا في الأمان والسرعة والتكلفة. يتناول هذا الدليل الخيارات من Docker Registry البسيط إلى Harbor المؤسسي.
لماذا registry خاص؟
| الميزة | الوصف |
|---|---|
| الأمان | الصور الخاصة غير مكشوفة للعموم |
| السرعة | pull/push سريع على الشبكة المحلية |
| التكلفة | لا حدود لمعدل Docker Hub |
| التحكم | تحكم كامل في دورة حياة الصور |
| الامتثال | متطلبات توطين البيانات |
1. Docker Registry البسيط (registry:2)
الإعداد الأساسي
# تشغيل حاوية الـ 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 للصور
# وضع تاغ للصورة
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
# إنشاء مجلد الشهادات
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
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 مع المصادقة
# إنشاء ملف 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
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 المؤسسي
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
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
./install.sh
docker login registry.example.com
6. تنظيف الـ Registry (Garbage Collection)
# تنظيف الطبقات غير المستخدمة
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
# .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.
مقالات ذات صلة
تثبيت Kubernetes مع K3s: تنسيق الحاويات الخفيف
إعداد كلاستر Kubernetes أحادي ومتعدد العقد مع K3s، استخدام kubectl، إنشاء deployments وservices، إدارة التطبيقات مع Helm. دليل Kubernetes لبيئات VPS.
إدارة Docker Volume والشبكات: التخزين الدائم وتكوين الشبكة
أنواع Docker volume (named, bind mount, tmpfs)، إدارة الـ volumes، أوضاع شبكات Docker (bridge, host, overlay)، إنشاء شبكات مخصصة والتواصل بين الحاويات. دليل شامل.
تسجيل الحاويات: إدارة سجلات Docker و Kubernetes
مشغلات سجلات Docker، أمر docker logs، سجلات pods في Kubernetes، جمع السجلات المركزي (Loki, ELK Stack)، تدوير السجلات وأفضل ممارسات إدارة السجلات في بيئة الإنتاج.