αα½ααααΈβα’αααβααΆααα’ααααααΆ! αααα»αααααα Andrey α αΎααααα»αααααΎααΆαααΆαα·ααααα DevOps αα Exness αααα»ααααα»αα’αα·ααααααα αααααααΆαα αααααααααααα»αααΊααΆααααααΉαααΆααααΆα ααΆαααΆαααααααΆα αα·αααΆαααααααααα·ααΈαα αααα»α docker αααααααααααααααααα·ααααα·ααΆαααΈαα»α (α α ααΆααααΆ OS)α αα·αααΌαααα»ααααΆα αααα»αααΆααα·α αα ααΆααααααΆααααααααΆαααΌα ααααΆ ααα»αααα OS ααααα ααααααααααΊ Windows Server αα·ααααα»ααααααααα C++ α αααααΆαααααα»α αααααΊααΆα’αααααααααα·ααααα·αααααΎαααααΌαααΆαα½α docker containers αα ααααα Windows OS α αΎαααΆααΌαα ααΆαα½αααΉααααααα·ααΈ C++ α α’ααα»αα αααααααα αΆααα αααα»αααΆααααα·ααααααα½αα±ααα αΆααα’αΆαααααααα½α α αΎαααΆααα·ααααΆα’αααΈααΆααααα»αααααααΆααα½αα ααα½ααααααααα·ααΈαααα»ααααα»α Windows α
αα αααα»αα’αααααααα αααα»αα ααααααΆααα’αααααΈααΆαααααΆαααααααα»αααααΌαααααααα»α αα·αααααααααααα»ααααααααααααΎααααΈαααααααΆααα½αααα αααα»ααααααΉαααΆααΆααΆααααααααααααααΆαααααα αΆαααααααΆααααα αα α»αααααα αα·αα’ααΆααααααα’αααα ααΌαααΈαααΆαα’αΆα!
α ααα»α’αααΈααΆαααΆαα»α?
αααα»αα αα»αααΆαα αααααΆαα
ααΆαααααααααααααΆαααααΆαααααααΆαααααα»ααααααααΈαα»αααΊααα Hashicorp Nomad αα·ααααΆαααΆαα»ααΆααααααα - αα»αααα»α αα·ααα»αααα ααΌα
αααα ααΆαβααΆααβαα»αααΊαααβαααααα·ααΈβααααΌαβααΆαβααααΎαααΎαβααΆβαα·ααΈααΆαααααβααααα½αααααα½αβαααααΆααβααΆαβαααααβαααααααααΆαβααααααα αααααΆαα αααααΆαα
ααΆααααααααααααααααααααΆα docker hosts ααΆαα½α Windows Server Core OS αααα 1803 αα·α 1809 ααΆα
αΆαααΆα
αααααΌααααααΎαααααααΆα
ααααα‘ααααααΌαααΆα docker αααααΆαα 1803 αα·α 1809α αα
αααα»ααααα 1803 ααΆααΆααΆαααααΆαααααααααΌαα
αα
αΆαααΆααααααααααα build docker host ααααΌαααααααΌαααααααααααααααααΌαααΆα docker ααΌαααααΆα αα·ααααΆαααΈαααααα»αααΊαααααΈααΌαααΆααααααΉαααααΌαααΆαααΆααα±ααααααΎαααΆαα αααα 1809 αα·αααΆααα»ααα·ααααα·ααααααααα α’αααα’αΆα
α’αΆααααααα
α ααα»α’αααΈααΆαααΆαα α»ααααΆααααΆα?
αα·ααααααααα»αα’αα·αααααααα·αααΆα α¬ααΆαααααα·αααααΆαααααα»αααΆαα αΌαααααΎαααΆααααααΎααααΆαααΈααα ααΆαα·αααΆααα·ααΈααΎααααΈααααααααααααα»ααααααΆαααΆαα»αααααΆαααααααΎααααααα·ααΈαα ααΎαααΆαααΈαααΆαααααααΆαααΆαααα αααα α§ααΆα ααα ααα‘αΎαα§ααααααααααα α¬ααααα»αααΆαααΆααααααΆαα Visual Studio ααΆααΎαα ααΌα ααααα αΎα ααΎαααΆααααααα α α·αααααα‘αΎααααΆαααΆαα»ααΆααα’αααααα αΆαααΆα ααααααΆαααααααΎααααααα·ααΈαα αααα»α build Docker imageα ααΎα αΆαααΆα α α’αααα’αΆα ααααΆααααααΌαααα―αααΆα dockerfile α αΎαααΎαααααΎαααΆαααααααααααΆαααααααΎαααΌαααΆααααα
ααΈααααΉααααΈαα αααααααΆα
αα αααα»αααΆαααααΆαααΆααΌαααΆααα α»ααααΆααααΆα Docker ααααα’ ααα·ααΆααΆααααααΆαααααααΎααααααα·ααΈααααΌαααΆααααα ααααα»αααααααΈα Dockerfile ααΌα ααααΆαα αααααααααααα·ααΈαααα½αααΆααααΌαααΆααααααΎαα‘αΎαα ααα»αααααα αααα»αααααΈααααααΎα αααααααΆααααααα·αααααααα½αααααΌαααΆααααααα αααααΊααα αΆαααααΆααααααΎαααΌαααΆα docker αααααΆαα½αααΉαα’αααΈααααααααΆααααα αΆαααΆα ααααααΆαααααααΎααααααα·ααΈα αααααααΌαααΆαααααΎαααααΆααααααα»αα ααααααΎαα»αααΆα docker cache ααΎααααΈααΆααααααααααααααΆααα‘αΎαααααΆααααΆαα’αΆαααααααΆααα’ααα
ααΌααααα‘ααααΎαα ααα»α ααααΆαααααααααααΈα dockerfile αααααΆααααΆααααααΎαααΌαααΆααααα
ααΎααααΈαααααΎαααΌαααΆααααααα OS ααααααααααΆ α’αααα’αΆα αααααα’αΆαα»ααααααα½ααα αααα»α dockerfile ααααααααααααααΌαααΆαααααααΆααααα‘α»αααααααααΎα α αΎαααΆααααΆααααΆαααααΌαααΆαααΌαααααΆααααααα
αααααΈααααααααααααΆαααΌαααΆααααΆαααΈααα Microsoft Windows α’αΆα ααααΌαααΆαααααΎα
αα ααΈααα .
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'
ααΎααααΈααα‘αΎααααα αααααααααΎααΌααΌα‘αΆ α’αααααααΆααααα’αΆα α α»α αα½αααΆααΆαααααΈαα½α α¬ααα‘αΎαααΆαααααα½αα ααααα·αααΎα’αααααααΌαααΆαααααααΆαααααΆαααΆαααααααα·ααααααααΆαααααα ααααΈαα½ααα αα αααα»αααααΆαααΆαααααααΎα ααΎαααΆαααααΎα―αααΆα manifest ααΆαααααα 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++ ααΊαα½α ααΆααα αΎα α αΎαααΎαα’αΆα αααααααααααΆαααα ααΆααααααΎα docker multi-stage build αααααααα·ααΈα
αααααααΆαα αααΎαααααΆααααΆα
ααΎαααΉαααααΎααΌαααΆααααααΆααααααΎαααΆαα½αααΉαα§αααααααΆααα’αααα
ααΎααααα ααααΆααΌαααΆαααΆαααα ααΌα
αα
αααα»αααααααΈα 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 container αα·αααααααααΎαααααααΆααα docker multi-stage builds ααΎααααΈαααααΎαααΌαααΆααααααααααααααα·ααΈααααααΎαα
ααααα: www.habr.com