Kubernetes سبق حصو 1: ايپليڪيشنون، مائڪرو سروسز، ۽ ڪنٽينرز
اسان جي درخواست تي، حبر هڪ حب ٺاهي ڪوبنيٿس ۽ اسان ان ۾ پهرين اشاعت رکڻ تي خوش آهيون. رڪنيت حاصل ڪريو!
Kubernetes آسان آهي. بئنڪ مون کي هن علائقي ۾ ڪم ڪرڻ لاء تمام گهڻو پئسا ڇو ڏيندا آهن، جڏهن ته ڪو به هن ٽيڪنالاجي کي صرف چند ڪلاڪن ۾ ماسٽر ڪري سگهي ٿو؟
جيڪڏهن توهان کي شڪ آهي ته ڪبرنيٽس ايترو جلدي سکي سگهجي ٿو، مان مشورو ڏيان ٿو ته توهان ان کي پاڻ ڪرڻ جي ڪوشش ڪريو. يعني، هن مواد ۾ مهارت حاصل ڪرڻ بعد، توهان هڪ ايپليڪيشن هلائي سگهو ٿا مائڪرو سروسز جي بنياد تي ڪبرنيٽس ڪلستر ۾. مان هن جي ضمانت ڏئي سگهان ٿو، ڇاڪاڻ ته اهو ساڳيو طريقو آهي جيڪو آئون هتي استعمال ڪريان ٿو ته آئون پنهنجن گراهڪن کي سيکاريان ٿو ڪبرنيٽس سان ڪيئن ڪم ڪجي. ڇا هي گائيڊ ٻين کان مختلف آهي؟ حقيقت ۾، ڪيتريون ئي شيون. تنهن ڪري، انهن مان اڪثر مواد سادي شين جي وضاحت سان شروع ٿئي ٿو - ڪبرنيٽس جا تصور ۽ ڪيبيڪل ڪمانڊ جون خاصيتون. انهن مضمونن جا ليکڪ فرض ڪن ٿا ته انهن جو پڙهندڙ واقف آهي ايپليڪيشن ڊولپمينٽ، مائڪرو سروسز، ۽ ڊاڪر ڪنٽينرز. اسان ٻئي طرف وينداسين. پهرين، اچو ته ڪمپيوٽر تي مائڪرو سروسز جي بنياد تي ايپليڪيشن کي ڪيئن هلائڻ جي باري ۾ ڳالهايون. ان کان پوء اسان هر مائڪرو سروس لاء ڪنٽينر تصويرن جي تعمير تي نظر ڪنداسين. ۽ ان کان پوء، اسان Kubernetes سان واقف ٿينداسين ۽ ڪبرنيٽس پاران منظم ڪيل ڪلستر ۾ مائڪرو سروسز جي بنياد تي ايپليڪيشن جي تعیناتي جو تجزيو ڪنداسين.
اهو طريقو، ڪبرنيٽس ڏانهن بتدريج طريقي سان، سمجھڻ جي کوٽائي ڏيندو ته ڇا ٿي رهيو آهي جيڪو سراسري ماڻهوءَ کي اهو سمجهڻ جي ضرورت آهي ته ڪبرنيٽس ۾ هر شيءِ کي ڪيئن منظم ڪيو ويو آهي. Kubernetes يقيناً هڪ سادي ٽيڪنالوجي آهي، بشرطيڪ ته جيڪو به ان ۾ مهارت حاصل ڪرڻ چاهي ٿو اهو ڄاڻي ٿو ته اهو ڪٿي ۽ ڪيئن استعمال ٿئي ٿو.
ھاڻي، اڳتي وڌڻ جي بغير، اچو ته ڪم تي وڃو ۽ ان ايپليڪيشن بابت ڳالهايون جنھن سان اسان ڪم ڪنداسين.
تجرباتي ايپ
اسان جي ايپليڪيشن صرف هڪ فنڪشن انجام ڏيندو. اهو، ان پٽ جي طور تي، هڪ جملو وٺندو آهي، جنهن کان پوء، متن جي تجزيي جا اوزار استعمال ڪندي، هن جملي جي جذباتي تجزيي کي انجام ڏئي ٿو، هڪ خاص اعتراض جي سزا جي ليکڪ جي جذباتي رويي جو جائزو وٺڻ.
هي اهو آهي جيڪو هن ايپليڪيشن جي مکيه ونڊو وانگر ڏسڻ ۾ اچي ٿو.
جذبي جو تجزيو ويب ايپليڪيشن
ٽيڪنيڪل نقطي نظر کان، ايپليڪيشن ٽن مائڪرو سروسز تي مشتمل آهي، جن مان هر هڪ ڪم جو هڪ خاص سيٽ حل ڪري ٿو:
SA-Logic هڪ Python ايپليڪيشن آهي جيڪا متن جي جذبي جو تجزيو ڪري ٿي.
اهو نوٽ ڪرڻ ضروري آهي ته مائڪرو سروسز اڪيلائي ۾ موجود نه آهن. اهي "فرضن جي علحدگي" جي خيال کي لاڳو ڪن ٿا، پر انهن کي، ساڳئي وقت، هڪ ٻئي سان لهه وچڙ جي ضرورت آهي.
ايپليڪيشن ۾ ڊيٽا وهندو آهي
مٿي ڏنل ڊراگرام ۾، توھان ڏسي سگھوٿا سسٽم جا نمبر ٿيل مرحلا، ايپليڪيشن ۾ ڊيٽا جي وهڪري کي بيان ڪندي. اچو ته ان کي ٽوڙيو:
پهرين توهان کي انسٽال ڪرڻ ۽ هلائڻ جي ضرورت آهي Nginx ويب سرور. اهو آهي توهان ان کي ڊائون لوڊ ڪري سگهو ٿا ۽ ان کي انسٽال ڪرڻ ۽ هلائڻ لاءِ هدايتون ڳولي سگهو ٿا. پوء توھان کي فولڊر جي مواد کي نقل ڪرڻ جي ضرورت آھي sa-frontend/build فولڊر ڏانهن [your_nginx_installation_dir]/html.
هن طريقي سان، ريڪٽ ايپليڪيشن جي اسيمبليء دوران ٺاهيل فائل index.html تي دستياب هوندي [your_nginx_installation_dir]/html/index.html. اها فائل آهي جيڪا، ڊفالٽ طور، نينڪس سرور مسئلا جڏهن ان تائين رسائي حاصل ڪري ٿي. سرور هڪ بندرگاهه تي ٻڌڻ لاءِ ترتيب ڏنل آهي 80، پر توھان ان کي ترتيب ڏئي سگھوٿا جيئن توھان چاھيو فائل کي ايڊٽ ڪندي [your_nginx_installation_dir]/conf/nginx.conf.
ڪوڊ تمام سٺو ڪم ڪرڻ لڳي. هتي ڇا غلط آهي، بهرحال؟ جيڪڏهن توهان فرض ڪيو ته جنهن ايڊريس تي ايپليڪيشن پوسٽ جي درخواست موڪلڻ جي ڪوشش ڪري رهي آهي، اتي اڃا تائين ڪجھ به نه آهي جيڪو هن درخواست کي قبول ڪري سگهي ۽ ان تي عمل ڪري، پوءِ توهان بلڪل صحيح هوندا. يعني، ايڊريس تي اچڻ واري درخواستن تي عمل ڪرڻ لاءِ http://localhost:8080/sentiment، اسان کي بهار جي بنياد تي هڪ ويب ايپليڪيشن هلائڻ جي ضرورت آهي.
اسان کي هڪ بهار جي درخواست جي ضرورت آهي جيڪا پوسٽ درخواست قبول ڪري سگهي
▍بهار جي بنياد تي ويب ايپليڪيشن کي ترتيب ڏيڻ
اسپرنگ ايپليڪيشن کي ترتيب ڏيڻ لاءِ، توھان کي ضرورت آھي JDK8 ۽ Maven ۽ صحيح طرح سان ترتيب ڏنل ماحوليات. هي سڀ انسٽال ڪرڻ کان پوءِ، توهان اسان جي پروجيڪٽ تي ڪم جاري رکي سگهو ٿا.
▍ ايپليڪيشن کي جار فائل ۾ پيڪ ڪرڻ
نيويگيٽ ڪريو، ٽرمينل استعمال ڪندي، فولڊر ڏانھن sa-webapp ۽ ھيٺ ڏنل حڪم داخل ڪريو:
mvn install
فولڊر ۾ هن حڪم کي عمل ڪرڻ کان پوء sa-webapp ڊاريڪٽري ٺاهي ويندي target. ھي اھو آھي جتي جاوا ايپليڪيشن واقع ٿيندي، ھڪڙي جار فائل ۾ ڀريل، فائل جي نمائندگي ڪندي sentiment-analysis-web-0.0.1-SNAPSHOT.jar.
▍جاوا ايپليڪيشن لانچ ڪرڻ
فولڊر ڏانھن وو target ۽ ايپليڪيشن کي ھيٺ ڏنل حڪم سان هلائڻ:
هن حڪم تي عمل ڪرڻ دوران هڪ غلطي ٿيندي. ان کي درست ڪرڻ شروع ڪرڻ لاءِ، اسين اسٽيڪ ٽريس ڊيٽا ۾ استثنا جي تفصيلن کي پارس ڪري سگھون ٿا:
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();
}
}
۾ ايسentimentController اتي هڪ ميدان آهي saLogicApiUrl. ان جي قيمت ملڪيت طرفان مقرر ڪئي وئي آهي sa.logic.api.url.
لڪير saLogicApiUrl قدر سان ملائي ٿو /analyse/sentiment. گڏو گڏ اهي مائڪروسروس کي ڪال ڪرڻ لاءِ هڪ پتو ٺاهيندا آهن جيڪي ٽيڪسٽ تجزيو انجام ڏين ٿا.
▍ ملڪيت جي قيمت مقرر ڪرڻ
بهار ۾، ملڪيت جي قيمتن جو ڊفالٽ ذريعو هڪ فائل آهي application.properties، جنهن تي ڳولي سگهجي ٿو sa-webapp/src/main/resources. پر ان کي استعمال ڪرڻ صرف ملڪيت جي قيمت مقرر ڪرڻ جو واحد طريقو ناهي. توھان ھيٺ ڏنل حڪم سان پڻ ڪري سگھو ٿا:
ھن ملڪيت جي قيمت اسان جي پٿون ايپليڪيشن جي ايڊريس ڏانھن اشارو ڪرڻ گھرجي.
ان کي ترتيب ڏيڻ سان، اسان اسپرنگ ويب ايپليڪيشن کي ٻڌايون ٿا جتي ان کي ٽيڪسٽ پارسنگ درخواستون ڪرڻ لاءِ وڃڻو پوندو.
اسان جي زندگين کي پيچيده نه ڪرڻ لاء، اسان اهو فيصلو ڪنداسين ته پٿون ايپليڪيشن دستياب هوندي localhost:5000 ۽ ان جي باري ۾ نه وسارڻ جي ڪوشش ڪريو. نتيجي طور، بهار جي ايپليڪيشن کي شروع ڪرڻ جو حڪم هن طرح نظر ايندو:
ھاڻي اسان کي صرف پٿون ايپليڪيشن کي هلائڻو آھي ۽ سسٽم توقع جي مطابق ڪم ڪندو.
▍Python ايپليڪيشن سيٽ ڪرڻ
پائٿون ايپليڪيشن کي هلائڻ لاءِ، توھان کي لازمي طور تي Python 3 ۽ Pip انسٽال ٿيل ھجڻ گھرجي، ۽ توھان کي لازمي طور تي مناسب ماحوليات جو صحيح سيٽ ھجڻ گھرجي.
گمنام اعتراض جي شروعات TextBlob ۽ قدر حاصل ڪرڻ polarity درخواست جي جسم ۾ حاصل ڪيل پهرين تجويز لاء (اسان جي صورت ۾، اهو صرف تجزيو لاء پيش ڪيل تجويز آهي).
هڪ جواب واپسي، جنهن جي جسم ۾ پيشڪش جو متن ۽ ان جي حساب سان اشارو شامل آهي polarity.
فلاسڪ ايپليڪيشن لانچ ڪندي، جيڪا دستياب هوندي 0.0.0.0:5000 (توهان پڻ ان تائين رسائي ڪري سگهو ٿا فارم جي تعمير استعمال ڪندي localhost:5000).
سڀئي مائڪرو سروسز جيڪي ايپليڪيشن ٺاهيندا آهن انهن کي صحتمند حالت ۾ آندو ويو آهي
ھاڻي، ان کان اڳ جو اسان جاري رکون، برائوزر ۾ React ايپ کوليو ۽ ان سان ڪجھ جملو پارس ڪرڻ جي ڪوشش ڪريو. جيڪڏھن سڀڪنھن شيء کي صحيح ڪيو ويو آهي - بٽڻ کي دٻائڻ کان پوء Send توھان ڏسندا تجزيو جا نتيجا ٽيڪسٽ باڪس ھيٺان.
ڪوبنيٿس ڪنٽرول ٿيل ايپليڪيشنن جي ترتيب، اسڪيلنگ ۽ انتظام کي خودڪار ڪرڻ لاء هڪ سسٽم آهي. اهو پڻ سڏيو ويندو آهي "ڪنٽينر آرڪيسٽرٽر". جيڪڏهن ڪبرنيٽس ڪنٽينرز سان ڪم ڪري ٿو، پوء هن سسٽم کي استعمال ڪرڻ کان پهريان، اسان کي پهريان اهي ڪنٽينرز حاصل ڪرڻ گهرجن. پر پهرين، اچو ته ان بابت ڳالهايون ڪنٽينر ڇا آهن. شايد ان سوال جو بهترين جواب ان ۾ ملي سگهي ٿو ته اهو ڇا آهي دستاويز Docker ڏانهن:
هڪ ڪنٽينر جي تصوير هڪ هلڪو وزن، خود مختيار، قابل عمل پيڪيج آهي جنهن ۾ هڪ ايپليڪيشن شامل آهي، جنهن ۾ هر شيءِ شامل آهي ان کي هلائڻ لاءِ: ايپليڪيشن ڪوڊ، رن ٽائم ماحول، سسٽم اوزار ۽ لائبريريون، سيٽنگون. ڪنٽينر ٿيل پروگرامن ٻنهي لينڪس ۽ ونڊوز ماحول ۾ استعمال ڪري سگھجن ٿا ۽ هميشه بنيادي ڍانچي کان سواءِ ساڳيو ڪم ڪندا.
ان جو مطلب اهو آهي ته ڪنٽينرز ڪنهن به ڪمپيوٽر تي هلائي سگھجن ٿا، بشمول پروڊڪشن سرور، ۽ ڪنهن به ماحول ۾، انهن ۾ بند ٿيل ايپليڪيشنون ساڳيو ڪم ڪنديون.
ڪنٽينرز جي خاصيتن کي ڳولڻ ۽ ايپليڪيشنن کي هلائڻ جي ٻين طريقن سان مقابلو ڪرڻ لاء، اچو ته هڪ ورچوئل مشين ۽ ڪنٽينر استعمال ڪندي ري ايڪٽ ايپليڪيشن جي خدمت جو مثال ڏسو.
▍ ورچوئل مشين استعمال ڪندي ريڪٽ ايپليڪيشن جون جامد فائلون پيش ڪرڻ
مجازي مشينن کي استعمال ڪندي جامد فائلن جي سار سنڀال کي منظم ڪرڻ جي ڪوشش ڪندي، اسان هيٺ ڏنل نقصانن کي منهن ڪنداسين:
وسيلن جي غير موثر استعمال، ڇاڪاڻ ته هر مجازي مشين هڪ مڪمل آپريٽنگ سسٽم آهي.
پليٽ فارم تي انحصار. ڪجھ مقامي ڪمپيوٽر تي ڇا ڪم ڪري سگھي ٿو پروڊڪٽ سرور تي ڪم نٿو ڪري سگھي.
هڪ مجازي مشين حل جي سست ۽ وسيلن جي گھڻائي اسڪيلنگ.
اسان صرف ڪجھ پوائنٽن تي ورچوئل مشينن ۽ ڪنٽينرز جو مقابلو ڪيو آھي، پر اھو به ڪافي آھي ڪنٽينرز جي طاقت کي محسوس ڪرڻ لاءِ. اهو آهي توھان ڳولي سگھوٿا تفصيل بابت ڊاڪر ڪنٽينرز.
▍ React ايپ لاءِ ڪنٽينر جي تصوير ٺاهڻ
ڊاکر ڪنٽينر جو بنيادي بلڊنگ بلاڪ فائل آهي Dockerfile. هن فائل جي شروعات ۾، ڪنٽينر جي هڪ بنيادي تصوير رڪارڊ ڪئي وئي آهي، پوء هدايتن جو هڪ سلسلو شامل ڪيو ويو آهي جيڪو ظاهر ڪري ٿو ته هڪ ڪنٽينر ڪيئن ٺاهيو جيڪو ايپليڪيشن جي ضرورتن کي پورو ڪندو.
ان کان اڳ جو اسان فائل سان ڪم ڪرڻ شروع ڪيو Dockerfile، ياد رکو ته اسان Nginx سرور تي اپلوڊ ڪرڻ لاءِ React ايپليڪيشن جون فائلون تيار ڪرڻ لاءِ ڇا ڪيو:
React ايپ پيڪيج ٺاهڻ (npm run build).
Nginx سرور شروع ڪندي.
ڊاريڪٽري جي مواد کي نقل ڪندي build پروجيڪٽ فولڊر مان sa-frontend سرور فولڊر ڏانهن nginx/html.
هيٺ توهان هڪ ڪنٽينر ٺاهڻ ۽ مقامي ڪمپيوٽر تي ڪيل مٿين ڪارناما جي وچ ۾ برابري ڏسي سگهو ٿا.
▍ SA-Frontend ايپليڪيشن لاءِ Dockerfile تيار ڪرڻ
هدايتون شامل ڪرڻ لاء Dockerfile درخواست لاءِ SA-Frontend، صرف ٻن ٽيمن تي مشتمل آهي. حقيقت اها آهي ته نينگڪس ڊولپمينٽ ٽيم هڪ بنيادي تيار ڪئي آهي تصوير آهي Nginx لاءِ، جيڪو اسان استعمال ڪنداسين اسان جي تصوير ٺاهڻ لاءِ. هتي ٻه قدم آهن جن کي اسان کي بيان ڪرڻ جي ضرورت آهي:
توهان کي Nginx تصوير کي تصوير جو بنياد بڻائڻ جي ضرورت آهي.
فولڊر مواد sa-frontend/build تصوير جي فولڊر ۾ ڪاپي ڪرڻ جي ضرورت آهي nginx/html.
جيڪڏهن اسان هن وضاحت کان فائل ڏانهن وڃو Dockerfile، پوء اهو هن طرح نظر ايندو:
FROM nginx
COPY build /usr/share/nginx/html
جئين توهان ڏسي سگهو ٿا، هتي هر شيء بلڪل سادو آهي، جڏهن ته فائل جو مواد پڻ پڙهي ۽ سمجهي سگهجي ٿو. هي فائل سسٽم کي ٻڌائي ٿو ته تصوير وٺي nginx هر شي سان گڏ جيڪو اڳ ۾ ئي آهي، ۽ ڊاريڪٽري جي مواد کي نقل ڪريو build ڊاريڪٽري ڏانهن nginx/html.
هتي توهان وٽ شايد اهو سوال هجي ته مون کي ڪيئن معلوم ٿئي ته فولڊر مان فائلن کي ڪٿي نقل ڪجي buildيعني رستو ڪٿان آيو /usr/share/nginx/html. حقيقت ۾، هتي ڪجھ به پيچيده ناهي. حقيقت اها آهي ته لاڳاپيل معلومات ۾ ڳولي سگهجي ٿو وضاحت تصوير.
▍ تصوير کي گڏ ڪرڻ ۽ ان کي مخزن تي اپ لوڊ ڪرڻ
ان کان اڳ جو اسان مڪمل ٿيل تصوير سان ڪم ڪري سگھون، اسان کي ان کي تصوير جي مخزن ۾ جمع ڪرڻو پوندو. ائين ڪرڻ لاءِ، اسان استعمال ڪنداسين مفت بادل تي ٻڌل تصويري ميزباني پليٽ فارم Docker Hub. ڪم جي هن مرحلي تي، توهان کي هيٺين ڪرڻ جي ضرورت آهي:
هتي ۽ هيٺان ساڳين حڪمن ۾ $DOCKER_USER_ID Docker Hub تي توهان جي يوزر نالو سان تبديل ڪيو وڃي. مثال طور، حڪم جو هي حصو هن طرح نظر اچي سگهي ٿو: rinormaloku/sentiment-analysis-frontend.
انهي حالت ۾، هن حڪم کي ان مان هٽائڻ سان مختصر ڪري سگهجي ٿو -f Dockerfile، ڇاڪاڻ ته فولڊر جنهن ۾ اسان هن ڪمانڊ تي عمل ڪريون ٿا اهو فائل اڳ ۾ ئي موجود آهي.
ختم ٿيل تصوير کي مخزن ڏانھن موڪلڻ لاء، اسان کي ھيٺ ڏنل حڪم جي ضرورت آھي:
ان کي مڪمل ڪرڻ کان پوء، Docker Hub تي پنهنجي ذخيرن جي لسٽ کي ڏسو ته ڏسو ته تصوير ڪاميابي سان ڪلائوڊ اسٽوريج ڏانهن ڌڪيو ويو.
▍ ڪنٽينر شروع ڪرڻ
هاڻي ڪو به ڊائون لوڊ ڪري سگهي ٿو ۽ هلائي سگهي ٿو تصوير کي سڏيو ويندو آهي $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 مقامي ڪمپيوٽر تي کوليو ويو، توهان هن ڪمپيوٽر تان ايپليڪيشن تائين رسائي ڪري سگهو ٿا localhost:80. جيڪڏهن توهان جو سسٽم Docker کي سپورٽ نٿو ڪري، ته توهان ڊاکر ورچوئل مشين تي ايپليڪيشن هلائي سگهو ٿا، جنهن جو پتو هن طرح نظر ايندو <docker-machine ip>:80. Docker ورچوئل مشين جو IP پتو ڳولڻ لاءِ، توھان استعمال ڪري سگھو ٿا حڪم docker-machine ip.
هن نقطي تي، هڪ دفعو فرنٽ-اينڊ ايپ ڪنٽينر ڪاميابي سان شروع ڪيو آهي، توهان کي ان جي صفحي کي برائوزر ۾ کولڻ جي قابل هوندو.
▍.dockerignore فائل
ايپليڪيشن تصوير جي تعمير SA-Frontend، اسان نوٽيس ڪري سگهون ٿا ته اهو عمل انتهائي سست آهي. اهو ئي سبب آهي ته تصوير جي تعمير جو حوالو ضرور موڪليو وڃي Docker ڊيمن ڏانهن. ڊاريڪٽري جيڪا تعمير جي حوالي سان نمائندگي ڪري ٿي حڪم جي آخري دليل طور ڏني وئي آهي docker build. اسان جي حالت ۾، هن حڪم جي آخر ۾ هڪ نقطو آهي. ان جي نتيجي ۾ هيٺين ڍانچي کي اسيمبلي جي حوالي سان شامل ڪيو پيو وڃي:
پر هتي موجود سڀني فولڊرن مان، اسان کي صرف هڪ فولڊر جي ضرورت آهي build. ٻيو ڪجهه به ڊائون لوڊ ڪرڻ وقت جو ضايع آهي. توھان ڊاڪر کي ٻڌائڻ سان تعمير کي تيز ڪري سگھو ٿا ڪھڙي ڊائريڪٽرن کي نظرانداز ڪرڻ. هن کي ڪرڻ لاء، اسان کي هڪ فائل جي ضرورت آهي .dockerignore. توهان، جيڪڏهن توهان فائل سان واقف آهيو .gitignore، هن فائل جي جوڙجڪ شايد واقف نظر ايندي. اهو ڊائريڪٽرن کي لسٽ ڪري ٿو جيڪا تصوير جي تعمير سسٽم کي نظر انداز ڪري سگهي ٿي. اسان جي صورت ۾، هن فائل جو مواد هن طرح نظر اچي ٿو:
node_modules
src
public
فائيل .dockerignore فائل جي طور تي ساڳئي فولڊر ۾ هجڻ گهرجي Dockerfile. هاڻي تصوير جي اسيمبلي چند سيڪنڊن وٺي ويندي.
اچو ته ھاڻي جاوا ايپليڪيشن لاءِ تصوير سان ڊيل ڪريون.
▍ جاوا ايپليڪيشن لاءِ ڪنٽينر جي تصوير ٺاهڻ
توهان کي خبر آهي ته ڇا، ۽ توهان اڳ ۾ ئي سڀ ڪجهه سکيو آهي جيڪو توهان کي ڪنٽينر تصويرون ٺاهڻ جي ضرورت آهي. ان ڪري هي حصو تمام مختصر ٿيندو.
فائل کوليو Dockerfile، جيڪو پروجيڪٽ فولڊر ۾ واقع آهي sa-webapp. جيڪڏهن توهان هن فائل جو متن پڙهو، ته ان ۾ توهان کي صرف ٻه نوان تعميرات ملندا جيڪي لفظن سان شروع ٿين ٿيون ENV и EXPOSE:
چاٻي ENV توهان کي اجازت ڏئي ٿو ته ماحول جي متغيرن کي Docker ڪنٽينرز اندر. خاص طور تي، اسان جي صورت ۾، اهو توهان کي اجازت ڏئي ٿو ته هڪ URL سيٽ ڪرڻ لاء ايپليڪيشن جي API تائين رسائي ڪرڻ لاء جيڪو ٽيڪسٽ تجزيو انجام ڏئي ٿو.
چاٻي EXPOSE توهان کي اجازت ڏئي ٿو ڊڪر کي بندرگاهه کولڻ لاءِ. اسان ايپليڪيشن سان ڪم ڪرڻ دوران هن بندرگاهن کي استعمال ڪرڻ وارا آهيون. هتي توهان ان ۾ ڏسي سگهو ٿا 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. ان کان علاوه، اسان کي بندرگاهن کي سيٽ ڪرڻ جي ضرورت آهي جنهن تي پائٿون ايپليڪيشن جاوا ايپليڪيشن جي درخواستن لاء ماحول جي متغير کي ٻيهر ترتيب ڏيڻ سان ٻڌندي. 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
هڪ ڪنٽينر يا ڊاڪر VM جي IP پتي کي ڪيئن ڳولڻ لاءِ، فائل ڏانهن رجوع ڪريو ريڊيو.
اچو ته ايپليڪيشن ڪنٽينر شروع ڪريون sa-frontend:
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
مهرباني ڪري نوٽ ڪريو ته جيڪڏهن توهان بندرگاهه کي تبديل ڪيو sa-webapp، يا جيڪڏهن توهان ڊاڪر VM هلائي رهيا آهيو، توهان کي فائل کي ايڊٽ ڪرڻ جي ضرورت پوندي App.js فولڊر مان sa-frontendطريقي سان IP پتي يا پورٽ نمبر تبديل ڪندي analyzeSentence()پراڻي معلومات جي بدران موجوده معلومات کي تبديل ڪندي. ان کان پوء، توهان کي تصوير کي ٻيهر گڏ ڪرڻ ۽ ان کي استعمال ڪرڻ جي ضرورت آهي.