شرح الـ Port Binding مع مثال على تشغيل Web Server بسيط

في الدرس السابق قمنا بتنفيذ أمر php من داخل الحاوية وتعرفنا على مفهوم الـ Volume الذي يمكننا من ربط مجلد على الجهاز المستخدم بمجلد آخر داخل الحاوية مما يمكننا من الوصول للملفات وضمان عدم ضياع الملفات التي يتم انشاؤها من داخل الحاوية.
في هذا الدرس سنقوم بتشغيل Http Server من داخل الحاوية لنتمكن من تشغيل نفس الكود السابق ضمن المتصفح.
تشغيل السيرفر
سأقوم بتشغيل السيرفر على جهازي، سنستخدم الأمر php -S
لعمل سيرفر ويب بسيط.
بعد تنفيذ الأمر السابق، سيتم تشغيل سيرفر ويب ضمن مجلد المشروع على البورت 8000، وهذه صورة للنتيجة على المتصفح:
محاولة تشغيل نفس الأمر داخل الحاوية
لنجرب الآن تنفيذ نفس الأمر السابق داخل الحاوية:
قد تلاحظ أننا استخدمنا
0.0.0.0
كـ Hostname بدلا منlocalhost
والسبب أن الحاوية مرتبطة بجهازنا على نفس الشبكة، لكن استخدام localhost يعني أن السيرفر سيعمل داخل الحاوية فقط، بينما استخدام0.0.0.0
يعني السماح للسيرفر بالعمل ضمن الشبكة وخارج الـ Localhost.
تم تشغيل الأمر بنجاح دون مشاكل، لكن نلاحظ أن السيرفر لم يعمل على المتصفح كما ينبغي:
كما ذكرنا سابقا، حاوية Docker تعمل كبيئة مستقلة عن الجهاز الذي يتم تشغيلها عليه، وهذا يشمل الـ Networking، في المقال السابق قمنا بإنشاء Volume للسماح لـ Docker بالوصول إلى ملفات على الجهاز الذي يعمل عليه والعكس، كذلك نحتاج لعمل Port Binding بحيث نسمح للجهاز (الذي يعمل عليه المتصفح) بالوصول إلى الـ Port الذي تم تشغيل السيرفر عليه داخل الحاوية.
Port Binding
ميزة Port Binding تساعد على تحويل Port محدد داخل شبكة Docker (داخل الـ Container) إلى بورت آخر داخل شبكة الجهاز المستضيف (خارج الـ Container)، فمثلا، لو شغلنا Web Server على الـ Port رقم 8000 داخل الحاوية، فلا يمكن الوصول إليه من الجهاز المستضيف، ولفعل ذلك نقوم باستخدام Port Binding كما في المثال التالي:
الخيار الذي تم إضافته يقوم بتحويل بربط البورت 8000 على شبكة جهازي بالبورت 8000 ضمن الحاوية، النتيجة على المتصفح:
طبعا بالإمكان التحكم أكثر بالـ Binding لتحويل البورت 8000 داخل الحاوية إلى بورت آخر خارجها:
بهذه الطريقة سيتم تحويل البورت 8000 داخل الحاوية إلى البورت 3000 خارجها، فيمكن الوصول إلى السيرفر باستخدام البورت 3000، طريقة التحويل هذه ستكون مفيدة في حال كانت لديك أكثر من خدمة تعمل على حاويات مختلفة وتستخدم نفس البورت، فبإمكانك تغييرها إلى بورتات مختلفة على جهازك مما يمنع حدوث تعارض بين الخدمات.
مراجعة الأمر
- الخيار
v-
يستخدم لعمل Mounting لمسار معين في جهاز المستخدم إلى مسار آخر داخل الحاوية (تفاصيل) - الخيار
p-
يستخدم لعمل Port Binding بحيث يمكن الوصول إلى البورت 8000 الذي تشغل عليه الحاوية خدمة Http من خلال البورت 3000 على الجهاز الذي يشغل الحاوية (تفاصيل) - الخيار
w-
يستخدم لتحديد الـ Working Directory التي يتم تنفيذ الأوامر بداخلها (تفاصيل) - اسم الحاوية مع الـ Tag الخاص بها
- الأمر الذي يتم تنفيذه داخل الحاوية، والأمر المستخدم هنا هو أمر خاص بـ Php لعمل Web Server (تفاصيل)