استخدام Dockerfile لفضح المنافذ

Using Dockerfile Expose Ports



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

في هذه المقالة ، سأوضح لك كيفية كشف المنافذ باستخدام ملف Dockerfile مع مثال من العالم الحقيقي. هيا بنا نبدأ.







أولا ، علينا إنشاء دليل المشروع. في هذا الدليل ، يجب أن تحتفظ بجميع ملفات المشروع وملفات ملف Dockerfile .



قم بتشغيل الأمر التالي لإنشاء دليل المشروع تطبيقي/ في دليل المستخدمين HOME وانتقل إليه:



$مكدير~/تطبيقي&& قرص مضغوط~/تطبيقي

تجهيز تطبيق الويب:

الآن قم بإنشاء دليل src / داخل ~ / myapp / الدليل بالأمر التالي:

$مكديرsrc

في ال src / الدليل ، سيتم الاحتفاظ بكافة التعليمات البرمجية المصدر لتطبيق NodeJS الخاص بي.

سأقوم فقط بإنشاء بسيطة app.js ملف في src / الدليل وتشغيل خادم ويب بسيط على المنفذ 8080 فقط للتوضيح.

ال src / app.js يحتوي الملف على سطور الرموز التالية:

كتابة Dockerfile و Exposing Ports:

الآن قم بإنشاء ملف ملف Dockerfile في ال ~ / myapp الدليل بالأمر التالي:

$لمس. اتصال. صلةملف Dockerfile

اكتب الآن الأسطر التالية إلى ملف ملف Dockerfile واحفظه. سأناقش ما تعنيه هذه السطور لاحقًا.

هنا، من جبال الألب: 3.8 يعني استخدام جبال الألب: 3.8 صورة Docker كأساس للصورة الجديدة التي سنبنيها من هذا ملف Dockerfile .

تحديث RUN apk يعني تشغيل تحديث apk الأمر في صورة Docker الأساسية جبال الألب: 3.8 .

إضافة RUN apk – no-cache nodejs يعني تشغيل apk إضافة الأمر لتثبيت لغة البرمجة NodeJS في ملف جبال الألب: 3.8 صورة قاعدة Docker.

نسخ. / src / التطبيق يعني ، انسخ جميع الملفات من ملف ~ / myapp / src دليل إلى /تطبيق دليل صورة Docker الجديدة التي سنبنيها باستخدام امتداد ملف Dockerfile .

CMD [/ usr / bin / node، /app/app.js] يعني تشغيل /app/app.js ملف من الحاوية الجديدة باستخدام العقدة ثنائي موجود في / usr / bin / node .

أخيرًا ، إلى اكسبوز 8080 / tcp يعني ، كشف أو فتح منفذ TCP 8080 إلى الكمبيوتر المضيف.

إنشاء صورة Docker مخصصة باستخدام Dockerfile:

فلنقم الآن بإنشاء صورة Docker مخصصة عقدة جبال الألب: v1.0 باستخدام ملف Dockerfile التي أنشأناها للتو.

تأكد أولاً من أنك في ~ / myapp / الدليل ثم قم بتشغيل الأمر التالي لإنشاء صورة Docker المخصصة الخاصة بك عقدة جبال الألب: v1.0 :

$بناء عامل ميناء-tعقدة جبال الألب: v1.0

كما ترى ، صورة Docker المخصصة عقدة جبال الألب: v1.0 يتم إنشاؤه. يتم سحب صورة Docker الأساسية والحزم المطلوبة من الإنترنت.

كما ترى ، صورة Docker المخصصة عقدة جبال الألب: v1.0 تم إنشاؤه بنجاح.

اختبار صورة Docker المخصصة:

الآن يمكننا اختبار صورة Docker المخصصة عقدة جبال الألب: v1.0 سهل جدا. كل ما علينا فعله هو إنشاء حاوية من عقدة جبال الألب: v1.0 صورة.

قم بتشغيل الأمر التالي لإنشاء حاوية Docker www من عقدة جبال الألب: v1.0 صورة عامل ميناء:

$تشغيل عامل ميناء -هو - هي --اسمwww عقدة ألبين: v1

الحاوية www أنشئ.

فلنكتشف الآن عنوان IP الخاص بـ www حاوية Docker بالأمر التالي:

$عامل ميناء فحص شبكة الاتصالات العالمية| سيطرةعنوان

كما ترون ، في حالتي ، عنوان IP هو 172.17.0.3 . لذلك يجب أن يكون تطبيق NodeJS الذي كتبته متاحًا من متصفح الويب في المنفذ 8080 من عنوان IP هذا.

هاهو! يمكنني الوصول إلى المنفذ 8080 من بلدي www حاوية عامل الميناء.

هذه هي الطريقة الأساسية لكشف منافذ معينة في صور Docker المخصصة التي ستبنيها باستخدام ملف Dockerfile .

كشف منافذ TCP و UDP باستخدام Dockerfile:

في القسم السابق من هذه المقالة ، أوضحت لك كيفية كشف منفذ TCP باستخدام ملف ملف Dockerfile .

يمكنك بسهولة كشف منفذ TCP (دعنا نقول منفذ TCP 53 ) في الخاص بك ملف Dockerfile بالسطر التالي:

تعرض53/برنامج التعاون الفني

يمكنك أيضًا كشف منفذ UDP (لنفترض منفذ UDP 53 ) مع السطر التالي في ملف ملف Dockerfile :

تعرض53/udp

يمكنك كشف منفذ TCP و UDP في نفس الوقت مع الأسطر التالية في ملف ملف Dockerfile :

تعرض53/برنامج التعاون الفني
تعرض53/udp

إذا لم تحدد البروتوكول الذي تريد استخدامه (TCP أو UDP) ، فسيتم استخدام TCP بشكل افتراضي. على سبيل المثال ، إذا كتبت السطر التالي في ملف ملف Dockerfile :

تعرض53

ثم سيفترض Docker أنك تريد استخدام منفذ TCP 53.

كشف منافذ متعددة باستخدام Dockerfile:

لنفترض أنك تريد إنشاء صورة MEAN stack Docker مخصصة. في هذه الحالة ، ستقوم بتشغيل خادم HTTP على بعض المنافذ (دعنا نقول منفذ TCP 80 أو 8080) ، خادم FTP يعمل على منفذ TCP 21 ، خادم قاعدة بيانات SQL (دعنا نقول MySQL) الذي يعمل على منفذ TCP 3306 ، أو خادم قاعدة بيانات NoSQL (دعنا نقول MongoDB) الذي يعمل على منفذ TCP 27017 أو 27018 ، وهو خادم SSH يعمل على منفذ TCP 22. هذا كثير من المنافذ!

الخبر السار هو ؛ يمكنك عرض العديد من المنافذ حسب الحاجة على صورة Docker المخصصة التي تم إنشاؤها باستخدام ملف Dockerfile .

يمكن كشف المنافذ الموجودة في المثال أعلاه مع الأسطر التالية في ملف ملف Dockerfile :

تعرض80/برنامج التعاون الفني
تعرض8080/برنامج التعاون الفني
تعرضواحد وعشرين/برنامج التعاون الفني
تعرض22/برنامج التعاون الفني
تعرض3306/برنامج التعاون الفني
تعرض27017/برنامج التعاون الفني
تعرض27018/برنامج التعاون الفني

إذا كنت تريد ، يمكنك ترك مواصفات البروتوكول لأن Docker يستخدم TCP افتراضيًا والقيام بنفس الشيء مع الأسطر التالية في ملف Dockerfile :

تعرض80
تعرض8080
تعرضواحد وعشرين
تعرض22
تعرض3306
تعرض27017
تعرض27018

إذا كنت بحاجة إلى ذلك ، يمكنك مزج منفذي TCP و UDP في ملف ملف Dockerfile . على سبيل المثال ، إذا قمت بتشغيل خادم DNS (الذي يعمل على منفذ UDP 53) ، إلى جانب المثال أعلاه ، يمكنك إضافة الأسطر التالية إلى ملف Dockerfile .

تعرض80
تعرض8080
تعرضواحد وعشرين
تعرض22
تعرض53/udp
تعرض3306
تعرض27017
تعرض27018

هذه هي الطريقة التي تعرض بها المنافذ باستخدام ملف Dockerfile . تعلم المزيد عن ملف Dockerfile وفضح الموانئ باستخدام ملف Dockerfile ، إقرأ ال ملف Dockerfile دليل مرجعي في https://docs.docker.com/engine/reference/builder/#expose

شكرا لقراءة هذا المقال.