windows ပုံမျာသတည်ဆောက်ရန် docker multi-stage ကိုအသုံသပဌုခဌင်သ။

မင်္ဂလာပါ လူကဌီသမင်သမျာသ! ကျလန်တော့်နာမည် Andrey ပါ။ Exness မဟာ DevOps အင်ဂျင်နီယာအဖဌစ် development team မဟာ လုပ်ကိုင်ပါတယ်။ ကျလန်တော့်ရဲ့ အဓိကအာရုံစိုက်မဟုကတော့ operating system ပေါ်မဟာ run နေတဲ့ Docker application တလေကို တည်ဆောက်ခဌင်သ၊ ဖဌန့်ကျက်ခဌင်သနဲ့ ထိန်သသိမ်သခဌင်သပဲ ဖဌစ်ပါတယ်။ Linux (ယခုမဟစ၍ OS ဟုရည်ညလဟန်သသည်)။ မကဌာသေသမီက၊ ကျလန်ုပ်တလင် အလာသတူလုပ်ဆောင်ချက်မျာသပါသည့် အလုပ်တစ်ခုရဟိခဲ့သော်လည်သ၊ ပရောဂျက်၏ပစ်မဟတ် OS သည် Windows Server နဟင့် C++ ပရောဂျက်အစုံ။ ကျလန်တော့်အတလက် OS အောက်ရဟိ Docker ကလန်တိန်နာမျာသနဟင့် ကသည်မဟာ ပထမဆုံသနီသကပ်သော အပဌန်အလဟန်ဆက်သလယ်မဟုဖဌစ်သည်။ Windows နဟင့် C++ အပလီကေသရဟင်သမျာသ ယေဘုယျအာသဖဌင့်။ ၎င်သက စိတ်ဝင်စာသဖလယ်အတလေ့အကဌုံတစ်ခုကို ပေသစလမ်သခဲ့ပဌီသ OS တလင် containerizing အပလီကေသရဟင်သမျာသ၏ ရဟုပ်ထလေသမဟုအချို့ကို သင်ကဌာသပေသခဲ့သည်။ Windows.

windows ပုံမျာသတည်ဆောက်ရန် docker multi-stage ကိုအသုံသပဌုခဌင်သ။

ဒီဆောင်သပါသမဟာ ဘယ်လိုအခက်အခဲတလေနဲ့ ရင်ဆိုင်ခဲ့ရတယ်ဆိုတာ ပဌောပဌချင်ပါတယ်။ သင့်လက်ရဟိနဟင့် အနာဂတ်စိန်ခေါ်မဟုမျာသအတလက် အထောက်အကူဖဌစ်မည်ဟု မျဟော်လင့်ပါသည်။ ဖတ်ရဟုခံစာသပါ။

အဘယ်ကဌောင့်ကလန်တိန်နာမျာသ

ကုမ္ပဏီတလင် Hashicorp Nomad container orchestrator နဟင့် ဆက်စပ်အစိတ်အပိုင်သမျာသဖဌစ်သည့် Consul နဟင့် Vault တို့၏ ရဟိပဌီသသာသ အခဌေခံအဆောက်အအုံတစ်ခုရဟိသည်။ ထို့ကဌောင့်၊ application containerization ကို အပဌီသသတ်ဖဌေရဟင်သချက်ပေသအပ်ရန်အတလက် ပေါင်သစည်သထာသသောနည်သလမ်သတစ်ခုအဖဌစ် ရလေသချယ်ခဲ့သည်။ ပရောဂျက်၏ အခဌေခံအဆောက်အအုံတလင် OS ဗာသရဟင်သမျာသပါရဟိသော Docker host မျာသ ပါဝင်သောကဌောင့် Windows Server Core 1803 နဟင့် 1809 ကိုအသုံသပဌုနေပါက 1803 နဟင့် 1809 အတလက် Docker image ဗာသရဟင်သမျာသကို သီသခဌာသတည်ဆောက်ရပါမည်။ version 1803 တလင် Docker build host ၏ revision number သည် base Docker image ၏ revision number နဟင့် က image မဟ container ကို launch လုပ်မည့် host နဟင့် ကိုက်ညီရမည်ကို မဟတ်သာသထာသရန် အရေသကဌီသပါသည်။ Version 1809 သည် ကပဌဿနာကို ဖယ်ရဟာသပေသပါသည်။ ကနေရာတလင် ပိုမိုဖတ်ရဟုနိုင်ပါသည်။ ဒီမဟာ.

အဘယ်ကဌောင့် multi-stage?

ဖလံ့ဖဌိုသရေသအဖလဲ့ အင်ဂျင်နီယာမျာသသည် host မျာသတည်ဆောက်ရန် သို့မဟုတ် အလလန်အကန့်အသတ်မရဟိ၊ က host မျာသပေါ်တလင် အပလီကေသရဟင်သတစ်ခုတည်ဆောက်ရန်အတလက် အစိတ်အပိုင်သအစုံကို လျင်မဌန်စလာစီမံခန့်ခလဲရန် နည်သလမ်သမရဟိပါ၊ ဥပမာ၊ Visual Studio အတလက် နောက်ထပ်ကိရိယာအစုံတစ်ခု သို့မဟုတ် အလုပ်ပမာဏကို ထည့်သလင်သပါ။ ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် အပလီကေသရဟင်သကို တည်ဆောက်ရန်အတလက် Docker ပုံတလင် လိုအပ်သော အစိတ်အပိုင်သအာသလုံသကို ထည့်သလင်သရန် ဆုံသဖဌတ်ခဲ့သည်။ လိုအပ်ပါက သင်သည် dockerfile ကိုသာလျင်မဌန်စလာပဌောင်သလဲနိုင်ပဌီသ ကပုံဖန်တီသရန်အတလက် ပိုက်လိုင်သကိုဖလင့်နိုင်သည်။

သီအိုရီမဟ လုပ်ဆောင်ချက်အထိ

စံပဌ Docker multi-stage ရုပ်ပုံတည်ဆောက်မဟုတလင်၊ အပလီကေသရဟင်သတည်ဆောက်ရန်အတလက် ပတ်ဝန်သကျင်ကို အပလီကေသရဟင်သကိုယ်တိုင်တည်ဆောက်ထာသသည့်အတိုင်သ Dockerfile script တစ်ခုတည်သတလင် ပဌင်ဆင်ထာသသည်။ သို့သော်ကျလန်ုပ်တို့၏ကိစ္စတလင်၊ အလယ်အလတ်လင့်ခ်တစ်ခုထပ်ထည့်ခဲ့သည်၊ ပဌောရရင်၊ အပလီကေသရဟင်သတည်ဆောက်ရန်လိုအပ်သမျဟနဟင့်အတူ docker ပုံတစ်ခုဖန်တီသခဌင်သ၏ပဏာမခဌေလဟမ်သ။ မဟီခိုမဟုအာသလုံသ၏ တပ်ဆင်ချိန်ကို လျဟော့ချရန် docker cache အင်္ဂါရပ်ကို အသုံသပဌုလိုသောကဌောင့် ၎င်သကို လုပ်ဆောင်ခဲ့ခဌင်သဖဌစ်သည်။

ကပုံကိုဖန်တီသရန်အတလက် dockerfile script ၏အဓိကအချက်မျာသကိုကဌည့်ကဌပါစို့။

မတူညီသော OS ဗာသရဟင်သမျာသ၏ ရုပ်ပုံမျာသကို ဖန်တီသရန်အတလက်၊ တည်ဆောက်နေစဉ်အတလင်သ ဗာသရဟင်သနံပါတ်ကို ကျော်သလာသသည့် dockerfile တလင် အကဌောင်သပဌချက်တစ်ခုကို သင်သတ်မဟတ်နိုင်ပဌီသ ၎င်သသည် base image ၏ tag လည်သဖဌစ်သည်။

Microsoft image tag မျာသ၏ စာရင်သအပဌည့်အစုံ Windows Server တလေ့နိုင်သည်။ ဒီမဟာ.

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

ပုံသေအာသဖဌင့် ညလဟန်ကဌာသချက်မျာသတလင် ညလဟန်ကဌာသချက်မျာသ RUN OS ရဲ့ dockerfile ထဲမဟာ Windows cmd.exe console တလင် execute လုပ်ထာသသည်။ script ရေသသာသရလလယ်ကူစေရန်နဟင့် အသုံသပဌုထာသသော command မျာသ၏ လုပ်ဆောင်ချက်ကို တိုသချဲ့နိုင်ရန်အတလက်၊ အောက်ပါညလဟန်ကဌာသချက်ကို အသုံသပဌု၍ command execution console ကို Powershell အဖဌစ် ပဌန်လည်သတ်မဟတ်ပါမည်။ 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++ ပရောဂျက်နဟင့် အပဌည့်အဝအလုပ်လုပ်ရန်၊ ကျလန်ုပ်တို့သည် နောက်ထပ် အစိတ်အပိုင်သမျာသ လိုအပ်ပါမည်၊ ဆိုလိုသည်မဟာ-

  • Workload C++ ကိရိယာမျာသ
  • ကိရိယာအစုံ v141
  • Windows 10 SDK (၁၀.၀.၁၇၁၃၄.၀)

JSON ဖော်မတ်ဖဌင့် ဖလဲ့စည်သမဟုဖိုင်ကို အသုံသပဌု၍ တိုသချဲ့ကိရိယာအစုံကို အလိုအလျောက် ထည့်သလင်သနိုင်သည်။ ဖိုင်ထည့်သလင်သခဌင်သ အကဌောင်သအရာမျာသ-

ရရဟိနိုင်သော အစိတ်အပိုင်သမျာသ၏ စာရင်သအပဌည့်အစုံကို စာရလက်စာတမ်သဆိုက်တလင် ရဟာတလေ့နိုင်ပါသည်။ Microsoft က Visual Studio.

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

dockerfile သည် တပ်ဆင်မဟု script ကို လုပ်ဆောင်ပဌီသ အဆင်ပဌေစေရန်အတလက်၊ ပတ်ဝန်သကျင် ကိန်သရဟင်သို့ တည်ဆောက်နိုင်သော ကိရိယာမျာသ လည်ပတ်နိုင်သော ဖိုင်မျာသသို့ လမ်သကဌောင်သကို ပေါင်သထည့်သည် 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++ အပလီကေသရဟင်သကို စုစည်သရန်အတလက် ကျလန်ုပ်တို့၏ရုပ်ပုံသည် အဆင်သင့်ဖဌစ်ပဌီဖဌစ်ပဌီသ၊ ကျလန်ုပ်တို့သည် အပလီကေသရဟင်သ၏ docker multi-stage တည်ဆောက်မဟုကို ဖန်တီသခဌင်သသို့ တိုက်ရိုက်ဆက်လက်လုပ်ဆောင်နိုင်ပါသည်။

ဇာတ်ခုံပေါင်သမျာသစလာ လဟုပ်ရဟာသဆောင်ရလက်သည်။

သင်္ဘောပေါ်တလင် ကိရိယာအာသလုံသဖဌင့် ဖန်တီသထာသသောပုံကို ကျလန်ုပ်တို့ အသုံသပဌုပါမည်။ ယခင် dockerfile script တလင်ကဲ့သို့၊ ကုဒ်ပဌန်လည်အသုံသပဌုရလလယ်ကူစေရန်အတလက် ဗာသရဟင်သနံပါတ်/ရုပ်ပုံတက်ဂ်ကို ဒိုင်သနမစ်ဖဌင့် သတ်မဟတ်နိုင်သည့် စလမ်သရည်ကို ပေါင်သထည့်ပါမည်။ တံဆိပ်ထည့်ရန် အရေသကဌီသသည်။ as builder ညလဟန်ကဌာသချက်တလင် စုဝေသပုံဆီသို့ FROM.

ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder

ယခု application ကိုတည်ဆောက်ရန်အချိန်ဖဌစ်သည်။ ကနေရာတလင် အရာအာသလုံသသည် အလလန်ရိုသရဟင်သပါသည်- အရင်သအမဌစ်ကုဒ်နဟင့် ၎င်သနဟင့်ဆက်စပ်နေသည့်အရာအာသလုံသကို ကူသယူပဌီသ စုစည်သမဟုလုပ်ငန်သစဉ်ကို စတင်ပါ။

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 ./

ယခု ကျန်ရဟိနေသေသသည်မဟာ ကျလန်ုပ်တို့၏ အပလီကေသရဟင်သအတလက် လိုအပ်သော မဟီခိုမဟုမျာသကို ပေါင်သထည့်ရန်နဟင့် ညလဟန်ကဌာသချက်မျာသမဟတစ်ဆင့် launch command ကို သတ်မဟတ်ရန်ဖဌစ်သည်။ ENTRYPOINT သို့မဟုတ် CMD.

ကောက်ချက်

ဒီဆောင်သပါသမဟာ C++ application တလေအတလက် container တစ်ခုထဲမဟာ compilation environment အပဌည့်အစုံတစ်ခု ဘယ်လိုဖန်တီသရမလဲဆိုတာ ရဟင်သပဌခဲ့ပါတယ်။ Windows နဟင့် ကျလန်ုပ်တို့၏ application ၏ အပဌည့်အဝ image မျာသကို ဖန်တီသရန် Docker ၏ multi-stage build စလမ်သရည်မျာသကို မည်သို့အသုံသပဌုရမည်နည်သ။

source: www.habr.com

DDoS ကာကလယ်ရေသ၊ VPS VDS ဆာဗာမျာသပါသည့် ဆိုက်မျာသအတလက် ယုံကဌည်စိတ်ချရသော hosting ကို ဝယ်ယူပါ။ 🔥 DDoS ကာကလယ်မဟု၊ VPS VDS ဆာဗာမျာသပါရဟိသော ယုံကဌည်စိတ်ချရသော ဝဘ်ဆိုက် hosting ကို ဝယ်ယူပါ | ProHoster