كيفية إنشاء سجل دوكر خاص في أبونتو / دبيان

Private Docker Registry on Ubuntu 22.04 / Debian

مقدمة

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

في هذا البرنامج التعليمي، سنقودك خلال عملية إعداد وتأمين سجل Docker الخاص بك على خادم Ubuntu 22.04. ستتعلم كيفية تكوين Docker Compose لتحديد إعدادات السجل واستخدام Nginx لتوجيه حركة المرور من الإنترنت إلى حاوية Docker العاملة. بحلول نهاية هذا البرنامج التعليمي، ستتمكن من دفع وسحب صور Docker بأمان من سجلك الخاص.

الشروط المسبقة

لمتابعة هذا البرنامج التعليمي، ستحتاج إلى ما يلي:

  • خادمان Ubuntu / دبيان : سيكون أحدهما بمثابة الخادم المضيف لسجل Docker الخاص بك، والآخر سيكون بمثابة خادم العميل.
  • تم تثبيت Docker على كلا الخادمين. يمكنك الرجوع إلى البرنامج التعليمي على “كيفية تثبيت واستخدام دوكر  على أوبونتو 20.04/22.04” للحصول على تعليمات مفصلة حول إنشاء Docker.
  • Docker Compose مثبت على الخادم المضيف.
  • تم تثبيت Nginx على الخادم المضيف.
  • تم تأمين Nginx باستخدام Let’ s Encrypt على الخادم المضيف. سيوجهك البرنامج التعليمي حول «إعداد إس إس إل (SSL) Let’s Encrypt على أوبونتو Ubuntu 20/18/16 LTS» خلال عملية تأمين Nginx بشهادة Let’ s Encrypt SSL.
  • اسم نطاق مسجل يتم حله للخادم الذي يستضيف سجل Docker الخاص بك. ستقوم بإعداد هذا كجزء من الشرط الأساسي لـ Let’ s Encrypt. لأغراض هذا البرنامج التعليمي، سوف نشير إلى هذا المجال على أنه your_domain.

الخطوة 1: تثبيت وتهيئة سجل Docker

للبدء، نحتاج إلى إعداد سجل Docker باستخدام Docker Compose. يتيح لك Docker Compose تحديد وإدارة تكوين حاويات Docker الخاصة بك بسهولة.

  • اتصل بخادم المضيف الخاص بك عبر SSH.
  • قم بإنشاء دليل يسمى docker-registry لتخزين ملفات التكوين عن طريق تشغيل الأمر التالي:
$ mkdir ~/docker-registry
  • انتقل إلى الدليل الذي تم إنشاؤه حديثًا:
cd ~/docker-registry
  • قم بإنشاء مؤشر فرعي يسمى البيانات لتخزين صور Docker Registry:
$ mkdir data
  • قم بإنشاء ملف docker-compose.yml وافتحه للتحرير:
$ nano docker-compose.yml
  • أضف المحتوى التالي إلى ملف docker-compose.yml لتحديد مثال أساسي لسجل Docker:
version: '3'
services:
  registry:
    image: registry:latest
    ports:
      - "5000:5000"
    environment:
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - ./data:/data

هذا التكوين ينشئ خدمة تسجيل Docker تسمى registry، باستخدام registry:latest صورة. إنه يخطط المنفذ 5000 على المضيف إلى المنفذ 5000 في الحاوية.

يحدد المتغير REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY الدليل حيث سيتم تخزين الصور داخل الحاوية. أخيرًا، يركب ./data دليل عن المضيف إلى /data الدليل في الحاوية لاستمرار بيانات الصورة.

  • احفظ الملف وأغلقه بالضغط Ctrl + X, تبع Y, وبعد ذلك Enter.
  • ابدأ خدمة Docker Registry بتشغيل الأمر التالي:
$ docker-compose up -d

يمرر العلم -d الحاويات في الخلفية.

في هذه المرحلة، يتم تشغيل سجل Docker الخاص بك على الخادم المضيف. يمكن الوصول إلى السجل عبر اسم النطاق أو عنوان IP لخادمك على المنفذ 5000.

الخطوة 2: تعديل Nginx كوكيل عكسي

للوصول بأمان إلى سجل Docker عبر HTTPS وتوجيه حركة المرور من الإنترنت إلى حاوية التسجيل، سنستخدم Nginx كوكيل عكسي. سيتعامل الوكيل العكسي مع إنهاء SSL وإرسال الطلبات إلى خدمة Docker Registry.

  • اتصل بخادم المضيف الخاص بك عبر SSH.
  • افتح ملف تكوين Nginx للمجال الخاص بك باستخدام الأمر التالي (استبدل your_domain باسم النطاق المسجل):
$ sudo nano /etc/nginx/sites-available/your_domain
  • إزالة المحتويات الموجودة وإضافة التكوين التالي:
server {
    listen 80;
    listen [::]:80;
    server_name your_domain;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name your_domain;
    ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
    location / {
        proxy_pass http://localhost:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

استبدل your_domain باسم النطاق المسجل الخاص بك. يهيئ هذا التكوين Nginx لإعادة توجيه طلبات HTTP إلى HTTPS ويستمع إلى طلبات HTTPS الواردة. يحدد شهادة SSL والمواقع الرئيسية التي يوفرها Let’ s Encrypt. location / طلبات وكلاء الكتلة إلى http://localhost:5000, الذي يتوافق مع خدمة Docker Registry التي تعمل على المضيف.

  • احفظ الملف وأغلقه بالضغط Ctrl + X, تلي Y, وبعد ذلك Enter.
  • تمكين تكوين Nginx من خلال إنشاء رابط رمزي:
$ sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
  • اختبر تكوين Nginx لمعرفة أخطاء البناء:
$ sudo nginx -t

إذا لم يكن لملف التكوين أخطاء في التركيب، فسترى syntax is ok و test is successful رسالة.

  • إعادة تشغيل Nginx لتطبيق التغييرات:
$ sudo systemctl restart nginx

تم تكوين Nginx الآن كوكيل عكسي لسجل Docker الخاص بك، حيث يتعامل مع إنهاء SSL ويحيل الطلبات إلى خدمة التسجيل.

الخطوة 3: دفع الصور وسحبها من سجل Docker الخاص

الآن بعد أن تم إعداد سجل Docker الخاص بك ويمكن الوصول إليه عبر اسم النطاق الخاص بك عبر HTTPS، يمكنك دفع وسحب صور Docker من وإلى السجل.

لدفع صورة إلى السجل، استخدم الأمر التالي:

$ docker push your_domain/image_name:tag

استبدل your_domain باسم نطاقك المسجل، image_name باسم صورتك،و tag مع نسخة محددة أو علامة للصورة.

لسحب صورة من السجل، استخدم الأمر التالي:

$ docker pull your_domain/image_name:tag

مرة أخرى، استبدل your_domainimage_name, و tag بالقيم المناسبة.

الخطوة 4: تشغيل المصادقة

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

لتمكين المصادقة، يمكنك الاختيار من بين العديد من طرق المصادقة اعتمادًا على متطلباتك. إحدى الطرق الشائعة هي استخدام اسم المستخدم ونظام التوثيق القائم على كلمة المرور. يدعم Docker Registry آلية مصادقة أساسية باستخدام ملف htpasswd. إليك كيفية تمكين المصادقة:

قم بإنشاء ملف htpasswd:

  • قم بتثبيت حزمة apache2-utils إذا لم تكن مثبتة بالفعل:
$ sudo apt-get install apache2-utils
  • قم بإنشاء ملف htpasswd مع اسم المستخدم وكلمة المرور:
$ sudo htpasswd -Bc /path/to/htpasswd <username>
  • سيُطلب منك إدخال وتأكيد كلمة مرور اسم المستخدم المحدد. كرر هذه الخطوة لكل مستخدم تريد إضافته.

قم بتهيئة سجل Docker لاستخدام المصادقة:

  • افتح ملف documber-compose.yml.
  • يضاف متغير البيئة التالي إلى registry خدمة:
environment:
  - REGISTRY_AUTH=htpasswd
  - REGISTRY_AUTH_HTPASSWD_PATH=/path/to/htpasswd
  - REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
  • استبدال /path/to/htpasswd مع المسار الفعلي لملفك htpasswd.

احفظ التغييرات وأعد تشغيل سجل Docker:

$ docker-compose down
$ docker-compose up -d

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

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

هذا هو لديك الآن إعداد Docker Registry الخاص بك مع تشفير SSL ويمكن الوصول إليه عبر اسم النطاق. يمكنك استخدام هذا السجل لتخزين وإدارة صور Docker الخاصة بك بشكل آمن.

خلاصة :

في هذه المقالة، ناقشنا عملية إنشاء سجل Docker خاص. قمنا بتغطية تثبيت Docker، وإنشاء ملف Docker Compose، وتمكين تشفير SSL/TLS، وتمكين المصادقة للوصول المصرح به. من خلال اتباع هذه الخطوات، يمكنك إنشاء سجل Docker آمن لإدارة وتوزيع طلباتك في الحاوية داخل مؤسستك. تذكر البقاء على اطلاع دائم على أفضل الممارسات الأمنية ومراجعة تكوين السجل بانتظام. التمتع بفوائد سجل Docker المضمون جيدًا لتبسيط نشر التطبيقات.

LEAVE A COMMENT