كيفية إنشاء سجل Docker الخاص بك – CloudSavvy IT
يوفر لك تشغيل سجل Docker الخاص بك موقعًا خاصًا لتخزين صور Docker. سواء كنت تعمل في بيئة شركة أو تريد تقليل اعتمادك على Docker Hub ، يمكنك بدء نشر السجل وتشغيله من خلال الطرق التالية.
Docker Registry هو نظام من جانب الخادم لتخزين وفهرسة صور Docker. يمكنك “دفع” الصورة المبنية مسبقًا إلى التسجيل. ثم يمكن للمستخدمين الآخرين “سحبهم” لتشغيلهم دون الحاجة إلى الوصول إلى Dockerfile الأصلي.
أشهر سجل عام هو Docker Hub. باستخدام السجل الخاص بك ، يمكنك التحكم في طريقة تخزين الصور والوصول إليها. يمكنه أيضًا تسهيل التكامل مع أدوات الجهات الخارجية.
تتوفر خدمات الاستضافة التي تتيح لك إنشاء عمليات تثبيت السجل بسرعة. يركز هذا الدليل على الاستضافة الذاتية للسجل على الخادم الخاص بك. الشرط الأساسي الوحيد هو أنك تحتاج إلى تثبيت Docker و docker-compose على الكمبيوتر الذي سيستضيف السجل.
قم بتشغيل التسجيل
يتم توزيع خادم Docker Registry كصورة Docker الخاصة به. يمكنك الحصول عليه من Docker Hub. يتم عرض الخادم على المنفذ 5000 ؛ تحتاج إلى ربط منفذ المضيف بمنفذ المضيف هذا حتى يتمكن العميل من الاتصال.
يجب عليك أيضًا إعداد وحدة تخزين بحيث يمكن لـ Docker Hub تخزين الصورة التي تم تحميلها بشكل دائم. تأكد من وجود مساحة خالية كافية على المضيف. يمكن أن ينمو التسجيل الذي يتم استخدامه بشكل نشط بسرعة.
قم أولاً بإنشاء ملف docker-compose.yml
ملف لوصف النشر الخاص بك. يمكنك ضبط المنفذ ومسار نظام الملفات لمطابقة تفضيلاتك. سيجعل هذا المثال التسجيل يمكن الوصول إليه على المنفذ 5000.سيتم تخزين الصورة في data
مجلد في دليل العمل.
version: "3" services: registry: image: registry:2 ports: - 5000:5000 environment: - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data restart: unless-stopped volumes: - ./data:/data
احفظ الملف وقم بالتشغيل docker-compose up -d
ابدأ التسجيل. سيقوم docker-compose باستخراج صورة التسجيل من Docker Hub. بعد ذلك ، ستبدأ حاوية جديدة مع التكوين الخاص بك.
الوصول إلى نموذج التسجيل الخاص بك
يجب أن تكون الآن قادرًا على بدء استخدام التسجيل. ضع علامة على الصورة بالمسار الذي تم حله في السجل الخاص بك.يمكنك استخدامها localhost
إذا كنت تستخدم خادم التسجيل نفسه. ثم يجب أن تكون قادرًا على دفع الصورة إلى التسجيل.
docker tag my-image localhost:5000/my-image docker push localhost:5000/my-image
ستكون الصورة متاحة الآن في التسجيل.إذا قمت بفحص ملف data
في المجلد ، سترى الطبقات التي تتكون منها الصورة.يمكنك سحبها من كمبيوتر آخر باستخدام docker pull
.بدلا من localhost
استخدم عنوان الشبكة للخادم الذي يقوم بتشغيل السجل.
قم بإعداد المصادقة
التسجيل حاليا غير آمن. يمكن لأي شخص سحب ودفع الصور! دعنا نحل هذه المشكلة عن طريق إعداد المصادقة.بعد اكتمال التكوين ، تحتاج إلى استخدام docker login
قبل التفاعل مع التسجيل.
تستخدم طريقة المصادقة الافتراضية لـ Docker Registry مصادقة HTTP الأساسية.تحتاج إلى إنشاء ملف htpasswd
من الأفضل تنفيذ الملف باستخدام الأمر المقدم بواسطة apache2-utils
.
sudo apt install apache2-utils mkdir auth htpasswd -Bc auth/.htpasswd my-username
سيؤدي هذا إلى إنشاء ملف مصادقة للمستخدم my-username
. سيُطلب منك تقديم كلمة مرور.هذه htpasswd
سيتم كتابة الملف في دليل العمل كما هو موضح أدناه: auth/.htpasswd
.
قم بتحديث ملف docker-compose.yml
تكوين نظام المصادقة.يجب تحديد نوع المصادقة المستخدمة و htpasswd
ملف. سيحتاج هذا إلى التثبيت كوحدة تخزين جديدة.
version: "3" services: registry: image: registry:2 ports: - 5000:5000 environment: - REGISTRY_AUTH: htpasswd - REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm - REGISTRY_AUTH_HTPASSWD_PATH: /auth/.htpasswd - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data restart: unless-stopped volumes: - ./auth:/auth - ./data:/data
يركض docker-compose up -d --force-recreate
أعد إنشاء حاوية التسجيل قيد التشغيل بالتكوين الجديد. يجب أن تجد أن Docker CLI يرفض الآن السماح لك بالتفاعل مع السجل.
لاستعادة الوصول ، قم بتشغيل docker login localhost:5000
. إذا كنت لا تقوم بتشغيل Docker على نفس الجهاز ، فستحتاج إلى ضبط URI الخاص بالسجل. سيطالبك Docker بتوفير اسم مستخدم وكلمة مرور.استخدم القيمة التي حددتها عند إنشاء الحملة .htpasswd
ملف.
بعد المصادقة الناجحة ، ستتمكن من البدء في دفع الصور وسحبها مرة أخرى. يخزن Docker بيانات الاعتماد الخاصة بك مؤقتًا ، لذلك لا تحتاج إلى تكرار المصادقة حتى تقوم بذلك docker logout
.
قم بإعداد SSL
تحتاج إلى إضافة شهادات SSL لجميع الاتصالات باستثناء الاتصال الأساسي localhost
. يمكنك إضافة شهادة SSL إلى السجل عن طريق تثبيت الشهادة في وحدة التخزين وتعيين متغيرات البيئة الأخرى. بشكل عام ، يجب عليك تحديث تكوين المنفذ بحيث يستمع السجل إلى منفذ HTTPS الافتراضي 443.
version: "3" services: registry: image: registry:2 ports: - 443:5000 environment: - REGISTRY_AUTH: htpasswd - REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm - REGISTRY_AUTH_HTPASSWD_PATH: /auth/.htpasswd - REGISTRY_HTTP_ADDR: 0.0.0.0:443 - REGISTRY_HTTP_TLS_CERTIFICATE=/certs/cert.crt - REGISTRY_HTTP_TLS_KEY=/certs/cert.key - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data restart: unless-stopped volumes: - ./auth:/auth - ./certs:/certs - ./data:/data
أضف ملف الشهادة الخاص بك إلى certs
ثم أعد تشغيل التسجيل. يجب أن يستخدم ملف الشهادة المقدم لدعم HTTPS.
SSL عبر LetsEncrypt
يحتوي خادم التسجيل على دعم مدمج لـ “Let’s Encrypt”. يتيح لك ذلك إنشاء شهادات SSL وتجديدها تلقائيًا.لاستخدام “Let’s Encrypt” ، أنت يجب أن قم بفضح نموذج التسجيل الخاص بك على المنفذ 443.
اقامة REGISTRY_HTTP_TLS_LETSENCRYPT_EMAIL
مع REGISTRY_HTTP_TLS_LETSENCRYPT_HOSTS
متغيرات البيئة لإضافة دعم TLS إلى السجل الخاص بك. لنقم بتشفير جهة الاتصال التي ستستخدم عنوان البريد الإلكتروني كشهادة SSL.
version: "3" services: registry: image: registry:2 ports: - 443:5000 environment: - REGISTRY_AUTH: htpasswd - REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm - REGISTRY_AUTH_HTPASSWD_PATH: /auth/.htpasswd - REGISTRY_HTTP_TLS_LETSENCRYPT_EMAIL: example@example.com - REGISTRY_HTTP_TLS_LETSENCRYPT_HOSTS: [my-registry.com] - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data restart: unless-stopped volumes: - ./auth:/auth - ./certs:/certs - ./data:/data
أعد إنشاء الحاوية docker-compose up -d --force-recreate
تطبيق التغييرات. سيستخدم نموذج التسجيل “Let’s Encrypt” للحصول على شهادة SSL للمجال المحدد. قد تستغرق الشهادة بضع دقائق.
طرق النشر الأخرى
يعد النشر باستخدام docker-compose و HTTP Basic Auth و Let’s Encrypt أسهل طريقة لتشغيل سجل حاوية خاص. ومع ذلك ، هناك خيارات أخرى متاحة ، خاصة إذا كنت تريد المزيد من التحكم المتقدم في الوصول.
لا يمكن استخدام المصادقة الأساسية لتوسيع نطاق استخدام عدد قليل من المستخدمين. وكبديل لذلك ، يدعم الخادم إجراءات المصادقة المفوضة التي تعتمد على خوادم الرموز الخارجية. تم تصميم هذا للحلول التي يجب أن تكون متكاملة بإحكام مع نظام التحكم في الوصول للمؤسسة.
لا يُطبِّق خادم التسجيل نفسه مصادقة الرمز المميز. تحاول مشاريع مثل docker_auth إضافة هذا الجزء المفقود لتوفير نظام مصادقة ناضج يمكن نشره مع السجل الرئيسي.
تم تصميم المشروع البديل لتسهيل إدارة السجل بدون تسجيل أوامر المحطة الطرفية اليدوية. Portus هو مشروع SUSE يوفر واجهة ويب أمامية ونظام مصادقة المستخدم الخاص به.