دليل Kubernetes ، الجزء 1: التطبيقات ، Microservices ، والحاويات

بناءً على طلبنا ، أنشأ Habr مركز Kubernetes ويسرنا نشر أول منشور فيه. اشترك!

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



إذا كنت تشك في أنه يمكن تعلُّم Kubernetes بهذه السرعة ، أقترح عليك القيام بذلك بنفسك. وهي ، بعد أن أتقنت هذه المواد ، ستكون قادرًا على تشغيل التطبيق استنادًا إلى خدمات microservices في مجموعة Kubernetes. يمكنني أن أضمن ذلك ، لأنه من خلال المنهجية المستخدمة هنا على وجه التحديد ، أقوم بتدريب Kubernetes للعمل مع عملائنا. ما الذي يميز هذا الدليل عن الآخرين؟ في الواقع - الكثير من الأشياء. لذا ، فإن معظم هذه المواد تبدأ بشرح الأشياء البسيطة - مفاهيم Kubernetes وميزات فريق kubectl. يعتقد مؤلفو هذه المواد أن قارئهم على دراية بتطوير التطبيقات والخدمات الميكروية وحاويات Docker. سنذهب في الاتجاه الآخر. أولاً ، دعنا نتحدث عن كيفية تشغيل تطبيق يستند إلى خدمات microservices على جهاز كمبيوتر. ثم فكر في تجميع صور الحاوية لكل خدمة microservice. بعد ذلك ، سوف نتعرف على Kubernetes ونحلل نشر تطبيق قائم على خدمات ميكروية في كتلة تديرها Kubernetes.

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

الآن ، دون مزيد من اللغط ، دعونا نبدأ العمل ونتحدث عن التطبيق الذي سنعمل به.

تطبيق تجريبي


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

هذا هو ما تبدو عليه النافذة الرئيسية لهذا التطبيق.


تطبيق ويب لتحليل معنويات النص

من الناحية الفنية ، يتكون التطبيق من ثلاثة خدمات ميكروية ، كل منها يحل مجموعة معينة من المهام:

  • SA-Frontend هو خادم ويب Nginx يقدم ملفات ساكنة React.
  • SA-WebApp هو تطبيق ويب يستند إلى Java يعالج الطلبات من الواجهة الأمامية.
  • SA-Logic هو تطبيق Python يقوم بتحليل معنويات النص.

من المهم أن نلاحظ أن الخدمات الميكروية غير موجودة بمعزل عن غيرها. إنهم ينفذون فكرة "الفصل بين الواجبات" ، لكنهم بحاجة إلى التفاعل مع بعضهم البعض.


تدفقات بيانات التطبيق

في الرسم البياني أعلاه ، يمكنك رؤية المراحل المرقمة للنظام ، والتي توضح تدفق البيانات في التطبيق. لنحللهم:

  1. يطلب المستعرض ملف index.html من الخادم (والذي بدوره يقوم بتنزيل حزمة تطبيق React).
  2. يتفاعل المستخدم مع التطبيق ، وهذا يؤدي إلى استدعاء تطبيق ويب على أساس الربيع.
  3. يعيد تطبيق الويب توجيه طلب تحليل النص إلى تطبيق Python.
  4. يحلل تطبيق Python الدرجة اللونية للنص ويعيد النتيجة كرد على الطلب.
  5. يرسل تطبيق Spring استجابة إلى تطبيق React (ويظهر بدوره نتيجة تحليل النص للمستخدم).

يمكن العثور على الكود الخاص بكل هذه التطبيقات هنا . أوصي الآن بنسخ هذا المستودع إلى نفسك ، لأن هناك الكثير من التجارب المثيرة للاهتمام التي تنتظرنا.

بدء تطبيق يستند إلى microservice على كمبيوتر محلي


من أجل أن يعمل التطبيق ، نحتاج إلى تشغيل الخدمات الثلاث الصغيرة. دعنا نبدأ مع أدق منهم - مع تطبيق الواجهة الأمامية.

onConfiguring React للتنمية المحلية


لتشغيل تطبيق React ، تحتاج إلى تثبيت الأنظمة الأساسية Node.js و NPM على جهاز الكمبيوتر الخاص بك. بعد تثبيت كل هذا ، انتقل عبر الجهاز إلى مجلد مشروع sa-frontend وقم بتشغيل الأمر التالي:

 npm install 

بفضل تنفيذ هذا الأمر ، سيتم تحميل node_modules تطبيق node_modules - إدخالات حوله في ملف package.json في مجلد node_modules . بعد تنزيل التبعيات في نفس المجلد ، قم بتشغيل الأمر التالي:

 npm start 

هذا كل شيء. الآن تطبيق React قيد التشغيل ، يمكن الحصول على الوصول إليه من خلال الانتقال إلى localhost:3000 عنوان في المتصفح. يمكنك تغيير شيء ما في شفرته. سترى على الفور تأثير هذه التغييرات في المتصفح. هذا ممكن بفضل ما يسمى "الساخنة" استبدال الوحدات. بفضل هذا ، يتحول التطوير الأمامي إلى مهمة بسيطة وممتعة.

re إعداد تطبيق React للإخراج إلى الإنتاج


للاستخدام الحقيقي لتطبيق React ، نحتاج إلى تحويله إلى مجموعة من الملفات الثابتة ومنحهم للعملاء الذين يستخدمون خادم ويب.

لإنشاء تطبيق React ، مرة أخرى ، باستخدام الجهاز الطرفي ، انتقل إلى المجلد sa-frontend وقم بتشغيل الأمر التالي:

 npm run build 

سيؤدي ذلك إلى إنشاء دليل build في مجلد المشروع. سوف يحتوي على جميع الملفات الثابتة اللازمة لتطبيق React للعمل.

files خدمة الملفات الثابتة باستخدام أدوات Nginx


تحتاج أولاً إلى تثبيت خادم الويب Nginx وتشغيله. هنا يمكنك تنزيله والعثور على تعليمات التثبيت وبدء التشغيل. فأنت بحاجة إلى نسخ محتويات مجلد sa-frontend/build إلى المجلد [your_nginx_installation_dir]/html .

باستخدام هذا الأسلوب ، سيكون ملف index.html إنشاؤه أثناء إنشاء تطبيق [your_nginx_installation_dir]/html/index.html متاحًا على [your_nginx_installation_dir]/html/index.html . هذا هو الملف ، بشكل افتراضي ، مشكلات خادم Nginx عند الوصول إليه. تم تكوين الخادم للاستماع على المنفذ 80 ، ولكن يمكنك تهيئته حسب حاجتك من خلال تحرير الملف [your_nginx_installation_dir]/conf/nginx.conf .

افتح الآن المتصفح الخاص بك localhost:80 إلى localhost:80 . سترى صفحة تطبيق React.


رد على التطبيق الذي يقدمه خادم Nginx

إذا كتبت شيئًا ما في حقل "كتابة Type your sentence الآن وانقر فوق الزر " Send ، فلن يحدث شيء. ولكن ، إذا نظرت إلى وحدة التحكم ، يمكنك رؤية رسائل خطأ هناك. لفهم مكان حدوث هذه الأخطاء بالضبط ، دعنا نحلل كود التطبيق.

nal تحليل كود التطبيق للواجهة الأمامية


App.js على App.js ملف App.js ، يمكننا أن نرى أن النقر فوق الزر " Send يستدعي طريقة analyzeSentence() . ويرد رمز لهذه الطريقة أدناه. في الوقت نفسه ، انتبه إلى حقيقة أنه لكل سطر يحتوي على تعليق على النموذج # ، يوجد تفسير موضح أسفل الرمز. بنفس الطريقة ، سنقوم بتحليل أجزاء أخرى من التعليمات البرمجية.

 analyzeSentence() {   fetch('http://localhost:8080/sentiment', {  // #1       method: 'POST',       headers: {           'Content-Type': 'application/json'       },       body: JSON.stringify({                      sentence: this.textField.getValue()})// #2   })       .then(response => response.json())       .then(data => this.setState(data));  // #3 } 

1. عنوان URL الذي يتم فيه تنفيذ طلب POST. من المفهوم أن هذا العنوان يحتوي على تطبيق ينتظر مثل هذه الطلبات.

2. أرسلت هيئة طلب إلى التطبيق. إليك نموذج طلب مثال:

 {   sentence: "I like yogobella!" } 

3. عند استلام استجابة للطلب ، يتم تحديث حالة المكون. هذا يتسبب في إعادة تقديم المكون. إذا تلقينا بيانات (أي ، كائن JSON يحتوي على البيانات المدخلة ودرجة النص المحسوبة) ، فسوف نخرج مكون Polarity ، حيث سيتم استيفاء الشروط المقابلة. هكذا نصف المكون:

 const polarityComponent = this.state.polarity !== undefined ?   <Polarity sentence={this.state.sentence}             polarity={this.state.polarity}/> :   null; 

يبدو أن الرمز يعمل بشكل جيد. ما هو الخطأ هنا ، بعد كل شيء؟ إذا افترضت أنه في العنوان الذي يحاول التطبيق إرسال طلب POST فيه ، لا يوجد شيء حتى الآن يمكنه قبول هذا الطلب ومعالجته ، فأنت على حق تمامًا. وهي لمعالجة الطلبات التي تصل إلى العنوان http://localhost:8080/sentiment ، نحتاج إلى تشغيل تطبيق ويب يستند إلى Spring.


نحتاج إلى تطبيق Spring يمكنه قبول طلب POST.

etإعداد تطبيق ويب يستند إلى الربيع


لنشر تطبيق Spring ، ستحتاج إلى JDK8 و Maven ومتغيرات البيئة التي تم تكوينها بشكل صحيح. بعد تثبيت كل هذا ، يمكنك الاستمرار في العمل في مشروعنا.

ack حزم التطبيق في ملف جرة


اذهب ، باستخدام المحطة ، إلى مجلد sa-webapp وأدخل الأمر التالي:

 mvn install 

بعد تنفيذ هذا الأمر ، سيتم إنشاء الدليل target في مجلد sa-webapp . سيكون هناك تطبيق Java مُعبَّأ في ملف برطمان ممثلاً عن طريق sentiment-analysis-web-0.0.1-SNAPSHOT.jar .

JavaStart تطبيق جافا


انتقل إلى المجلد target وقم بتشغيل التطبيق باستخدام الأمر التالي:

 java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar 

سيحدث خطأ أثناء تنفيذ هذا الأمر. لبدء إصلاحه ، يمكننا تحليل معلومات الاستثناء في بيانات تتبع المكدس:

 Error creating bean with name 'sentimentController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'sa.logic.api.url' in value "${sa.logic.api.url}" 

الشيء الأكثر أهمية بالنسبة لنا هنا هو ذكر استحالة التحقق من معنى sa.logic.api.url . دعونا نحلل الشفرة التي يحدث فيها الخطأ.

▍ تحليل كود تطبيق جافا


إليك مقتطف الشفرة الذي يحدث فيه الخطأ.

 @CrossOrigin(origins = "*") @RestController public class SentimentController {   @Value("${sa.logic.api.url}")    // #1   private String saLogicApiUrl;   @PostMapping("/sentiment")   public SentimentDto sentimentAnalysis(       @RequestBody SentenceDto sentenceDto)   {       RestTemplate restTemplate = new RestTemplate();       return restTemplate.postForEntity(               saLogicApiUrl + "/analyse/sentiment",    // #2               sentenceDto, SentimentDto.class)               .getBody();   } } 

  1. يحتوي S entimentController على حقل saLogicApiUrl . يتم تعيين قيمتها بواسطة خاصية sa.logic.api.url .
  2. سلسلة saLogicApiUrl متسلسلة مع القيمة /analyse/sentiment . يشكلون معًا عنوانًا للوصول إلى خدمة microservice التي تقوم بتحليل النص.

propertySet قيمة الممتلكات


في الربيع ، المصدر القياسي لقيم الممتلكات هو ملف application.properties ، والذي يمكن العثور عليه في sa-webapp/src/main/resources . لكن استخدامه ليس هو الطريقة الوحيدة لتعيين قيم الممتلكات. يمكنك القيام بذلك باستخدام أمر مثل ما يلي:

 java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=WHAT.IS.THE.SA.LOGIC.API.URL 

يجب أن تشير قيمة هذه الخاصية إلى عنوان تطبيق Python الخاص بنا.

من خلال تهيئته ، نقول لتطبيق Spring Spring على الويب حيث يجب أن يذهب لتنفيذ طلبات تحليل النص.

من أجل عدم تعقيد حياتنا ، قررنا أن تطبيق Python سيكون متاحًا في localhost:5000 وحاول ألا ننسى ذلك. نتيجة لذلك ، فإن الأمر لبدء تشغيل تطبيق Spring سيبدو كما يلي:

 java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=http://localhost:5000 


يفتقر نظامنا إلى تطبيق Python

الآن علينا فقط بدء تطبيق Python وسيعمل النظام كما هو متوقع.

on تكوين تطبيق بيثون


من أجل تشغيل تطبيق Python ، يجب أن يكون لديك Python 3 و Pip مثبتين ، وتحتاج إلى تعيين متغيرات البيئة المناسبة بشكل صحيح.

of تثبيت التبعيات


انتقل إلى sa-logic/sa مجلد المشروع وقم بتشغيل الأوامر التالية:

 python -m pip install -r requirements.txt python -m textblob.download_corpora 

artStart التطبيق


بعد تثبيت التبعيات ، نحن على استعداد لبدء تشغيل التطبيق:

 python sentiment_analysis.py 

بعد تنفيذ هذا الأمر ، سنبلغك بما يلي:

 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) 

هذا يعني أن التطبيق قيد التشغيل وينتظر الطلبات في localhost:5000/

▍ كود البحث


النظر في رمز التطبيق Python لفهم كيف يستجيب للطلبات:

 from textblob import TextBlob from flask import Flask, request, jsonify app = Flask(__name__)                                   #1 @app.route("/analyse/sentiment", methods=['POST'])      #2 def analyse_sentiment():   sentence = request.get_json()['sentence']           #3   polarity = TextBlob(sentence).sentences[0].polarity #4   return jsonify(                                     #5       sentence=sentence,       polarity=polarity   ) if __name__ == '__main__':   app.run(host='0.0.0.0', port=5000)                #6 

  1. تهيئة كائن Flask .
  2. تحديد العنوان لتنفيذ طلبات POST إليه.
  3. استرجاع خاصية sentence من نص الطلب.
  4. تهيئة كائن TextBlob المجهول والحصول على قيمة polarity الجملة الأولى في نص الطلب (في حالتنا ، هذه هي الجملة الوحيدة التي تم تمريرها للتحليل).
  5. عودة الرد ، الذي يحتوي في نصه على نص الاقتراح وفهرس polarity المحسوب عليه.
  6. تشغيل تطبيق Flask ، والذي سيكون متاحًا على العنوان 0.0.0.0:5000 (يمكنك أيضًا الوصول إليه باستخدام تصميم النموذج localhost:5000 ).

الآن يتم تشغيل الخدمات المصغرة التي تشكل التطبيق. يتم تكوينها للتفاعل مع بعضها البعض. هذا ما يبدو عليه مخطط التطبيق في هذه المرحلة من العمل.


يتم جلب جميع الخدمات المصغرة التي تشكل التطبيق إلى حالة صحية.

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

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

حاويات قفص الاتهام


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

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

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

لاستكشاف ميزات الحاويات ومقارنتها بطرق أخرى لتشغيل التطبيقات ، فكر في مثال على تقديم تطبيق React باستخدام جهاز افتراضي وحاوية.

ervServing React تطبيق ملفات ثابتة باستخدام الجهاز الظاهري


في محاولة لتنظيم صيانة الملفات الثابتة عن طريق الأجهزة الظاهرية ، سنواجه العيوب التالية:

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


خادم الويب الثابت Nginx الذي يعمل على جهاز افتراضي

إذا تم استخدام الحاويات لحل مشكلة مماثلة ، فيمكن ملاحظة نقاط القوة التالية:

  1. الاستخدام الفعال للموارد: العمل مع نظام التشغيل باستخدام Docker.
  2. استقلال المنصة. ستعمل الحاوية التي يمكن للمطور تشغيلها على جهاز الكمبيوتر الخاص به في أي مكان.
  3. نشر خفيف الوزن من خلال استخدام طبقات الصور.


خادم الويب الثابت Nginx الذي يعمل في حاوية

لقد قارنا الأجهزة والحاويات الافتراضية بنقاط قليلة فقط ، ولكن حتى هذا يكفي لشعور قوة الحاويات. تعرف على المزيد حول حاويات Docker هنا.

image تجميع صورة حاوية لتطبيق React


لبنة البناء الرئيسية لحاوية Docker هي Dockerfile . في بداية هذا الملف ، قم بعمل سجل للصورة الأساسية للحاوية ، ثم تتضمن سلسلة من الإرشادات التي تشير إلى الترتيب الذي سيتم به إنشاء الحاوية بحيث يلبي احتياجات تطبيق معين.

قبل أن نبدأ العمل مع Dockerfile ، دعونا نتذكر ما قمنا به لإعداد ملفات تطبيق React للتحميل على خادم Nginx:

  1. إنشاء حزمة تطبيق npm run build ( npm run build ).
  2. بدء تشغيل خادم Nginx.
  3. انسخ محتويات دليل sa-frontend مجلد مشروع sa-frontend إلى مجلد خادم nginx/html .

يمكنك أن ترى أدناه أوجه التشابه بين إنشاء الحاوية والإجراءات المذكورة أعلاه التي يتم تنفيذها على الكمبيوتر المحلي.

D إعداد Dockerfile ل SA-Frontend


التعليمات التي سيتم تضمينها في Dockerfile لتطبيق SA-Frontend Dockerfile تتكون من أمرين فقط. الحقيقة هي أن فريق تطوير Nginx أعد صورة أساسية لـ Nginx ، والتي سوف نستخدمها لإنشاء صورتنا. فيما يلي الخطوتان اللتان نحتاج إلى وصفهما:

  1. أساس الصورة التي تحتاج إليها لإنشاء صورة Nginx.
  2. يجب نسخ محتويات المجلد sa-frontend/build إلى مجلد صورة nginx/html .

إذا انتقلنا من هذا الوصف إلى Dockerfile ، سيبدو كما يلي:

 FROM nginx COPY build /usr/share/nginx/html 

كما ترون ، كل شيء بسيط للغاية هنا ، في حين أن محتويات الملف قابلة للقراءة ومفهومة تمامًا. يخبر هذا الملف النظام بالتقاط صورة nginx بكل ما لديه بالفعل ونسخ محتويات دليل nginx/html إلى دليل nginx/html .

قد يكون لديك هنا سؤال يتعلق بالمكان الذي أعرفه بالضبط حول مكان نسخ الملفات من مجلد build ، أي من أين جاء المسار /usr/share/nginx/html . في الواقع ، وليس هناك شيء معقد. الحقيقة هي أن المعلومات ذات الصلة يمكن العثور عليها في وصف الصورة.

image بناء صورة وتحميلها إلى المستودع


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

  1. تثبيت عامل الميناء .
  2. سجل على موقع دوكر هاب.
  3. قم بتسجيل الدخول إلى الحساب عن طريق تشغيل الأمر التالي في الجهاز:

     docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" 

أنت الآن بحاجة إلى استخدام الجهاز الطرفي للانتقال إلى دليل sa-frontend وتشغيل الأمر التالي هناك:

 docker build -f Dockerfile -t $DOCKER_USER_ID/sentiment-analysis-frontend . 

فيما يلي في أوامر مماثلة ، يجب استبدال $DOCKER_USER_ID باسم المستخدم الخاص بك على Docker Hub. على سبيل المثال ، قد يبدو هذا الجزء من الأمر كما يلي: rinormaloku/sentiment-analysis-frontend .

في نفس الوقت ، يمكن تقصير هذا الأمر عن طريق إزالة -f Dockerfile منه ، لأن هذا الملف موجود بالفعل في المجلد الذي ننفذ فيه هذا الأمر.

لإرسال الصورة النهائية إلى المستودع ، نحتاج الأمر التالي:

 docker push $DOCKER_USER_ID/sentiment-analysis-frontend 

بعد تنفيذها ، تحقق من قائمة مستودعاتك على Docker Hub لفهم ما إذا كانت الصورة قد تم إرسالها إلى السحابة بنجاح.

art بدء الحاوية


الآن يمكن لأي شخص تنزيل وتشغيل صورة تُعرف باسم $DOCKER_USER_ID/sentiment-analysis-frontend . للقيام بذلك ، تحتاج إلى تشغيل تسلسل الأوامر التالي:

 docker pull $DOCKER_USER_ID/sentiment-analysis-frontend docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend 

الآن يتم تشغيل الحاوية ، ويمكننا مواصلة العمل ، وخلق الصور الأخرى التي نحتاجها. ولكن قبل المتابعة ، دعونا 80:80 ، والذي يوجد في أمر إطلاق الصور وقد يبدو غير مفهوم.

  • الرقم الأول 80 هو رقم المنفذ المضيف (أي ، الكمبيوتر المحلي).
  • الرقم الثاني 80 هو منفذ الحاوية التي يجب إعادة توجيه الطلب إليها.

النظر في الرسم التوضيحي التالي.


ميناء الشحن

يعيد النظام توجيه الطلبات من منفذ <hostPort> إلى منفذ <containerPort> . بمعنى ، يتم إعادة توجيه الوصول إلى المنفذ 80 الكمبيوتر إلى المنفذ 80 الحاوية.

نظرًا لأن المنفذ 80 مفتوح على الكمبيوتر المحلي ، يمكنك الوصول إلى التطبيق من هذا الكمبيوتر على localhost:80 المحلي localhost:80 . إذا كان نظامك لا يدعم Docker ، فيمكنك تشغيل التطبيق على الجهاز الظاهري Docker ، الذي سيبدو عنوانه <docker-machine ip>:80 . لمعرفة عنوان IP الخاص بالجهاز الظاهري لـ Docker ، يمكنك استخدام docker-machine ip .

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

ock. dockerignore الملف


عند جمع صورة تطبيق SA-Frontend ، فقد نلاحظ أن هذه العملية بطيئة للغاية. يحدث هذا نظرًا لضرورة إرسال سياق بنية الصورة إلى البرنامج الخفي Docker. يتم تحديد الدليل الذي يمثل سياق البنية بواسطة الوسيطة الأخيرة docker build . في حالتنا ، في نهاية هذا الأمر فترة. ينتج عن هذا البنية التالية التي يتم تضمينها في سياق التجميع:

 sa-frontend: |   .dockerignore |   Dockerfile |   package.json |   README.md +---build +---node_modules +---public \---src 

ولكن من بين جميع المجلدات الموجودة هنا ، نحن بحاجة فقط إلى مجلد build . تنزيل أي شيء آخر هو مضيعة للوقت. يمكن تسريع البنيات بإخبار Docker بالأدلة التي يجب تجاهلها. من أجل القيام بذلك نحتاج إلى ملف .dockerignore . إذا كنت معتادًا على ملف .gitignore ، .gitignore بنية هذا الملف بالتأكيد. يسرد الدلائل التي قد يتجاهلها نظام تجميع الصور. في حالتنا ، تبدو محتويات هذا الملف كما يلي:

 node_modules src public 

يجب أن يكون الملف. .dockerignore في نفس المجلد مثل Dockerfile . الآن سوف يستغرق تجميع الصورة بضع ثوانٍ.

الآن دعونا نلقي نظرة على تطبيق جافا.

▍ Java-


, . .

Dockerfile , sa-webapp . , , ENV EXPOSE :

 ENV SA_LOGIC_API_URL http://localhost:5000 … EXPOSE 8080 

ENV Docker. , URL API , .

EXPOSE Docker , . . , Dockerfile SA-Frontend . , , , Dockerfile .

, . — README.md sa-webapp .

▍ Python-


Dockerfile sa-logic , . , , , README.md sa-logic .


- , ? . .

  1. sa-logic 5050 :

     docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic 
  2. sa-webapp 8080 . , , Python- Java-, SA_LOGIC_API_URL :

     $ docker run -d -p 8080:8080 -e SA_LOGIC_API_URL='http://<container_ip or docker machine ip>:5000' $DOCKER_USER_ID/sentiment-analysis-web-app 

, IP- Docker — README .

sa-frontend :

 docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend 

, localhost:80 .

, sa-webapp , Docker, App.js sa-frontend , IP- analyzeSentence() , . .

.




: Kubernetes?


Dockerfile , , Docker. , , .dockerignore . Docker. , Kubernetes. . :
, - . . , sa-webapp sa-logic . , ?

Source: https://habr.com/ru/post/ar438982/


All Articles