العودة إلى الدورة

الدرس 15: كشف المنافذ والتواصل بين الحاويات

Docker من الصفر إلى الاحتراف: الدورة الشاملة لتغليف التطبيقات (Containerization) للمبتدئين

الدرس 15: كشف المنافذ والتواصل بين الحاويات

نحتاج إلى التمييز بين مفهومين للمنافذ: المنفذ الداخلي للحاوية، والمنفذ المكشوف للمضيف.

1. EXPOSE (تعليمات Dockerfile)

توثق تعليمة EXPOSE المنفذ الذي يستمع إليه التطبيق داخل الحاوية. إنها معلوماتية بحتة و لا تنشر المنفذ فعلياً.

dockerfile

التطبيق يستمع على المنفذ 80

EXPOSE 80

2. نشر المنافذ (علامة المنفذ P)

لجعل منفذ الحاوية قابلاً للوصول من الجهاز المضيف (والعالم الخارجي)، يجب عليك استخدام العلامة -p (نشر) أثناء docker run.

الصيغة: -p <Host Port>:<Container Port>

bash

يعيّن المنفذ 80 للحاوية إلى المنفذ 8000 على المضيف

docker run -d -p 8000:80 --name web_app nginx

نصيحة: إذا استخدمت علامة -P واحدة فقط (P كبيرة)، سيقوم Docker بنشر جميع المنافذ المكشوفة على منافذ عشوائية ذات أرقام عالية على المضيف. هذا مفيد غالباً للاختبار المؤقت.

3. التواصل بين الحاويات (الشبكات الداخلية)

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

مثال:

  1. تطبيق واجهة أمامية (يستمع على المنفذ 3000 داخل حاويته).
  2. واجهة برمجة تطبيقات خلفية (API) (تستمع على المنفذ 5000 داخل حاويتها).

إذا كان كلاهما على my_custom_network:

  • تحتاج الواجهة الأمامية للوصول إلى Backend API.
  • تستخدم الواجهة الأمامية عنوان URL: http://backend_container_name:5000/api.
  • الواجهة الأمامية لا تحتاج إلى تعيين منفذ المضيف (مثل -p 5000:5000) ما لم تحتاج أيضاً إلى تنقيح الـ API مباشرة من جهازك المضيف.

القاعدة الرئيسية: قم بكشف المنافذ (باستخدام -p) فقط للخدمات التي تحتاج إلى الوصول المباشر إليها من قبل المستخدمين أو الأنظمة الخارجية (مثل خادم ويب أو موازن تحميل). يجب أن تظل الخدمات الداخلية مثل قواعد البيانات غير مكشوفة.