ڊاڪر ملٽي اسٽيج استعمال ڪندي ونڊوز تصويرون ٺاهڻ لاءِ
هيلو سڀ! منهنجو نالو Andrey آهي، ۽ مان ڊولپمينٽ ٽيم ۾ Exness ۾ DevOps انجنيئر طور ڪم ڪريان ٿو. منهنجي مکيه سرگرمي لينڪس آپريٽنگ سسٽم جي تحت ڊڪر ۾ ايپليڪيشنن جي تعمير، ترتيب ڏيڻ ۽ سپورٽ ڪرڻ سان لاڳاپيل آهي (هتي OS طور حوالو ڏنو ويو آهي). گهڻو وقت اڳ مون وٽ ساڳئي سرگرمين سان هڪ ڪم هو، پر منصوبي جو ٽارگيٽ OS ونڊوز سرور ۽ C++ منصوبن جو هڪ سيٽ هو. منهنجي لاءِ، هي ونڊوز او ايس تحت ڊاکر ڪنٽينرز سان پهريون ويجهو رابطو هو ۽، عام طور تي، C++ ايپليڪيشنن سان. انهي جي مهرباني، مون کي هڪ دلچسپ تجربو هو ۽ ونڊوز ۾ ڪنٽينرنگ ايپليڪيشنن جي ڪجهه پيچيدگين بابت سکيو.
هن آرٽيڪل ۾ مان توهان کي ٻڌائڻ چاهيان ٿو ته مون کي ڪهڙي مشڪلاتن کي منهن ڏيڻو پيو ۽ مون انهن کي ڪيئن حل ڪيو. مون کي اميد آهي ته هي توهان جي موجوده ۽ مستقبل جي چئلينج لاء مددگار آهي. پڙهڻ جو مزو وٺو!
ڪنٽينر ڇو؟
ڪمپني وٽ موجود زيربنا آهي Hashicorp Nomad ڪنٽينر آرڪيسٽرٽر ۽ لاڳاپيل حصن لاءِ - قونصل ۽ والٽ. تنهن ڪري، ايپليڪيشن ڪنٽينرائزيشن کي مڪمل حل پهچائڻ لاء هڪ متحد طريقو چونڊيو ويو. جيئن ته پروجيڪٽ انفراسٽرڪچر ونڊوز سرور ڪور او ايس ورزن 1803 ۽ 1809 سان گڏ ڊڪر هوسٽ تي مشتمل آهي، ان ڪري 1803 ۽ 1809 لاءِ ڊڪر تصويرن جا الڳ ورجن ٺاهڻ ضروري آهي. ورجن 1803 ۾، اهو ياد رکڻ ضروري آهي ته بلڊ ڊاڪر هوسٽ جو نظرثاني نمبر بنيادي ڊاکر تصوير جي نظرثاني نمبر ۽ ميزبان سان ملائڻ گهرجي جتي هن تصوير مان ڪنٽينر لانچ ڪيو ويندو. نسخو 1809 اهڙي ڪا خرابي ناهي. توهان وڌيڪ پڙهي سگهو ٿا هتي.
ڇو ملٽي اسٽيج؟
ڊولپمينٽ ٽيم جي انجنيئرن وٽ ھوسٽ ٺاھڻ لاءِ ڪابه يا تمام محدود پهچ نه آھي؛ انھن ھوسٽن تي ايپليڪيشن ٺاھڻ لاءِ اجزاء جي سيٽ کي تڪڙو منظم ڪرڻ جو ڪو طريقو ناھي، مثال طور، Visual Studio لاءِ اضافي ٽول سيٽ يا ڪم لوڊ انسٽال ڪريو. تنهن ڪري، اسان اهو فيصلو ڪيو ته سڀني حصن کي انسٽال ڪرڻ لاء ضروري آهي ايپليڪيشن کي تعمير ڪرڻ لاء ڊاکر تصوير ۾. جيڪڏهن ضروري هجي ته، توهان جلدي صرف ڊڪر فائل کي تبديل ڪري سگهو ٿا ۽ هن تصوير ٺاهڻ لاء پائپ لائن شروع ڪري سگهو ٿا.
نظريي کان عمل تائين
هڪ مثالي ڊڪرر ملٽي اسٽيج تصويري تعمير ۾، ايپليڪيشن کي تعمير ڪرڻ لاء ماحول ساڳئي ڊاڪر فائل اسڪرپٽ ۾ تيار ڪيو ويو آهي جيئن ايپليڪيشن پاڻ ٺاهي وئي آهي. پر اسان جي صورت ۾، هڪ وچولي لنڪ شامل ڪئي وئي، يعني، ايپليڪيشن ٺاهڻ لاء ضروري هر شيء سان گڏ هڪ ڊاکر تصوير ٺاهڻ جي شروعاتي قدم. اهو ڪيو ويو آهي ڇاڪاڻ ته مان استعمال ڪرڻ چاهيان ٿو ڊاکر ڪيش خاصيت سڀني انحصار جي تنصيب جي وقت کي گهٽائڻ لاءِ.
اچو ته هن تصوير کي ٺاهڻ لاء ڊاکرفائل اسڪرپٽ جي مکيه نقطي تي نظر رکون.
مختلف او ايس ورزن جون تصويرون ٺاهڻ لاءِ، توهان ڊڪر فائل ۾ هڪ دليل بيان ڪري سگهو ٿا جنهن جي ذريعي ورزن نمبر تعمير دوران گذريو ويو آهي، ۽ اهو پڻ بنيادي تصوير جو ٽيگ آهي.
Microsoft Windows Server تصويري ٽيگ جي مڪمل فهرست ڳولي سگھجي ٿي هتي.
ARG WINDOWS_OS_VERSION=1809
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION
ڊفالٽ طور هدايتون ۾ حڪم RUN Windows OS تي dockerfile جي اندر اهي cmd.exe ڪنسول ۾ جاري ڪيا ويا آهن. اسڪرپٽ لکڻ جي سهولت لاءِ ۽ استعمال ڪيل حڪمن جي ڪارڪردگي کي وڌائڻ لاءِ، اسان پاور شيل ۾ ڪمانڊ ايگزيڪيوشن ڪنسول کي هدايتن ذريعي ٻيهر بيان ڪنداسين. SHELL.
چاڪليٽي استعمال ڪندي پيڪيجز کي انسٽال ڪرڻ لاءِ، توھان صرف انھن کي ھڪڙي لسٽ طور پاس ڪري سگھو ٿا، يا انھن کي ھڪ وقت ۾ انسٽال ڪري سگھو ٿا جيڪڏھن توھان کي ھر پيڪيج لاءِ منفرد پيرا ميٽر پاس ڪرڻ جي ضرورت آھي. اسان جي صورتحال ۾، اسان XML فارميٽ ۾ هڪ پڌرو فائل استعمال ڪيو، جنهن ۾ گهربل پيڪيجز ۽ انهن جي پيٽرولن جي فهرست شامل آهي. ان جو مواد هن طرح نظر اچي ٿو:
dockerfile انسٽاليشن اسڪرپٽ کي هلائي ٿو، ۽ سهولت لاء، تعميراتي اوزار تي عمل ڪندڙ فائلن کي ماحول جي متغير ڏانهن رستو شامل ڪري ٿو. PATH. اهو پڻ مشورو ڏنو ويو آهي ته غير ضروري فائلن ۽ ڊائريڪٽرن کي هٽائڻ لاء تصوير جي سائيز کي گهٽائڻ لاء.
هن اسٽيج تي، اسان جي تصوير C++ ايپليڪيشن کي گڏ ڪرڻ لاءِ تيار آهي، ۽ اسان سڌو سنئون اڳتي وڌائي سگهون ٿا ڊاڪر ملٽي اسٽيج بلڊ ايپليڪيشن ٺاهڻ لاءِ.
عمل ۾ ملٽي اسٽيج
اسان ٺهيل تصوير کي استعمال ڪنداسين بورڊ تي سڀني اوزارن سان گڏ هڪ تعمير تصوير جي طور تي. جيئن پوئين ڊاڪرفائل اسڪرپٽ ۾، اسان کي متحرڪ طور تي بيان ڪرڻ جي صلاحيت شامل ڪنداسين نسخي نمبر/تصوير ٽيگ ڪوڊ جي ٻيهر استعمال جي آسانيء لاء. اهو هڪ ليبل شامل ڪرڻ ضروري آهي as builder هدايتن ۾ اسيمبلي جي تصوير ڏانهن FROM.
ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder
هاڻي اهو ايپليڪيشن ٺاهڻ جو وقت آهي. هتي هر شي بلڪل سادو آهي: نقل ڪريو سورس ڪوڊ ۽ ان سان لاڳاپيل هر شي، ۽ گڏ ڪرڻ وارو عمل شروع ڪريو.
حتمي تصوير ٺاهڻ جو آخري مرحلو ايپليڪيشن جي بنيادي تصوير کي بيان ڪرڻ آهي، جتي سڀني تاليف جي نموني ۽ ترتيب واري فائلون واقع ٿينديون. گڏ ڪيل فائلن کي نقل ڪرڻ لاء وچولي اسيمبلي جي تصوير مان، توهان کي وضاحت ڪرڻ گهرجي پيٽرول --from=builder هدايتن ۾ COPY.
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION
COPY --from=builder C:/x64/Release/myapp/ ./
COPY ./configs ./
ھاڻي اھو باقي رھيو آھي اسان جي ايپليڪيشن لاءِ ضروري انحصار شامل ڪرڻ لاءِ ڪم ڪرڻ ۽ ھدايتن ذريعي لانچ ڪمان جي وضاحت ڪريو ENTRYPOINT يا CMD.
ٿڪل
هن آرٽيڪل ۾، مون انهي بابت ڳالهايو ته ڪيئن ونڊوز جي اندر هڪ ڪنٽينر اندر C++ ايپليڪيشنن لاءِ مڪمل تاليف وارو ماحول ٺاهيو وڃي ۽ اسان جي ايپليڪيشن جون مڪمل تصويرون ٺاهڻ لاءِ ڊاڪر ملٽي اسٽيج بلڊز جي صلاحيتن کي ڪيئن استعمال ڪجي.