ืฉืืื ืืืืื! ืฉืื ืื ืืจืื, ืืื ื ืขืืื ืืืื ืืก DevOps ืืฆืืืช ืืคืืชืื ืฉื Exness. ืืืืงื ืืขืืงืจื ืฉืื ืืื ืื ืืื, ืคืจืืกื ืืชืืืืงื ืฉื ืืืฉืืื Docker ืืคืืขืืื ืขื ืืขืจืืช ืืืคืขืื. Linux (ืืืื ืืขืจืืช ืืคืขืื). ืื ืืืื, ืืืืชื ืื ืืฉืืื ืขื ืืืชื ืคืขืืืืืืช, ืื ืืขืจืืช ืืืคืขืื ืฉื ืืืขื ืฉื ืืคืจืืืงื ืืคืื ื... Windows Server ืืงืืืฆื ืฉื ืคืจืืืงืืื ื-C++. ืขืืืจื, ืื ืืืืชื ืืืื ืืจืืงืฆืื ืืงืจืืื ืืจืืฉืื ื ืฉืื ืขื ืงืื ืืืื ืจืื ืฉื Docker ืชืืช ืืขืจืืช ืืคืขืื. Windows ืืืืฉืืื C++ ืืืืคื ืืืื. ืื ื ืชื ืื ืืืืื ืืขื ืืื ืช ืืืืื ืืืชื ืืื ืืืืืจืืืืืืช ืฉื ืืฆืืจืช ืืืฉืืืื ืืงืื ืืืื ืจืื ืืืขืจืืช ืืืคืขืื. Windows.

ืืืืืจ ืื ืื ื ืจืืฆื ืืกืคืจ ืืื ืขื ืืืื ืงืฉืืื ื ืืืฆืชื ืืืชืืืื ืืืื ืืฆืืืชื ืืคืชืืจ ืืืชื. ืื ื ืืงืืื ืฉืื ืืืขืื ืขืืืจ ืืืชืืจืื ืื ืืืืืื ืืืขืชืืืืื ืฉืื. ืงืจืืื ืืื ื!
ืืื ืืืืืืช?
ืืืืจื ืชืฉืชืืช ืงืืืืช ืฉื Hashicorp Nomad container orchestrator ืืจืืืืื ืงืฉืืจืื - Consul ื-Vault. ืืื, ื ืืืจื ืืคืืืงืฆืื ืืืืฆืขืืช ืงืื ืืืื ืจืืืฆืื ืืฉืืื ืืืืืืช ืืืกืคืงืช ืืคืชืจืื ืืืืืืจ. ืืืืืื ืฉืชืฉืชืืช ืืคืจืืืงื ืืืืืช ืืืจืื Docker ืขื ืืจืกืืืช OS Windows Server ืื ืืชื ืืฉืชืืฉืื ื-Core 1803 ื-1809, ืขืืืื ืืื ืืช ืืจืกืืืช ื ืคืจืืืช ืฉื ืชืืื ืช Docker ืขืืืจ 1803 ื-1809. ืืืจืกื 1803, ืืฉืื ืืืืืจ ืฉืืกืคืจ ืืืจืกื ืฉื ืืืจื ืืื ืืื ืฉื Docker ืืืื ืืืชืืื ืืืกืคืจ ืืืจืกื ืฉื ืชืืื ืช ืืืกืืก ืฉื Docker ืืืืืจื ืฉืื ืืืคืขื ืืืืืื ืืชืืื ื ืื. ืืจืกื 1809 ืืืืืช ืืขืื ืื. ืชืืืื ืืงืจืื ืขืื ืขื ืื ืืื. .
ืืื ืจื ืฉืืื?
ืืืื ืืกื ืฆืืืช ืืคืืชืื ืืื ืืืฉื ืื ืืืืืืช ืืืื ืืื ืืืช ืืืจืืื; ืืื ืืจื ืื ืื ืืืืืจืืช ืืช ืกื ืืจืืืืื ืืื ืืืช ืืคืืืงืฆืื ืขื ืืืจืืื ืืื, ืืืฉื, ืืชืงื ืช ืขืจืืช ืืืื ื ืืกืคืช ืื ืขืืืก ืขืืืื ืขืืืจ Visual Studio. ืืื, ืงืืืื ื ืืช ืืืืืื ืืืชืงืื ืืช ืื ืืจืืืืื ืืืจืืฉืื ืืื ืืืช ืืืคืืืงืฆืื ืืชืืื ืช ื-build Docker. ืืืืืช ืืฆืืจื, ืืชื ืืืื ืืฉื ืืช ืืืืืจืืช ืจืง ืืช ื-docerfile ืืืืคืขืื ืืช ืืฆืื ืืจ ืืืฆืืจืช ืชืืื ื ืื.
ืืืชืืืืจืื ืืคืขืืื
ืืื ืืืช ืชืืื ื ืืืืืืืืช ืฉื Docker ืืจืืื-ืฉืืืื, ืืกืืืื ืืื ืืืช ืืืคืืืงืฆืื ืืืื ื ืืืืชื ืกืงืจืืคื Dockerfile ืฉืื ื ืื ืืช ืืืคืืืงืฆืื ืขืฆืื. ืืื ืืืงืจื ืฉืื ื, ื ืืกืฃ ืงืืฉืืจ ืืื ืืื, ืืืืืจ, ืืฉืื ืฉื ืืฆืืจื ืจืืฉืื ืืช ืฉื ืชืืื ืช docker ืขื ืื ืืืจืืฉ ืืื ืืืช ืืืคืืืงืฆืื. ืื ื ืขืฉื ืืืื ืฉืจืฆืืชื ืืืฉืชืืฉ ืืชืืื ืช ืืืืื docker ืืื ืืืคืืืช ืืช ืืื ืืืชืงื ื ืฉื ืื ืืชืืืช.
ืืืื ื ืกืชืื ืขื ืื ืงืืืืช ืืขืืงืจืืืช ืฉื ืืกืงืจืืคื dockerfile ืืืฆืืจืช ืชืืื ื ืื.
ืืื ืืืฆืืจ ืชืืื ืืช ืฉื ืืจืกืืืช ืืขืจืืช ืืคืขืื ืฉืื ืืช, ื ืืชื ืืืืืืจ ืืจืืืื ื ื-docerfile ืฉืืจืื ืืืขืืจ ืืกืคืจ ืืืจืกื ืืืืื ืืื ืืื, ืืืื ืื ืืชื ืฉื ืชืืื ืช ืืืกืืก.
ืจืฉืืื ืืืื ืฉื ืชืื ืชืืื ืืช ืฉื ืืืงืจืืกืืคื Windows Server ืืืื ืืืฆืื .
ARG WINDOWS_OS_VERSION=1809
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION
ืืืจืืจืช ืืืื ืืคืงืืืืช ืืืืจืืืช RUN ืืชืื ืงืืืฅ ื-dockerfile ืืืขืจืืช ืืืคืขืื Windows ืืืืฆืขืืช ืืงืื ืกืืืช 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 ืขืจืืช ืคืืชืื ืชืืื ื (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"
]
}
ื-docerfile ืืจืืฅ ืืช ืกืงืจืืคื ืืืชืงื ื, ืืืืขื ืื ืืืืช, ืืืกืืฃ ืืช ืื ืชืื ืืงืืฆื ืืืคืขืื ืฉื ืืื ืืื ืืื ืืืฉืชื ื ืืกืืืื 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 ืืืืฆื ืืืฉืชืืฉ ืืืืืืืช ืืื ืืื ืืจื-ืฉืืืืืช ืฉื Docker ืืื ืืืฆืืจ ืชืืื ืืช ืืืืืช ืฉื ืืืคืืืงืฆืื ืฉืื ื.
ืืงืืจ: www.habr.com
