ื ื™ืฆืŸ ื“ืึธืงืงืขืจ ืžื•ืœื˜ื™-ื‘ื™ื ืข ืฆื• ื‘ื•ื™ืขืŸ ืคึฟืขื ืฆื˜ืขืจ ื‘ื™ืœื“ืขืจ

ื ื’ื•ื˜ืŸ ื™ืขื“ืขืจ! ืžื™ื™ึทืŸ ื ืึธืžืขืŸ ืื™ื– ืึทื ื“ืจื™ื™, ืื•ืŸ ืื™ืš ืึทืจื‘ืขื˜ ื•ื•ื™ ืึท ื“ืขื•ื•ืึธืคึผืก ื™ื ื–ืฉืขื ื™ืจ ืื™ืŸ ืขืงืกื ืขืกืก ืื™ืŸ ื“ืขืจ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืžืึทื ืฉืึทืคึฟื˜. ืžื™ื™ึทืŸ ื”ื•ื™ืคึผื˜ ื˜ืขื˜ื™ืงื™ื™ื˜ ืื™ื– ืฉื™ื™ืš ืฆื• ื‘ื•ื™ืขืŸ, ื“ื™ืคึผืœื•ื™ื™ื ื’ ืื•ืŸ ืฉื˜ื™ืฆืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื™ืŸ ื“ืึธืงืงืขืจ ืื•ื ื˜ืขืจ ื“ื™ ืœื™ื ื•ืงืก ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขื (ื“ืขืจื ืึธืš ืจื™ืคืขืจื“ ืฆื• ื•ื•ื™ ื“ื™ ืึทืก). ื ื™ื˜ ืœืึทื ื’ ืฆื•ืจื™ืง ืื™ืš ื’ืขื”ืื˜ ืึท ืึทืจื‘ืขื˜ ืžื™ื˜ ื“ื™ ื–ืขืœื‘ืข ืึทืงื˜ื™ื•ื•ื™ื˜ืขื˜ืŸ, ืึธื‘ืขืจ ื“ื™ ืฆื™ืœ ืึทืก ืคื•ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ืื™ื– ื’ืขื•ื•ืขืŸ Windows Server ืื•ืŸ ืึท ืกื›ื•ื ืคื•ืŸ C ++ ืคึผืจืึทื“ื–ืฉืขืงืก. ืคึฟืึทืจ ืžื™ืจ, ื“ืึธืก ืื™ื– ื’ืขื•ื•ืขืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ื ืึธืขื ื˜ ื™ื ื˜ืขืจืึทืงืฉืึทืŸ ืžื™ื˜ ื“ืึธืงืงืขืจ ืงืึทื ื˜ื™ื™ื ืขืจื– ืื•ื ื˜ืขืจ Windows ืึทืก ืื•ืŸ, ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ืžื™ื˜ C ++ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–. ื“ืึทื ืง ืฆื• ื“ืขื, ืื™ืš ื”ืื˜ ืึท ื˜ืฉื™ืงืึทื•ื•ืข ื“ืขืจืคืึทืจื•ื ื’ ืื•ืŸ ื’ืขืœืขืจื ื˜ ื•ื•ืขื’ืŸ ืขื˜ืœืขื›ืข ื™ื ื˜ืจืึทืงืึทืกื™ื– ืคื•ืŸ ืงืึทื ื˜ืึทืžืึทื ื™ื™ื–ื™ื ื’ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื™ืŸ Windows.

ื ื™ืฆืŸ ื“ืึธืงืงืขืจ ืžื•ืœื˜ื™-ื‘ื™ื ืข ืฆื• ื‘ื•ื™ืขืŸ ืคึฟืขื ืฆื˜ืขืจ ื‘ื™ืœื“ืขืจ

ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืื™ืš ื•ื•ื™ืœืŸ ืฆื• ื–ืึธื’ืŸ ืื™ืจ ื•ื•ืึธืก ืฉื•ื•ืขืจื™ืงื™ื™ื˜ืŸ ืื™ืš ื’ืขื”ืื˜ ืฆื• ืคึผื ื™ื ืื•ืŸ ื•ื•ื™ ืื™ืš ื’ืขืจืื˜ืŸ ืฆื• ืกืึธืœื•ื•ืข ื–ื™ื™. ืื™ืš ื”ืึธืคึฟืŸ ื“ืึธืก ืื™ื– ื ื•ืฆื™ืง ืคึฟืึทืจ ื“ื™ื™ืŸ ืงืจืึทื ื˜ ืื•ืŸ ืฆื•ืงื•ื ืคึฟื˜ ื˜ืฉืึทืœืึทื ื“ื–ืฉื™ื–. ื”ื ืื” ืœื™ื™ืขื ืขืŸ!

ืคืืจื•ื•ืืก ืงืึทื ื˜ื™ื™ื ืขืจื–?

ื“ื™ ืคื™ืจืžืข ื”ืื˜ ื™ื’ื–ื™ืกื˜ื™ื ื’ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืคึฟืึทืจ ื“ื™ Hashicorp Nomad ืงืึทื ื˜ื™ื™ื ืขืจ ืึธืจืงืขืกื˜ืจืึทื˜ืึธืจ ืื•ืŸ ืคึฟืึทืจื‘ื•ื ื“ืขื ืข ืงืึทืžืคึผืึธื•ื ืึทื ืฅ - ืงืึธื ืกื•ืœ ืื•ืŸ ื•ื•ืึธืœื˜. ื“ืขืจื™ื‘ืขืจ, ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืึทื ื˜ื™ื™ื ืขืจื™ื–ืึทื˜ื™ืึธืŸ ืื™ื– ืื•ื™ืกื“ืขืจื•ื•ื™ื™ืœื˜ ื•ื•ื™ ืึท ื™ื•ื ืึทืคื™ื™ื“ ืื•ืคึฟืŸ ืคึฟืึทืจ ื“ืขืœื™ื•ื•ืขืจื™ื ื’ ืึท ื’ืึทื ืฅ ืœื™ื™ื–ื•ื ื’. ื–ื™ื ื˜ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื›ึผื•ืœืœ ื“ืึธืงืงืขืจ ื”ืึธืกืฅ ืžื™ื˜ Windows Server Core OS ื•ื•ืขืจืกื™ืขืก 1803 ืื•ืŸ 1809, ืขืก ืื™ื– ื ื™ื™ื˜ื™ืง ืฆื• ื‘ื•ื™ืขืŸ ื‘ืึทื–ื•ื ื“ืขืจ ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ื“ืึธืงืงืขืจ ื‘ื™ืœื“ืขืจ ืคึฟืึทืจ 1803 ืื•ืŸ 1809. ืื™ืŸ ื•ื•ืขืจืกื™ืข 1803, ืขืก ืื™ื– ื•ื•ื™ื›ื˜ื™ืง ืฆื• ื’ืขื“ืขื ืงืขืŸ ืึทื– ื“ื™ ืจืขื•ื•ื™ื–ื™ืข ื ื•ืžืขืจ ืคื•ืŸ ื“ื™ ื‘ื•ื™ืขืŸ ื“ืึธืงืงืขืจ ื‘ืึทืœืขื‘ืึธืก. ืžื•ื–ืŸ ื’ืœื™ื™ึทื›ืŸ ื“ื™ ืจืขื•ื•ื™ื–ื™ืข ื ื•ืžืขืจ ืคื•ืŸ ื“ื™ ื‘ืึทื–ืข ื“ืึธืงืงืขืจ ื‘ื™ืœื“ ืื•ืŸ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ื•ื•ื• ื“ืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ ืคื•ืŸ ื“ืขื ื‘ื™ืœื“ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืœืึธื ื˜ืฉื˜. ื•ื•ืขืจืกื™ืข 1809 ื”ืื˜ ื ื™ื˜ ืึทื–ืึท ืฉื˜ืขืจื•ื ื’. ืื™ืจ ืงืขื ื˜ ืœื™ื™ืขื ืขืŸ ืžืขืจ ื“ืึธ.

ืคืืจื•ื•ืืก ืžื•ืœื˜ื™-ื‘ื™ื ืข?

ืื ื˜ื•ื•ื™ืงืœื•ื ื’ ืžืึทื ืฉืึทืคึฟื˜ ืขื ื“ื–ืฉืึทื ื™ืจื– ื”ืึธื‘ืŸ ืงื™ื™ืŸ ืึธื“ืขืจ ื–ื™ื™ืขืจ ืœื™ืžื™ื˜ืขื“ ืึทืงืกืขืก ืฆื• ื‘ื•ื™ืขืŸ ืžื—ื ื•ืช; ืขืก ืื™ื– ืงื™ื™ืŸ ื•ื•ืขื’ ืฆื• ื’ืขืฉื•ื•ื™ื ื“ ืคื™ืจืŸ ื“ื™ ื’ืึทื ื’ ืคื•ืŸ ืงืึทืžืคึผืึธื•ื ืึทื ืฅ ืคึฟืึทืจ ื‘ื•ื™ืขืŸ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ื™ืฃ ื“ื™ ืžื—ื ื•ืช, ืœืžืฉืœ, ื™ื ืกื˜ืึทืœื™ืจืŸ ืึทืŸ ื ืึธืš ืžื›ืฉื™ืจื™ื ืึธื“ืขืจ ื•ื•ืขืจืงืœืึธื•ื“ ืคึฟืึทืจ ื•ื•ื™ืกื•ืึทืœ ืกื˜ื•ื“ื™ืึธ. ื“ืขืจื™ื‘ืขืจ, ืžื™ืจ ื”ืึธื‘ืŸ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ ืึทืœืข ื“ื™ ืงืึทืžืคึผืึธื•ื ืึทื ืฅ ื ื™ื™ื˜ื™ืง ืฆื• ื‘ื•ื™ืขืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ืŸ ื“ื™ ื‘ื™ืœื“ ื“ืึธืงืงืขืจ ื‘ื™ืœื“. ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง, ืื™ืจ ืงืขื ืขืŸ ื’ืขืฉื•ื•ื™ื ื“ ื˜ื•ื™ืฉืŸ ื‘ืœื•ื™ื– ื“ื™ ื“ืึธืงืขืจ ื˜ืขืงืข ืื•ืŸ ืงืึทื˜ืขืจ ื“ื™ ืจืขืจื  - ืœื™ื ื™ืข ืคึฟืึทืจ ืงืจื™ื™ื™ื˜ื™ื ื’ ื“ืขื ื‘ื™ืœื“.

ืคื•ืŸ ื˜ืขืึธืจื™ืข ืฆื• ืงืึทืžืฃ

ืื™ืŸ ืึทืŸ ืื™ื“ืขืืœ ื“ืึธืงืงืขืจ ืžืึทืœื˜ื™-ื‘ื™ื ืข ื‘ื™ืœื“ ื‘ื•ื™ืขืŸ, ื“ื™ ืกื•ื•ื™ื•ื•ืข ืคึฟืึทืจ ื‘ื ื™ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ืฆื•ื’ืขื’ืจื™ื™ื˜ ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ Dockerfile ืฉืจื™ืคื˜ ื•ื•ื™ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื–ื™ืš ืื™ื– ื’ืขื‘ื•ื™ื˜. ืื‘ืขืจ ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ, ืึท ื™ื ื˜ืขืจืžื™ื“ื™ื™ื˜ ืœื™ื ืง ืื™ื– ืฆื•ื’ืขื’ืขื‘ืŸ, ื ื™ื™ืžืœื™, ื“ืขืจ ืฉืจื™ื˜ ืคื•ืŸ ืคึผืจื™ืœื™ืžืึทื ืขืจื™ ืงืจื™ื™ื™ื˜ื™ื ื’ ืึท ื“ืึธืงืงืขืจ ื‘ื™ืœื“ ืžื™ื˜ ืึทืœืฅ ื ื™ื™ื˜ื™ืง ืฆื• ื‘ื•ื™ืขืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ. ื“ืึธืก ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืขื˜ืืŸ ื•ื•ื™ื™ึทืœ ืื™ืš ื’ืขื•ื•ืืœื˜ ืฆื• ื ื•ืฆืŸ ื“ื™ ื“ืึธืงืงืขืจ ืงืึทืฉ ืฉื˜ืจื™ืš ืฆื• ืจืขื“ื•ืฆื™ืจืŸ ื“ื™ ื™ื™ึทื ืžืึธื ื˜ื™ืจื•ื ื’ ืฆื™ื™ื˜ ืคื•ืŸ ืึทืœืข ื“ื™ืคึผืขื ื“ืึทื ืกื™ื–.

ื–ืืœ ืก ืงื•ืง ืื™ืŸ ื“ื™ ื”ื•ื™ืคึผื˜ ืคื•ื ืงื˜ืŸ ืคื•ืŸ ื“ื™ dockerfile ืฉืจื™ืคื˜ ืคึฟืึทืจ ืงืจื™ื™ื™ื˜ื™ื ื’ ื“ืขื ื‘ื™ืœื“.

ืฆื• ืฉืึทืคึฟืŸ ื‘ื™ืœื“ืขืจ ืคื•ืŸ ืคืึทืจืฉื™ื“ืขื ืข ืึทืก ื•ื•ืขืจืกื™ืขืก, ืื™ืจ ืงืขื ืขืŸ ื“ืขืคื™ื ื™ืจืŸ ืึทืŸ ืึทืจื’ื•ืžืขื ื˜ ืื™ืŸ ื“ื™ ื“ืึธืงืขืจ ื˜ืขืงืข ื“ื•ืจืš ื•ื•ืึธืก ื“ื™ ื•ื•ืขืจืกื™ืข ื ื•ืžืขืจ ืื™ื– ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ื‘ืขืฉืึทืก ื“ื™ ื‘ื•ื™ืขืŸ, ืื•ืŸ ืขืก ืื™ื– ืื•ื™ืš ื“ื™ ืงื•ื•ื™ื˜ืœ ืคื•ืŸ ื“ื™ ื‘ืึทื–ืข ื‘ื™ืœื“.

ื ื’ืึทื ืฅ ืจืฉื™ืžื” ืคื•ืŸ Microsoft Windows Server ื‘ื™ืœื“ ื˜ืึทื’ืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืคึฟื•ื ืขืŸ ื“ืึธ.

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

ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜ ื“ื™ ืงืึทืžืึทื ื“ื– ืื™ืŸ ื“ื™ ื™ื ืกื˜ืจืึทืงืฉืึทื ื– RUN ืื™ืŸ ื“ื™ dockerfile ืื•ื™ืฃ Windows OS ื–ื™ื™ ื–ืขื ืขืŸ ืขืงืกืึทืงื™ื•ื˜ืึทื“ ืื™ืŸ ื“ื™ 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 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 ++ ืžื›ืฉื™ืจื™ื
  • ืžื›ืฉื™ืจื™ื ื•ื•141
  • 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"
  ]
}

ื“ื™ ื“ืึธืงืขืจืคื™ืœืข ืœื•ื™ืคื˜ ื“ื™ ื™ื™ึทื ืžืึธื ื˜ื™ืจื•ื ื’ ืฉืจื™ืคื˜, ืื•ืŸ ืคึฟืึทืจ ืงืึทื ื•ื•ื™ื ื™ืึทื ืก, ืžื•ืกื™ืฃ ื“ื™ ื•ื•ืขื’ ืฆื• ื“ื™ ื‘ื•ื™ืขืŸ ืžื›ืฉื™ืจื™ื ืขืงืกืขืงื•ื˜ืึทื‘ืœืข ื˜ืขืงืขืก ืฆื• ื“ื™ ืกื•ื•ื™ื•ื•ืข ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง 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 ++ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื™ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ืื•ื ื˜ืขืจ Windows ืื•ืŸ ื•ื•ื™ ืฆื• ื ื•ืฆืŸ ื“ื™ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืคื•ืŸ ื“ืึธืงืงืขืจ ืžื•ืœื˜ื™-ื‘ื™ื ืข ื‘ื•ื™ืขืŸ ืฆื• ืฉืึทืคึฟืŸ ืคื•ืœ-ืคืœืขื“ื–ืฉื“ ื‘ื™ืœื“ืขืจ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’