ื ืืืื ืืขืืขืจ! ืืืึทื ื ืึธืืขื ืืื ืึทื ืืจืื, ืืื ืืื ืึทืจืืขื ืืื ืึท ืืขืืืึธืคึผืก ืื ืืฉืขื ืืจ ืืื ืขืงืกื ืขืกืก ืืื ืืขืจ ืึทื ืืืืืงืืื ื ืืึทื ืฉืึทืคึฟื. ืืืึทื ืืืืคึผื ืืขืืืงืืื ืืื ืฉืืื ืฆื ืืืืขื, ืืืคึผืืืืื ื ืืื ืฉืืืฆื ืึทืคึผืืึทืงืืืฉืึทื ื ืืื ืืึธืงืงืขืจ ืืื ืืขืจ ืื ืืื ืืงืก ืึธืคึผืขืจืืืืื ื ืกืืกืืขื (ืืขืจื ืึธื ืจืืคืขืจื ืฆื ืืื ืื ืึทืก). ื ืื ืืึทื ื ืฆืืจืืง ืืื ืืขืืื ืึท ืึทืจืืขื ืืื ืื ืืขืืืข ืึทืงืืืืืืืขืื, ืึธืืขืจ ืื ืฆืื ืึทืก ืคืื ืื ืคึผืจืืืขืงื ืืื ืืขืืืขื 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