محتويات الدورة

GitHub Actions / المشاركة والسلطة المحدودة / الدرس 12

حاويات المهام والخدمات ومسارات الشبكة

حدد موضع عميل الاختبار قبل عنوان الخدمة ونشر المنفذ.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • تمييز حاوية المهمة والإجراء والخدمة.
  • شرح منفذ المضيف والعنوان الداخلي دون بدء خدمة.

ثلاثة أدوار بعقود مختلفة

توفر حاوية المهمة بيئة تنفيذ خطوات المهمة المدعومة، وتغلف حاوية الإجراء تنفيذاً لإجراء واحد، وتقدم حاوية الخدمة اعتماداً تحتاجه المهمة مثل قاعدة أو ذاكرة. هذه آليات مترابطة وليست أسماء متبادلة. يتطلب دعم حاويات المهام والخدمات الموثق مشغّل Linux مناسباً وDocker، مع اختلاف شروط المستضاف والذاتي. تبقى أمثلة Parcel مخططات ومقاطع للقراءة فقط. لا يُتصل بدايمون Docker ولا تُسحب صورة ولا تبدأ قاعدة أو ذاكرة. يعكس هذا القيد مستوى الأدلة الفعلي بدلاً من ادعاء نجاح بنية لم تُشغّل.

حدد موقع العميل أولاً

عندما تعمل المهمة داخل حاوية، تشاركها الخدمات شبكة Docker مضبوطة ويُستخدم وسم الخدمة اسماً للمضيف مع منفذ الخدمة الداخلي. وعندما تنفذ الخطوات مباشرة على آلة المشغّل، يستخدم العميل عادة localhost ومنفذاً منشوراً على المضيف وفق النموذج الموثق. يشير localhost داخل الحاوية إلى تلك الحاوية، لا إلى الخدمة الأخرى. اختيار عنوان قبل تحديد موقع العميل الشبكي سبب شائع لتشخيص اتصال خاطئ ونشر منافذ بلا حاجة. ابدأ برسم مكان العميل والخدمة ثم استنتج المسار، بدلاً من تجربة أسماء ومنافذ عشوائية حتى ينجح اتصال.

تنتمي المنافذ المنشورة لحد المضيف

يمكن لخريطة منفذ خدمة اختيار منفذ مضيف ثابت أو ترك Docker يختار منفذاً متاحاً بالصياغة المدعومة. يعرض سياق job.services معلومات المنفذ المعين لعميل يعمل على المضيف، وهو غير منفذ الاستماع داخل الخدمة. يوضح المقطع إعلان خدمة ذاكرة فقط. redis:7 وسم تعليمي متغير، وليس تثبيتاً ثابت الهوية مراجعاً أو ادعاء أحدث إصدار Redis. لا نزعم جاهزية خدمة أو نجاح اتصال. ينبغي للمراجع الفصل بين المنفذين ومصدر معرفتهما، وعدم تحويل رقم تعليمي ثابت إلى وصف لتعيين فعلي لم يُرصد.

yaml إعلان خدمة غير قابل للتشغيل
services:
  cache:
    image: redis:7
    ports:
      - 6379/tcp
    options: >-
      --health-cmd "redis-cli ping"
      --health-interval 10s
      --health-timeout 5s
      --health-retries 5

حُذفت المهمة وشروط Linux. يقرأ عميل المضيف job.services.cache.ports[6379] ويستخدم عميل الحاوية عادة cache:6379. أمر الصحة توضيحي ولا ينفذ.

يختلف بدء العملية وجاهزية التطبيق

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

صف العناوين دون اتصال

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

python نموذج عنوان افتراضي
def address(client_location, assigned_host_port):
    if client_location == "job-container":
        return "cache:6379"
    if client_location == "runner-host":
        return f"127.0.0.1:{assigned_host_port}"
    raise ValueError("unknown client location")
print(address("job-container", 16379))
print(address("runner-host", 16379))
الناتج المتوقع
cache:6379
127.0.0.1:16379

16379 مدخل معلن لا خريطة Docker مرصودة. لا يبدأ البرنامج خدمة ولا يقيم اتصالاً.

الأخطاء الشائعة وإصلاحها

تتصل مهمة حاوية بـ localhost لخدمتها.

لماذا يحدث؟
اختلط loopback العميل بنقطة الخدمة.
كيف تصلحه؟
استخدم الوسم والمنفذ الداخلي للشبكة المشتركة الموثقة.
كيف تتجنب تكراره؟
ارسم الموقعين قبل الاختيار.

يستخدم المضيف المنفذ الداخلي مع نشر ديناميكي.

لماذا يحدث؟
اختلط الداخلي بالمعين للمضيف.
كيف تصلحه؟
اقرأ الخريطة الفعلية من السياق المدعوم.
كيف تتجنب تكراره؟
افصل هوية الاستماع والنشر.

تُعد الخدمة العاملة جاهزة للتجهيز.

لماذا يحدث؟
اختلط وجود العملية بجاهزية كاملة.
كيف تصلحه؟
استخدم عقداً محدوداً وإعداداً صريحاً.
كيف تتجنب تكراره؟
ميّز النقل والمصادقة والمخطط والعمل.

اختبر فهمك

1. عميل وخدمة بشبكة المهمة. هل يلزم منفذ مضيف؟

اعرض الحل المشروح

ليس للتواصل الداخلي وحده. يستخدم العميل عادة الوسم والمنفذ الداخلي. يخدم النشر حداً آخر ويضاف عند حاجة مستهلك مضيف فعلية.

2. نجحت الصحة وغاب جدول. هل الشبكة معطلة؟

اعرض الحل المشروح

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

أهم ما تعلمته

  • حدد العميل قبل الاسم والمنفذ.
  • تحتاج الدورة والجاهزية افتراضات صريحة محدودة.

المراجع الرسمية