ونڈوز امیجز بنانے کے لیے ڈوکر ملٹی اسٹیج کا استعمال

ہیلو سب! میرا نام اینڈری ہے، اور میں Exness میں ڈویلپمنٹ ٹیم میں ایک DevOps انجینئر کے طور پر کام کرتا ہوں۔ میری بنیادی توجہ آپریٹنگ سسٹم پر چلنے والی Docker ایپلی کیشنز کی تعمیر، تعیناتی، اور برقرار رکھنا ہے۔ Linux (اس کے بعد OS کہا جاتا ہے)۔ کچھ عرصہ پہلے، میرے پاس اسی سرگرمیوں کے ساتھ ایک کام تھا، لیکن پروجیکٹ کا ہدف OS بن گیا۔ Windows Server اور C++ پروجیکٹس کا ایک سیٹ۔ میرے لئے، یہ OS کے تحت ڈوکر کنٹینرز کے ساتھ پہلی قریبی بات چیت تھی۔ Windows اور عام طور پر C++ ایپلی کیشنز۔ اس نے مجھے ایک دلچسپ تجربہ دیا اور مجھے OS میں کنٹینرائزنگ ایپلی کیشنز کی کچھ پیچیدگیاں سکھائیں۔ Windows.

ونڈوز امیجز بنانے کے لیے ڈوکر ملٹی اسٹیج کا استعمال

اس مضمون میں، میں ان چیلنجوں کا اشتراک کرنا چاہوں گا جن کا مجھے سامنا ہوا اور میں نے ان پر کیسے قابو پایا۔ مجھے امید ہے کہ یہ آپ کے موجودہ اور مستقبل کے مسائل کو حل کرنے میں مددگار ثابت ہوگا۔ لطف اٹھائیں!

کنٹینرز کیوں؟

کمپنی کے پاس Hashicorp Nomad کنٹینر آرکیسٹریٹر اور متعلقہ اجزاء یعنی قونصل اور والٹ کا موجودہ انفراسٹرکچر ہے۔ لہذا، ایپلی کیشن کنٹینرائزیشن کو مکمل حل فراہم کرنے کے لئے ایک متحد طریقہ کے طور پر منتخب کیا گیا تھا. چونکہ پروجیکٹ کے بنیادی ڈھانچے میں OS ورژن کے ساتھ Docker میزبان شامل ہیں۔ Windows Server اگر آپ Core 1803 اور 1809 استعمال کر رہے ہیں، تو آپ کو 1803 اور 1809 کے لیے الگ الگ Docker امیج ورژنز بنانے چاہئیں۔ ورژن 1803 میں، یہ یاد رکھنا ضروری ہے کہ Docker بلڈ ہوسٹ کا نظرثانی نمبر بیس Docker امیج کے نظرثانی نمبر اور اس ہوسٹ سے مماثل ہونا چاہیے جہاں اس تصویر سے کنٹینر لانچ کیا جائے گا۔ ورژن 1809 اس مسئلے کو ختم کرتا ہے۔ آپ یہاں اس کے بارے میں مزید پڑھ سکتے ہیں۔ یہاں.

کثیر مرحلے کیوں؟

ڈویلپمنٹ ٹیموں کے انجینئروں کے پاس میزبان بنانے کے لیے محدود یا کوئی رسائی نہیں ہے، اور ان میزبانوں پر ایپلیکیشن بنانے کے لیے درکار اجزاء کو فوری طور پر منظم کرنے کا کوئی طریقہ نہیں ہے، جیسے کہ بصری اسٹوڈیو کے لیے اضافی ٹول سیٹ یا کام کا بوجھ انسٹال کرنا۔ لہذا، ہم نے ڈوکر بلڈ امیج میں ایپلیکیشن بنانے کے لیے درکار تمام اجزاء انسٹال کرنے کا فیصلہ کیا۔ اگر ضروری ہو تو، ہم فوری طور پر صرف Dockerfile کو تبدیل کر سکتے ہیں اور امیج تخلیق کرنے والی پائپ لائن شروع کر سکتے ہیں۔

تھیوری سے پریکٹس تک

ایک مثالی ڈوکر ملٹی اسٹیج امیج بلڈ میں، ایپلیکیشن بنانے کے ماحول کی تیاری اسی ڈاکر فائل اسکرپٹ میں ہوتی ہے جس طرح ایپلی کیشن خود بنتی ہے۔ تاہم، ہمارے معاملے میں، ایک انٹرمیڈیٹ مرحلہ شامل کیا گیا تھا: ڈوکر امیج کے لیے پہلے سے تخلیق کا مرحلہ جس میں ایپلیکیشن بنانے کے لیے ضروری ہر چیز شامل ہے۔ یہ اس لیے کیا گیا کیونکہ ہم تمام انحصار کو انسٹال کرنے میں لگنے والے وقت کو کم کرنے کے لیے Docker کی کیشے کی خصوصیت کا فائدہ اٹھانا چاہتے تھے۔

آئیے اس تصویر کو بنانے کے لیے استعمال ہونے والی ڈاکر فائل اسکرپٹ کے اہم نکات پر غور کریں۔

مختلف OS ورژنز کی تصاویر بنانے کے لیے، آپ Dockerfile میں ایک دلیل کی وضاحت کر سکتے ہیں جو اسمبلی کے دوران ورژن نمبر کو پاس کرنے کے لیے استعمال کیا جاتا ہے، جو کہ بیس امیج ٹیگ بھی ہے۔

مائیکروسافٹ امیج ٹیگز کی مکمل فہرست Windows Server ڈھونڈ سکتا ہے یہاں.

ARG WINDOWS_OS_VERSION=1809
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION

پہلے سے طے شدہ طور پر، ہدایات میں حکم دیتا ہے RUN OS میں ڈاکر فائل کے اندر Windows cmd.exe کنسول میں عمل میں لایا جاتا ہے۔ اسکرپٹ لکھنے میں آسانی اور استعمال شدہ کمانڈز کی توسیعی فعالیت کے لیے، ہم مندرجہ ذیل ہدایات کا استعمال کرتے ہوئے کمانڈ ایگزیکیوشن کنسول کو پاورشیل کے لیے دوبارہ بیان کریں گے: SHELL.

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]

اگلا مرحلہ چاکلیٹی پیکیج مینیجر اور ضروری پیکجز کو انسٹال کرنا ہے:

COPY chocolatey.pkg.config .
RUN Set-ExecutionPolicy Bypass -Scope Process -Force ;
    [System.Net.ServicePointManager]::SecurityProtocol = 
    [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 ;
    $env:chocolateyUseWindowsCompression = 'true' ;
    iex ((New-Object System.Net.WebClient).DownloadString( 
      'https://chocolatey.org/install.ps1')) ;
    choco install chocolatey.pkg.config -y --ignore-detected-reboot ;
    if ( @(0, 1605, 1614, 1641, 3010) -contains $LASTEXITCODE ) { 
      refreshenv; } else { exit $LASTEXITCODE; } ;
    Remove-Item 'chocolatey.pkg.config'

چاکلیٹی کا استعمال کرتے ہوئے پیکجز کو انسٹال کرنے کے لیے، اگر آپ کو ہر پیکج کے لیے منفرد پیرامیٹرز پاس کرنے کی ضرورت ہو تو آپ انہیں صرف ایک فہرست کے طور پر پاس کر سکتے ہیں یا انفرادی طور پر انسٹال کر سکتے ہیں۔ ہمارے معاملے میں، ہم نے ایک XML مینی فیسٹ فائل استعمال کی ہے جو مطلوبہ پیکجوں اور ان کے پیرامیٹرز کی فہرست بتاتی ہے۔ اس کے مواد اس طرح نظر آتے ہیں:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="python" version="3.8.2"/>
  <package id="nuget.commandline" version="5.5.1"/>
  <package id="git" version="2.26.2"/>
</packages>

اس کے بعد، ہم ایپلیکیشن کی تعمیر کے ماحول کو انسٹال کرتے ہیں، یعنی MS Build Tools 2019 - یہ Visual Studio 2019 کا ہلکا پھلکا ورژن ہے، جس میں کوڈ کو مرتب کرنے کے لیے ضروری اجزاء کا کم از کم سیٹ ہوتا ہے۔
ہمارے C++ پروجیکٹ کے ساتھ مکمل طور پر کام کرنے کے لیے، ہمیں اضافی اجزاء کی ضرورت ہوگی، یعنی:

  • کام کا بوجھ C++ ٹولز
  • ٹول سیٹ v141
  • Windows 10 SDK (10.0.17134.0)

آپ JSON کنفیگریشن فائل کا استعمال کرتے ہوئے ٹولز کا ایک توسیعی سیٹ خود بخود انسٹال کر سکتے ہیں۔ کنفیگریشن فائل کے مندرجات:

دستیاب اجزاء کی مکمل فہرست دستاویزات کی سائٹ پر مل سکتی ہے۔ مائیکروسافٹ ویژن سٹوڈیو.

{
  "version": "1.0",
  "components": [
    "Microsoft.Component.MSBuild",
    "Microsoft.VisualStudio.Workload.VCTools;includeRecommended",
    "Microsoft.VisualStudio.Component.VC.v141.x86.x64",
    "Microsoft.VisualStudio.Component.Windows10SDK.17134"
  ]
}

ڈاکر فائل انسٹالیشن اسکرپٹ چلاتی ہے، اور سہولت کے لیے، بلڈ ٹولز ایگزیکیوٹیبل فائلوں کا راستہ ماحولیاتی متغیر میں شامل کیا جاتا ہے۔ PATHتصویر کے سائز کو کم کرنے کے لیے غیر ضروری فائلوں اور ڈائریکٹریوں کو حذف کرنے کا بھی مشورہ دیا جاتا ہے۔

COPY buildtools.config.json .
RUN Invoke-WebRequest 'https://aka.ms/vs/16/release/vs_BuildTools.exe' 
      -OutFile '.vs_buildtools.exe' -UseBasicParsing ;
    Start-Process -FilePath '.vs_buildtools.exe' -Wait -ArgumentList 
      '--quiet --norestart --nocache --config C:buildtools.config.json' ;
    Remove-Item '.vs_buildtools.exe' ;
    Remove-Item '.buildtools.config.json' ;
    Remove-Item -Force -Recurse 
      'C:Program Files (x86)Microsoft Visual StudioInstaller' ;
    $env:PATH = 'C:Program Files (x86)Microsoft Visual Studio2019BuildToolsMSBuildCurrentBin;' + $env:PATH; 
    [Environment]::SetEnvironmentVariable('PATH', $env:PATH, 
      [EnvironmentVariableTarget]::Machine)

اس مرحلے پر، C++ ایپلیکیشن کو مرتب کرنے کے لیے ہماری تصویر تیار ہے، اور ہم براہ راست ایپلیکیشن کی ڈوکر ملٹی اسٹیج بلڈ بنانے کے لیے آگے بڑھ سکتے ہیں۔

ایکشن میں ملٹی اسٹیج

ہم بنائی گئی تصویر کو بورڈ پر موجود تمام ٹولز کے ساتھ بطور بلڈ امیج استعمال کریں گے۔ جیسا کہ پچھلی ڈاکر فائل اسکرپٹ میں ہے، ہم آسانی سے کوڈ کے دوبارہ استعمال کے لیے تصویری ورژن نمبر/ٹیگ کو متحرک طور پر بیان کرنے کی صلاحیت شامل کریں گے۔ ٹیگ شامل کرنا ضروری ہے۔ as builder ہدایات میں اسمبلی کی تصویر پر FROM.

ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder

اب ایپلی کیشن بنانے کا وقت آگیا ہے۔ یہ سب بہت آسان ہے: سورس کوڈ اور اس سے وابستہ ہر چیز کو کاپی کریں اور تالیف کا عمل شروع کریں۔

COPY myapp .
RUN nuget restore myapp.sln ;
    msbuild myapp.sln /t:myapp /p:Configuration=Release

حتمی تصویر بنانے کا آخری مرحلہ بنیادی ایپلیکیشن امیج کی وضاحت کر رہا ہے، جہاں تمام تالیف کے نمونے اور کنفیگریشن فائلیں موجود ہوں گی۔ انٹرمیڈیٹ بلڈ امیج سے مرتب شدہ فائلوں کو کاپی کرنے کے لیے، آپ کو پیرامیٹر کی وضاحت کرنی ہوگی۔ --from=builder ہدایات میں COPY.

FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION

COPY --from=builder C:/x64/Release/myapp/ ./
COPY ./configs ./

اب صرف ہماری درخواست کے کام کرنے کے لیے ضروری انحصار کو شامل کرنا اور ہدایات کے ذریعے لانچ کمانڈ کی وضاحت کرنا باقی رہ گیا ہے۔ ENTRYPOINT یا CMD.

حاصل يہ ہوا

اس آرٹیکل میں، میں نے وضاحت کی کہ کس طرح ایک کنٹینر کے اندر C++ ایپلی کیشنز کے لیے ایک مکمل کمپائلیشن ماحول بنایا جائے۔ Windows اور ہماری ایپلیکیشن کی مکمل تصاویر بنانے کے لیے ڈوکر کی ملٹی اسٹیج تعمیراتی صلاحیتوں کو کیسے استعمال کیا جائے۔

ماخذ: www.habr.com

DDoS تحفظ، VPS VDS سرورز والی سائٹوں کے لیے قابل اعتماد ہوسٹنگ خریدیں۔ DDoS تحفظ، VPS VDS سرورز کے ساتھ قابل اعتماد ویب سائٹ ہوسٹنگ خریدیں۔ ProHoster