بناءً على طلبنا ، أنشأ 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 يقوم بتحليل معنويات النص.
من المهم أن نلاحظ أن الخدمات الميكروية غير موجودة بمعزل عن غيرها. إنهم ينفذون فكرة "الفصل بين الواجبات" ، لكنهم بحاجة إلى التفاعل مع بعضهم البعض.
تدفقات بيانات التطبيقفي الرسم البياني أعلاه ، يمكنك رؤية المراحل المرقمة للنظام ، والتي توضح تدفق البيانات في التطبيق. لنحللهم:
- يطلب المستعرض ملف
index.html
من الخادم (والذي بدوره يقوم بتنزيل حزمة تطبيق React). - يتفاعل المستخدم مع التطبيق ، وهذا يؤدي إلى استدعاء تطبيق ويب على أساس الربيع.
- يعيد تطبيق الويب توجيه طلب تحليل النص إلى تطبيق Python.
- يحلل تطبيق Python الدرجة اللونية للنص ويعيد النتيجة كرد على الطلب.
- يرسل تطبيق 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(); } }
- يحتوي S
entimentController
على حقل saLogicApiUrl
. يتم تعيين قيمتها بواسطة خاصية sa.logic.api.url
. - سلسلة
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
- تهيئة كائن
Flask
. - تحديد العنوان لتنفيذ طلبات POST إليه.
- استرجاع خاصية
sentence
من نص الطلب. - تهيئة كائن
TextBlob
المجهول والحصول على قيمة polarity
الجملة الأولى في نص الطلب (في حالتنا ، هذه هي الجملة الوحيدة التي تم تمريرها للتحليل). - عودة الرد ، الذي يحتوي في نصه على نص الاقتراح وفهرس
polarity
المحسوب عليه. - تشغيل تطبيق Flask ، والذي سيكون متاحًا على العنوان
0.0.0.0:5000
(يمكنك أيضًا الوصول إليه باستخدام تصميم النموذج localhost:5000
).
الآن يتم تشغيل الخدمات المصغرة التي تشكل التطبيق. يتم تكوينها للتفاعل مع بعضها البعض. هذا ما يبدو عليه مخطط التطبيق في هذه المرحلة من العمل.
يتم جلب جميع الخدمات المصغرة التي تشكل التطبيق إلى حالة صحية.الآن ، قبل المتابعة ، افتح تطبيق React في المستعرض وحاول تحليل بعض الاقتراحات باستخدامه. إذا تم كل شيء بشكل صحيح ، بعد النقر فوق الزر
Send
، سترى نتائج التحليل أسفل مربع النص.
في القسم التالي ، سنتحدث عن كيفية تشغيل خدماتنا المصغرة في حاويات Docker. يعد ذلك ضروريًا لإعداد التطبيق لإطلاقه في مجموعة Kubernetes.
حاويات قفص الاتهام
Kubernetes هو نظام لأتمتة نشر وتوسيع وإدارة التطبيقات الحاوية. ويطلق عليه أيضًا اسم "أوركسترا الحاويات". إذا كان Kubernetes يعمل مع الحاويات ، فيجب علينا أولاً الحصول على هذه الحاويات قبل استخدام هذا النظام. ولكن أولاً ، دعنا نتحدث عن ماهية الحاويات. ربما يمكن العثور على أفضل إجابة لسؤال ما هو موجود في
وثائق Docker:
صورة الحاوية عبارة عن حزمة خفيفة الوزن وقابلة للتنفيذ وقابلة للتنفيذ تحتوي على تطبيق يتضمن كل ما تحتاجه لتشغيله: رمز التطبيق ووقت التشغيل وأدوات النظام والمكتبات والإعدادات. يمكن استخدام البرامج المحواة في بيئات Linux و Windows ، وستعمل دائمًا كما هي بغض النظر عن البنية التحتية.هذا يعني أنه يمكن تشغيل الحاويات على أي جهاز كمبيوتر ، بما في ذلك خوادم الإنتاج ، وفي أي بيئة ، ستعمل التطبيقات الموجودة بها بنفس الطريقة.
لاستكشاف ميزات الحاويات ومقارنتها بطرق أخرى لتشغيل التطبيقات ، فكر في مثال على تقديم تطبيق React باستخدام جهاز افتراضي وحاوية.
ervServing React تطبيق ملفات ثابتة باستخدام الجهاز الظاهري
في محاولة لتنظيم صيانة الملفات الثابتة عن طريق الأجهزة الظاهرية ، سنواجه العيوب التالية:
- الاستخدام غير الفعال للموارد ، حيث أن كل جهاز افتراضي هو نظام تشغيل متكامل.
- منصة تعتمد. ما يعمل على كمبيوتر محلي معين قد لا يعمل على خادم إنتاج.
- تحجيم بطيء وكثيف للموارد من حل افتراضي يستند إلى الجهاز.
خادم الويب الثابت Nginx الذي يعمل على جهاز افتراضيإذا تم استخدام الحاويات لحل مشكلة مماثلة ، فيمكن ملاحظة نقاط القوة التالية:
- الاستخدام الفعال للموارد: العمل مع نظام التشغيل باستخدام Docker.
- استقلال المنصة. ستعمل الحاوية التي يمكن للمطور تشغيلها على جهاز الكمبيوتر الخاص به في أي مكان.
- نشر خفيف الوزن من خلال استخدام طبقات الصور.
خادم الويب الثابت Nginx الذي يعمل في حاويةلقد قارنا الأجهزة والحاويات الافتراضية بنقاط قليلة فقط ، ولكن حتى هذا يكفي لشعور قوة الحاويات. تعرف على المزيد حول حاويات Docker هنا.
image تجميع صورة حاوية لتطبيق React
لبنة البناء الرئيسية لحاوية Docker هي
Dockerfile
. في بداية هذا الملف ، قم بعمل سجل للصورة الأساسية للحاوية ، ثم تتضمن سلسلة من الإرشادات التي تشير إلى الترتيب الذي سيتم به إنشاء الحاوية بحيث يلبي احتياجات تطبيق معين.
قبل أن نبدأ العمل مع
Dockerfile
، دعونا نتذكر ما قمنا به لإعداد ملفات تطبيق React للتحميل على خادم Nginx:
- إنشاء حزمة تطبيق
npm run build
( npm run build
). - بدء تشغيل خادم Nginx.
- انسخ محتويات دليل
sa-frontend
مجلد مشروع sa-frontend
إلى مجلد خادم nginx/html
.
يمكنك أن ترى أدناه أوجه التشابه بين إنشاء الحاوية والإجراءات المذكورة أعلاه التي يتم تنفيذها على الكمبيوتر المحلي.
D إعداد Dockerfile ل SA-Frontend
التعليمات التي سيتم تضمينها في
Dockerfile
لتطبيق
SA-Frontend
Dockerfile
تتكون من أمرين فقط. الحقيقة هي أن فريق تطوير Nginx أعد
صورة أساسية لـ Nginx ، والتي سوف نستخدمها لإنشاء صورتنا. فيما يلي الخطوتان اللتان نحتاج إلى وصفهما:
- أساس الصورة التي تحتاج إليها لإنشاء صورة Nginx.
- يجب نسخ محتويات المجلد
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. في هذه المرحلة من العمل ، عليك القيام بما يلي:
- تثبيت عامل الميناء .
- سجل على موقع دوكر هاب.
- قم بتسجيل الدخول إلى الحساب عن طريق تشغيل الأمر التالي في الجهاز:
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
.
▍
- , ? . .
sa-logic
5050
:
docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
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
. , ?
