ΠΠ΄ΡΠ°Π²ΠΎ Π½Π° ΡΠΈΡΠ΅! ΠΠΎΠ΅ΡΠΎ ΠΈΠΌΠ΅ Π΅ ΠΠ½Π΄ΡΠ΅Ρ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΠΌ ΠΊΠ°ΠΊΠΎ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ Π·Π° DevOps Π²ΠΎ Exness Π²ΠΎ ΡΠΈΠΌΠΎΡ Π·Π° ΡΠ°Π·Π²ΠΎΡ. ΠΠΎΡΠ°ΡΠ° Π³Π»Π°Π²Π½Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ Π΅ ΠΏΠΎΠ²ΡΠ·Π°Π½Π° ΡΠΎ Π³ΡΠ°Π΄Π΅ΡΠ΅, ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π²ΠΎ docker ΠΏΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ Linux (Π²ΠΎ Π½Π°ΡΠ°ΠΌΠΎΡΠ½ΠΈΠΎΡ ΡΠ΅ΠΊΡΡ ΠΠ‘). ΠΠ΅ ΡΠ°ΠΊΠ° ΠΎΠ΄Π°ΠΌΠ½Π° ΠΈΠΌΠ°Π² Π·Π°Π΄Π°ΡΠ° ΡΠΎ ΠΈΡΡΠΈΡΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, Π½ΠΎ ΡΠ΅Π»Π½ΠΈΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½ ΡΠΈΡΡΠ΅ΠΌ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ Π±Π΅ΡΠ΅ Windows Server ΠΈ ΡΠ΅Ρ ΠΎΠ΄ C++ ΠΏΡΠΎΠ΅ΠΊΡΠΈ. ΠΠ° ΠΌΠ΅Π½Π΅, ΠΎΠ²Π° Π±Π΅ΡΠ΅ ΠΏΡΠ²Π° Π±Π»ΠΈΡΠΊΠ° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ° ΡΠΎ Π΄ΠΎΠΊΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ ΠΏΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ Windows ΠΈ, Π³Π΅Π½Π΅ΡΠ°Π»Π½ΠΎ, ΡΠΎ C++ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ²Π°, ΠΈΠΌΠ°Π² ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΠΈΡΠΊΡΡΡΠ²ΠΎ ΠΈ Π΄ΠΎΠ·Π½Π°Π² Π·Π° Π½Π΅ΠΊΠΎΠΈ ΠΎΠ΄ ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π²ΠΎ Windows.
ΠΠΎ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° ΡΠ°ΠΊΠ°ΠΌ Π΄Π° Π²ΠΈ ΠΊΠ°ΠΆΠ°ΠΌ ΡΠΎ ΠΊΠ°ΠΊΠ²ΠΈ ΡΠ΅ΡΠΊΠΎΡΠΈΠΈ ΠΌΠΎΡΠ°Π² Π΄Π° ΡΠ΅ ΡΠΎΠΎΡΠ°ΠΌ ΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΏΠ΅Π°Π² Π΄Π° Π³ΠΈ ΡΠ΅ΡΠ°ΠΌ. Π‘Π΅ Π½Π°Π΄Π΅Π²Π°ΠΌ Π΄Π΅ΠΊΠ° ΠΎΠ²Π° Π΅ ΠΊΠΎΡΠΈΡΠ½ΠΎ Π·Π° Π²Π°ΡΠΈΡΠ΅ ΡΠ΅Π³Π°ΡΠ½ΠΈ ΠΈ ΠΈΠ΄Π½ΠΈ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΡΠΈ. Π£ΠΆΠΈΠ²Π°ΡΡΠ΅ Π²ΠΎ ΡΠΈΡΠ°ΡΠ΅ΡΠΎ!
ΠΠΎΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ?
ΠΠΎΠΌΠΏΠ°Π½ΠΈΡΠ°ΡΠ° ΠΈΠΌΠ° ΠΏΠΎΡΡΠΎΠ΅ΡΠΊΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π·Π° ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΎΡΠΎΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ Hashicorp Nomad ΠΈ ΡΡΠΎΠ΄Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ - ΠΊΠΎΠ½Π·ΡΠ» ΠΈ ΡΠ²ΠΎΠ΄. ΠΠ°ΡΠΎΠ°, ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΠ·Π°ΡΠΈΡΠ°ΡΠ° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π±Π΅ΡΠ΅ ΠΈΠ·Π±ΡΠ°Π½Π° ΠΊΠ°ΠΊΠΎ ΡΠ½ΠΈΡΠΈΡΠΈΡΠ°Π½ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° ΠΈΡΠΏΠΎΡΠ°ΠΊΠ° Π½Π° ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΠΈΠ΄Π΅ΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ½Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΡΠΎΠ΄ΡΠΆΠΈ Π΄ΠΎΠΊΠ΅Ρ Ρ
ΠΎΡΡΠΎΠ²ΠΈ ΡΠΎ Windows Server Core OS Π²Π΅ΡΠ·ΠΈΠΈ 1803 ΠΈ 1809, Π½Π΅ΠΎΠΏΡ
ΠΎΠ΄Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄Π°Ρ ΠΏΠΎΡΠ΅Π±Π½ΠΈ Π²Π΅ΡΠ·ΠΈΠΈ Π½Π° Π΄ΠΎΠΊΠ΅Ρ ΡΠ»ΠΈΠΊΠΈ Π·Π° 1803 ΠΈ 1809 Π³ΠΎΠ΄ΠΈΠ½Π°. ΠΠΎ Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° 1803, Π²Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠ°ΠΌΠ΅ΡΠΈ Π΄Π΅ΠΊΠ° Π±ΡΠΎΡΠΎΡ Π½Π° ΡΠ΅Π²ΠΈΠ·ΠΈΡΠ°ΡΠ° Π½Π° build docker host ΠΌΠΎΡΠ° Π΄Π° ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° Π½Π° Π±ΡΠΎΡΠΎΡ Π½Π° ΡΠ΅Π²ΠΈΠ·ΠΈΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΠ»ΠΈΠΊΠ° Π½Π° Π΄ΠΎΠΊΠ΅ΡΠΎΡ ΠΈ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΡΠ΅ ΡΠ΅ Π»Π°Π½ΡΠΈΡΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΡ ΠΎΠ΄ ΠΎΠ²Π°Π° ΡΠ»ΠΈΠΊΠ°. ΠΠ΅ΡΠ·ΠΈΡΠ°ΡΠ° 1809 Π½Π΅ΠΌΠ° ΡΠ°ΠΊΠΎΠ² Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅
ΠΠΎΡΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΡΠ΅ΠΏΠ΅Π½?
ΠΠ½ΠΆΠ΅Π½Π΅ΡΠΈΡΠ΅ Π½Π° ΡΠΈΠΌΠΎΡ Π·Π° ΡΠ°Π·Π²ΠΎΡ Π½Π΅ΠΌΠ°Π°Ρ ΠΈΠ»ΠΈ ΠΈΠΌΠ°Π°Ρ ΠΌΠ½ΠΎΠ³Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ Π³ΡΠ°Π΄Π΅ΡΠ΅ Ρ ΠΎΡΡΠΎΠ²ΠΈ; Π½Π΅ ΠΏΠΎΡΡΠΎΠΈ Π½Π°ΡΠΈΠ½ Π±ΡΠ·ΠΎ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΡΠ²Π° ΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°Π΄Π±Π° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π° ΠΎΠ²ΠΈΠ΅ Ρ ΠΎΡΡΠΎΠ²ΠΈ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½Π° Π³ΡΡΠΏΠ° Π°Π»Π°ΡΠΊΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Π΅ΠΌ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π·Π° Visual Studio. ΠΠ°ΡΠΎΠ°, Π΄ΠΎΠ½Π΅ΡΠΎΠ²ΠΌΠ΅ ΠΎΠ΄Π»ΡΠΊΠ° Π΄Π° Π³ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π²ΠΎ build Docker ΡΠ»ΠΈΠΊΠ°ΡΠ°. ΠΠΎΠΊΠΎΠ»ΠΊΡ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π±ΡΠ·ΠΎ Π΄Π° ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ°ΠΌΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° docker ΠΈ Π΄Π° Π³ΠΎ ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ ΡΠ΅Π²ΠΊΠΎΠ²ΠΎΠ΄ΠΎΡ Π·Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ Π½Π° ΠΎΠ²Π°Π° ΡΠ»ΠΈΠΊΠ°.
ΠΠ΄ ΡΠ΅ΠΎΡΠΈΡΠ° Π΄ΠΎ Π°ΠΊΡΠΈΡΠ°
ΠΠΎ ΠΈΠ΄Π΅Π°Π»Π½ΠΎ Π³ΡΠ°Π΄Π΅ΡΠ΅ Π½Π° ΡΠ»ΠΈΠΊΠΈ ΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ°Π·ΠΈ Π½Π° Docker, ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ° Π·Π° Π³ΡΠ°Π΄Π΅ΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½Π° Π²ΠΎ ΠΈΡΡΠ°ΡΠ° Dockerfile ΡΠΊΡΠΈΠΏΡΠ° ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½Π° ΡΠ°ΠΌΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°. ΠΠΎ, Π²ΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠ»ΡΡΠ°Ρ, Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΡΡΠ΅Π΄Π½Π° Π²ΡΡΠΊΠ°, ΠΈΠΌΠ΅Π½ΠΎ, ΡΠ΅ΠΊΠΎΡΠΎΡ Π½Π° ΠΏΡΠ΅Π»ΠΈΠΌΠΈΠ½Π°ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ Π½Π° Π΄ΠΎΠΊΠ΅Ρ ΡΠ»ΠΈΠΊΠ° ΡΠΎ ΡΠ΅ ΡΡΠΎ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°. ΠΠ²Π° Π±Π΅ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ Π·Π°ΡΠΎΠ° ΡΡΠΎ ΡΠ°ΠΊΠ°Π² Π΄Π° ΡΠ° ΠΊΠΎΡΠΈΡΡΠ°ΠΌ ΠΎΠ΄Π»ΠΈΠΊΠ°ΡΠ° Π·Π° ΠΊΠ΅Ρ Π½Π° Π΄ΠΎΠΊΠ΅Ρ Π·Π° Π΄Π° Π³ΠΎ Π½Π°ΠΌΠ°Π»Π°ΠΌ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ° Π½Π° ΡΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ.
ΠΡΠ΄Π΅ Π΄Π° Π³ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ Π³Π»Π°Π²Π½ΠΈΡΠ΅ ΡΠΎΡΠΊΠΈ Π½Π° ΡΠΊΡΠΈΠΏΡΠ°ΡΠ° Π½Π° dockerfile Π·Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ Π½Π° ΠΎΠ²Π°Π° ΡΠ»ΠΈΠΊΠ°.
ΠΠ° Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΡΠ»ΠΈΠΊΠΈ ΠΎΠ΄ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²Π΅ΡΠ·ΠΈΠΈ Π½Π° ΠΠ‘, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° docker ΠΏΡΠ΅ΠΊΡ ΠΊΠΎΡΠ° ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π° Π±ΡΠΎΡΠΎΡ Π½Π° Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π³ΡΠ°Π΄Π±Π°ΡΠ°, Π° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π΅ ΠΎΠ·Π½Π°ΠΊΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΠ»ΠΈΠΊΠ°.
ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΠ΄Π΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΡΠ½Π° Π»ΠΈΡΡΠ° Π½Π° ΠΎΠ·Π½Π°ΠΊΠΈ Π·Π° ΡΠ»ΠΈΠΊΠΈ Π½Π° Microsoft Windows Server
ΡΡΠΊΠ° .
ARG WINDOWS_OS_VERSION=1809
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION
Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ Π²ΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ RUN
Π²Π½Π°ΡΡΠ΅ Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° docker Π½Π° 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 ΡΠΎΡΠΌΠ°Ρ, ΠΊΠΎΡΠ° ΡΠΎΠ΄ΡΠΆΠΈ Π»ΠΈΡΡΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΈ Π½ΠΈΠ²Π½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ. ΠΠ΅Π³ΠΎΠ²Π°ΡΠ° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π° ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:
<?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++ Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½Π° ΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π΄Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌΠ΅ ΡΠΎ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΡΠ΅ΠΏΠ΅Π½Π° Π³ΡΠ°Π΄Π±Π° Π½Π° Π΄ΠΎΠΊΠ΅Ρ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°.
ΠΠΎΠ²Π΅ΡΠ΅ΡΡΠ΅ΠΏΠ΅Π½Π° Π²ΠΎ Π°ΠΊΡΠΈΡΠ°
ΠΠ΅ ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΠΊΡΠ΅ΠΈΡΠ°Π½Π°ΡΠ° ΡΠ»ΠΈΠΊΠ° ΡΠΎ ΡΠΈΡΠ΅ Π°Π»Π°ΡΠΊΠΈ Π½Π° ΠΎΠ΄Π±ΠΎΡΠΎΡ ΠΊΠ°ΠΊΠΎ ΡΠ»ΠΈΠΊΠ° Π·Π° ΠΈΠ·Π³ΡΠ°Π΄Π±Π°. ΠΠ°ΠΊΠΎ ΠΈ Π²ΠΎ ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½Π°ΡΠ° ΡΠΊΡΠΈΠΏΡΠ° Π·Π° 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