விண்டோஸ் படங்களை உருவாக்க டாக்கர் பல-நிலைகளைப் பயன்படுத்துதல்

அனைவருக்கும் வணக்கம்! எனது பெயர் ஆண்ட்ரே, நான் டெவலப்மெண்ட் குழுவில் Exness இல் DevOps பொறியாளராக பணிபுரிகிறேன். எனது முக்கிய செயல்பாடு லினக்ஸ் இயக்க முறைமையின் கீழ் (இனி OS என குறிப்பிடப்படுகிறது) டோக்கரில் பயன்பாடுகளை உருவாக்குதல், வரிசைப்படுத்துதல் மற்றும் ஆதரித்தல் தொடர்பானது. நீண்ட காலத்திற்கு முன்பு எனக்கு அதே செயல்பாடுகளுடன் ஒரு பணி இருந்தது, ஆனால் திட்டத்தின் இலக்கு OS விண்டோஸ் சர்வர் மற்றும் சி++ திட்டங்களின் தொகுப்பாகும். என்னைப் பொறுத்தவரை, இது Windows OS இன் கீழ் டோக்கர் கொள்கலன்களுடனும், பொதுவாக, C++ பயன்பாடுகளுடனும் முதல் நெருக்கமான தொடர்பு. இதற்கு நன்றி, நான் ஒரு சுவாரஸ்யமான அனுபவத்தைப் பெற்றேன் மற்றும் விண்டோஸில் உள்ள கன்டெய்னரைசிங் பயன்பாடுகளின் சில நுணுக்கங்களைப் பற்றி அறிந்துகொண்டேன்.

விண்டோஸ் படங்களை உருவாக்க டாக்கர் பல-நிலைகளைப் பயன்படுத்துதல்

இந்த கட்டுரையில் நான் என்ன சிரமங்களை எதிர்கொண்டேன், அவற்றை எவ்வாறு தீர்க்க முடிந்தது என்பதை நான் உங்களுக்கு சொல்ல விரும்புகிறேன். உங்கள் தற்போதைய மற்றும் எதிர்கால சவால்களுக்கு இது உதவியாக இருக்கும் என்று நம்புகிறேன். படித்து மகிழுங்கள்!

ஏன் கொள்கலன்கள்?

நிறுவனம் ஹாஷிகார்ப் நோமட் கன்டெய்னர் ஆர்கெஸ்ட்ரேட்டருக்கான உள்கட்டமைப்பு மற்றும் தொடர்புடைய கூறுகள் - கன்சல் மற்றும் வால்ட் ஆகியவற்றைக் கொண்டுள்ளது. எனவே, ஒரு ஆயத்த தயாரிப்பு தீர்வை வழங்குவதற்கான ஒரு ஒருங்கிணைந்த முறையாக பயன்பாட்டு கொள்கலன் தேர்வு செய்யப்பட்டது. திட்ட உள்கட்டமைப்பு விண்டோஸ் சர்வர் கோர் ஓஎஸ் பதிப்புகள் 1803 மற்றும் 1809 உடன் டாக்கர் ஹோஸ்ட்களைக் கொண்டிருப்பதால், 1803 மற்றும் 1809க்கான டோக்கர் படங்களின் தனிப் பதிப்புகளை உருவாக்குவது அவசியம். பதிப்பு 1803 இல், பில்ட் டோக்கர் ஹோஸ்டின் திருத்த எண் என்பதை நினைவில் கொள்வது அவசியம். பேஸ் டோக்கர் படத்தின் திருத்த எண் மற்றும் இந்தப் படத்திலிருந்து கண்டெய்னர் தொடங்கப்படும் ஹோஸ்டுடன் பொருந்த வேண்டும். பதிப்பு 1809 இல் அத்தகைய குறைபாடு இல்லை. நீங்கள் மேலும் படிக்கலாம் இங்கே.

ஏன் பல கட்டங்கள்?

டெவலப்மெண்ட் டீம் இன்ஜினியர்களுக்கு ஹோஸ்ட்களை உருவாக்குவதற்கான அணுகல் இல்லை அல்லது மிகக் குறைந்த அணுகல் இல்லை; இந்த ஹோஸ்ட்களில் ஒரு பயன்பாட்டை உருவாக்குவதற்கான கூறுகளின் தொகுப்பை விரைவாக நிர்வகிக்க வழி இல்லை, எடுத்துக்காட்டாக, விஷுவல் ஸ்டுடியோவிற்கு கூடுதல் கருவித்தொகுப்பு அல்லது பணிச்சுமையை நிறுவவும். எனவே, பில்ட் டோக்கர் படத்தில் பயன்பாட்டை உருவாக்க தேவையான அனைத்து கூறுகளையும் நிறுவ முடிவு செய்துள்ளோம். தேவைப்பட்டால், நீங்கள் விரைவாக டாக்கர்ஃபைலை மட்டும் மாற்றி, இந்தப் படத்தை உருவாக்குவதற்கான பைப்லைனைத் தொடங்கலாம்.

கோட்பாட்டிலிருந்து செயல் வரை

ஒரு சிறந்த டோக்கர் மல்டி-ஸ்டேஜ் இமேஜ் பில்டில், அப்ளிகேஷனை உருவாக்குவதற்கான சூழல், அப்ளிகேஷன் கட்டமைக்கப்பட்ட அதே டாக்கர்ஃபைல் ஸ்கிரிப்டில் தயாரிக்கப்படுகிறது. ஆனால் எங்கள் விஷயத்தில், ஒரு இடைநிலை இணைப்பு சேர்க்கப்பட்டது, அதாவது, பயன்பாட்டை உருவாக்க தேவையான அனைத்தையும் கொண்ட ஒரு டாக்கர் படத்தை உருவாக்கும் ஆரம்ப கட்டம். அனைத்து சார்புகளின் நிறுவல் நேரத்தை குறைக்க நான் டோக்கர் கேச் அம்சத்தைப் பயன்படுத்த விரும்பியதால் இது செய்யப்பட்டது.

இந்தப் படத்தை உருவாக்குவதற்கான டாக்கர்ஃபைல் ஸ்கிரிப்ட்டின் முக்கிய புள்ளிகளைப் பார்ப்போம்.

வெவ்வேறு OS பதிப்புகளின் படங்களை உருவாக்க, நீங்கள் dockerfile இல் ஒரு வாதத்தை வரையறுக்கலாம், இதன் மூலம் உருவாக்கத்தின் போது பதிப்பு எண் அனுப்பப்படும், மேலும் இது அடிப்படை படத்தின் குறிச்சொல்லாகும்.

மைக்ரோசாஃப்ட் விண்டோஸ் சர்வர் படக் குறிச்சொற்களின் முழுமையான பட்டியலைக் காணலாம் இங்கே.

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

முன்னிருப்பாக வழிமுறைகளில் உள்ள கட்டளைகள் RUN Windows OS இல் உள்ள dockerfile இன் உள்ளே அவை 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 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++ கருவிகள்
  • கருவித்தொகுப்பு 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"
  ]
}

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.

முடிவுக்கு

இந்த கட்டுரையில், விண்டோஸின் கீழ் ஒரு கொள்கலனுக்குள் சி ++ பயன்பாடுகளுக்கான முழு அளவிலான தொகுப்பு சூழலை எவ்வாறு உருவாக்குவது மற்றும் எங்கள் பயன்பாட்டின் முழு அளவிலான படங்களை உருவாக்க டாக்கர் பல-நிலை உருவாக்கங்களின் திறன்களை எவ்வாறு பயன்படுத்துவது என்பது பற்றி பேசினேன்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்