වින්ඩෝස් රූප තැනීමට ඩොකර් බහු-අදියර භාවිතා කිරීම

ආයුබෝවන් සියල්ලටම! මගේ නම Andrey, මම සංවර්ධන කණ්ඩායමේ Exness හි DevOps ඉංජිනේරුවෙකු ලෙස වැඩ කරමි. මගේ ප්‍රධාන ක්‍රියාකාරකම සම්බන්ධ වන්නේ Linux මෙහෙයුම් පද්ධතිය යටතේ (මෙතැන් සිට OS ලෙස හඳුන්වනු ලැබේ) ඩොකර් තුළ යෙදුම් තැනීම, යෙදවීම සහ සහාය දීමයි. බොහෝ කලකට පෙර මට එකම ක්‍රියාකාරකම් සමඟ කාර්යයක් තිබුණි, නමුත් ව්‍යාපෘතියේ ඉලක්කගත මෙහෙයුම් පද්ධතිය වූයේ Windows Server සහ C++ ව්‍යාපෘති සමූහයකි. මට නම්, මෙය Windows OS යටතේ ඩොකර් බහාලුම් සමඟ සහ සාමාන්‍යයෙන් C++ යෙදුම් සමඟ ඇති පළමු සමීප අන්තර්ක්‍රියාවයි. මෙයට ස්තූතියි, මට සිත්ගන්නාසුලු අත්දැකීමක් ඇති අතර වින්ඩෝස් හි යෙදුම් බහාලුම්කරණයේ සමහර සංකීර්ණතා ගැන ඉගෙන ගතිමි.

වින්ඩෝස් රූප තැනීමට ඩොකර් බහු-අදියර භාවිතා කිරීම

මෙම ලිපියෙන් මට ඔබට පැවසීමට අවශ්‍ය වන්නේ මට මුහුණ දීමට සිදු වූ දුෂ්කරතා සහ ඒවා විසඳීමට මා සමත් වූ ආකාරයයි. ඔබගේ වර්තමාන සහ අනාගත අභියෝග සඳහා මෙය ප්‍රයෝජනවත් වේ යැයි මම බලාපොරොත්තු වෙමි. කියවීම රසවිඳින්න!

ඇයි බහාලුම්?

සමාගම සතුව Hashicorp Nomad බහාලුම් වාද්‍ය වෘන්දය සහ අදාළ සංරචක - කොන්සල් සහ වෝල්ට් සඳහා පවතින යටිතල පහසුකම් ඇත. එබැවින්, සම්පූර්ණ විසඳුමක් ලබා දීම සඳහා ඒකාබද්ධ ක්‍රමයක් ලෙස යෙදුම් බහාලුම් තෝරා ගන්නා ලදී. ව්‍යාපෘති යටිතල පහසුකම් වල Windows Server Core OS අනුවාද 1803 සහ 1809 සමඟ docker hosts අඩංගු වන බැවින්, 1803 සහ 1809 සඳහා docker images වල වෙනම අනුවාද තැනීම අවශ්‍ය වේ. 1803 අනුවාදයේ, build docker host හි සංශෝධන අංකය මතක තබා ගැනීම වැදගත් වේ. පාදක ඩොකර් රූපයේ සංශෝධන අංකය සහ මෙම රූපයේ කන්ටේනරය දියත් කෙරෙන ධාරකය සමඟ ගැළපිය යුතුය. 1809 අනුවාදයේ එවැනි අඩුපාඩුවක් නොමැත. ඔබට තවත් කියවන්න පුළුවන් මෙහි.

බහු-අදියර ඇයි?

සංවර්ධන කණ්ඩායම් ඉංජිනේරුවන්ට ධාරක ගොඩනැගීමට ප්‍රවේශයක් නොමැත හෝ ඉතා සීමිත ප්‍රවේශයක් ඇත; මෙම ධාරකවල යෙදුමක් තැනීම සඳහා සංරචක සමූහය ඉක්මනින් කළමනාකරණය කිරීමට ක්‍රමයක් නොමැත, උදාහරණයක් ලෙස, Visual Studio සඳහා අමතර මෙවලම් කට්ටලයක් හෝ වැඩ බරක් ස්ථාපනය කරන්න. එබැවින්, යෙදුම ගොඩනැගීමට අවශ්‍ය සියලුම සංරචක ගොඩනැගීමේ ඩොකර් රූපයට ස්ථාපනය කිරීමට අපි තීරණය කළෙමු. අවශ්ය නම්, ඔබට ඉක්මනින් ඩොකර් ගොනුව පමණක් වෙනස් කර මෙම රූපය නිර්මාණය කිරීම සඳහා නල මාර්ගය දියත් කළ හැකිය.

න්‍යායේ සිට ක්‍රියාව දක්වා

පරමාදර්ශී ඩොකර් බහු-අදියර රූප ගොඩනැගීමකදී, යෙදුම ගොඩනඟා ගැනීම සඳහා පරිසරය සකස් කර ඇත්තේ යෙදුමම ගොඩනගා ඇති ඩොකර්ෆයිල් ස්ක්‍රිප්ට් එකකය. නමුත් අපගේ නඩුවේදී, අතරමැදි සබැඳියක් එකතු කරන ලදී, එනම්, යෙදුම ගොඩනැගීමට අවශ්‍ය සියල්ල සමඟ ඩොකර් රූපයක් නිර්මාණය කිරීමේ මූලික පියවර. සියලුම පරායත්තතාවයන් ස්ථාපනය කිරීමේ කාලය අඩු කිරීම සඳහා ඩොකර් හැඹිලි විශේෂාංගය භාවිතා කිරීමට මට අවශ්‍ය වූ නිසා මෙය සිදු කරන ලදී.

මෙම රූපය නිර්මාණය කිරීම සඳහා ඩොකර්ෆයිල් ස්ක්‍රිප්ට් හි ප්‍රධාන කරුණු දෙස බලමු.

විවිධ OS අනුවාදවල පින්තූර නිර්මාණය කිරීම සඳහා, ඔබට dockerfile තුළ තර්කයක් නිර්වචනය කළ හැකි අතර එමඟින් අනුවාද අංකය ගොඩනඟන විට සම්මත වන අතර එය මූලික රූපයේ ටැගය ද වේ.

මයික්‍රොසොෆ්ට් වින්ඩෝස් සර්වර් රූප ටැග් වල සම්පූර්ණ ලැයිස්තුවක් සොයාගත හැකිය මෙහි.

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

පෙරනිමියෙන් උපදෙස් වල විධාන RUN Windows OS හි dockerfile තුළ ඒවා cmd.exe කොන්සෝලය තුළ ක්‍රියාත්මක වේ. ස්ක්‍රිප්ට් ලිවීමේ පහසුව සහ භාවිතා කරන විධානවල ක්‍රියාකාරීත්වය පුළුල් කිරීම සඳහා, අපි උපදෙස් හරහා 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++ ව්‍යාපෘතිය සමඟ සම්පුර්ණයෙන් වැඩ කිරීමට, අපට අමතර සංරචක අවශ්‍ය වනු ඇත, එනම්:

  • වැඩ බර C++ මෙවලම්
  • මෙවලම් කට්ටලය v141
  • Windows 10 SDK (10.0.17134.0)

ඔබට 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 ස්ථාපන ස්ක්‍රිප්ට් ධාවනය කරයි, සහ පහසුව සඳහා, පරිසර විචල්‍යයට ක්‍රියාත්මක කළ හැකි ගොනු ගොඩනැගීමේ මෙවලම් වෙත මාර්ගය එක් කරයි. 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++ යෙදුම සම්පාදනය කිරීම සඳහා අපගේ රූපය සුදානම් වන අතර, අපට යෙදුමේ ඩොකර් බහු-අදියර ගොඩනැගීමට කෙලින්ම ඉදිරියට යා හැකිය.

ක්‍රියාවෙහි බහු-අදියර

සියලුම මෙවලම් සමඟ සාදන ලද රූපය අපි ගොඩනැගීමේ රූපයක් ලෙස භාවිතා කරමු. පෙර dockerfile ස්ක්‍රිප්ට් එකේ මෙන්, කේත නැවත භාවිතයේ පහසුව සඳහා අනුවාද අංකය/රූප ටැගය ගතිකව නියම කිරීමේ හැකියාව අපි එක් කරන්නෙමු. ලේබලයක් එකතු කිරීම වැදගත් වේ 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

අදහස් එක් කරන්න