د وینډوز عکسونو جوړولو لپاره د ډاکر ملټي سټیج کارول

سلام و ټولو ته! زما نوم اندری دی، او زه په Exness کې د پراختیایی ټیم کې د DevOps انجینر په توګه کار کوم. زما اصلي فعالیت د لینکس عملیاتي سیسټم لاندې په ډاکر کې د غوښتنلیکونو رامینځته کولو ، ځای په ځای کولو او ملاتړ کولو پورې اړه لري (له دې وروسته د OS په توګه راجع کیږي). ډیر وخت دمخه ما د ورته فعالیتونو سره دنده درلوده ، مګر د پروژې هدف OS وینډوز سرور او د C++ پروژو سیټ و. زما لپاره ، دا د وینډوز OS لاندې د ډاکر کانټینرونو سره لومړی نږدې اړیکه وه او په عموم کې ، د C++ غوښتنلیکونو سره. د دې څخه مننه ، ما په زړه پوري تجربه درلوده او په وینډوز کې د کانټینر کولو غوښتنلیکونو ځینې پیچلتیاو په اړه مې زده کړل.

د وینډوز عکسونو جوړولو لپاره د ډاکر ملټي سټیج کارول

پدې مقاله کې زه غواړم تاسو ته ووایم چې زه له کومو ستونزو سره مخ وم او څنګه یې حل کړم. زه امید لرم چې دا ستاسو د اوسني او راتلونکي ننګونو لپاره ګټور وي. له لوستلو خوند واخلئ!

ولې کانتینرونه؟

شرکت د Hashicorp Nomad کانتینر آرکیسټرټر او اړونده برخو - قونسل او والټ لپاره موجود زیربنا لري. له همدې امله ، د غوښتنلیک کانټینر کول د بشپړ حل وړاندې کولو لپاره د متحد میتود په توګه غوره شوی و. څرنګه چې د پروژې زیربنا د وینډوز سرور کور OS 1803 او 1809 نسخو سره د ډاکر کوربه لري ، نو اړینه ده چې د 1803 او 1809 لپاره د ډاکر عکسونو جلا نسخې رامینځته کړئ. په 1803 نسخه کې ، دا مهمه ده چې په یاد ولرئ چې د جوړونکي ډاکر کوربه بیاکتنې شمیره باید د بیس ډاکر عکس د بیاکتنې شمیرې او کوربه سره سمون ولري چیرې چې د دې عکس څخه کانټینر به پیل شي. د 1809 نسخه هیڅ ډول نیمګړتیا نلري. تاسو کولی شئ نور ولولئ دلته.

ولې څو مرحلې؟

د پراختیایی ټیم انجینران د کوربه جوړولو لپاره هیڅ یا خورا محدود لاسرسی نلري؛ په دې کوربه توب کې د غوښتنلیک جوړولو لپاره د اجزاو سیټ ګړندي اداره کولو لپاره هیڅ لاره شتون نلري ، د مثال په توګه ، د لید سټوډیو لپاره اضافي وسیلې یا کاري بار نصب کړئ. له همدې امله ، موږ پریکړه وکړه چې د ډاکر عکس جوړونې کې د غوښتنلیک جوړولو لپاره اړین ټولې برخې نصب کړو. که اړتیا وي، تاسو کولی شئ په چټکۍ سره یوازې د ډاکر فایل بدل کړئ او د دې انځور جوړولو لپاره پایپ لاین پیل کړئ.

له تیوري څخه عمل ته

د مثالي ډاکر ملټي سټیج عکس جوړونې کې ، د غوښتنلیک جوړولو لپاره چاپیریال په ورته ډاکر فایل سکریپټ کې چمتو شوی لکه څنګه چې غوښتنلیک پخپله جوړ شوی. مګر زموږ په قضیه کې ، یو منځمهاله لینک اضافه شوی ، د بیلګې په توګه ، د غوښتنلیک رامینځته کولو لپاره اړین هرڅه سره د ډاکر عکس رامینځته کولو لومړني مرحله. دا ترسره شوی و ځکه چې ما غوښتل د ډاکر کیچ فیچر وکاروم ترڅو د ټولو انحصارونو نصب کولو وخت کم کړم.

راځئ چې د دې عکس رامینځته کولو لپاره د ډاکر فایل سکریپټ اصلي ټکي وګورو.

د مختلف OS نسخو عکسونو رامینځته کولو لپاره ، تاسو کولی شئ په ډاکر فایل کې یو دلیل تعریف کړئ چې له لارې یې د نسخې شمیره د جوړولو پرمهال تیریږي ، او دا د اساس عکس ټاګ هم دی.

د مایکروسافټ وینډوز سرور عکس ټاګونو بشپړ لیست موندل کیدی شي دلته.

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

په ډیفالټ کې په لارښوونو کې حکمونه RUN په وینډوز OS کې د ډاکر فایل دننه دوی په 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 - دا د ویژول سټوډیو 2019 لږ وزن لرونکی نسخه ده، کوم چې د کوډ کولو لپاره د اجزاو لږترلږه اړین سیټ لري.
زموږ د C++ پروژې سره په بشپړه توګه کار کولو لپاره، موږ به اضافي اجزاوو ته اړتیا ولرو، یعنې:

  • د کار بار C++ وسیلې
  • Toolset v141
  • وینډوز 10 SDK (10.0.17134.0)

تاسو کولی شئ د JSON ب formatه کې د ترتیب کولو فایل په کارولو سره په اتوماتيک ډول د وسیلو پراخه سیټ نصب کړئ. د تشکیل فایل منځپانګې:

د موجود اجزاو بشپړ لیست د اسنادو په سایټ کې موندل کیدی شي د مایکروسافټ ویډیو سټوډیو.

{
  "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++ غوښتنلیکونو لپاره د بشپړ تالیف چاپیریال رامینځته کولو څرنګوالي په اړه خبرې وکړې او زموږ د غوښتنلیک بشپړ عکسونو رامینځته کولو لپاره د ډاکر ملټي سټیج بلډونو وړتیاو کارولو څرنګوالی.

سرچینه: www.habr.com

Add a comment