ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅ Π²ΡΠΈΡΠΊΠΈ! ΠΠ°Π·Π²Π°ΠΌ ΡΠ΅ ΠΠ½Π΄ΡΠ΅ΠΉ ΠΈ ΡΠ°Π±ΠΎΡΡ ΠΊΠ°ΡΠΎ DevOps ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ Π² Exness Π² Π΅ΠΊΠΈΠΏΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°. ΠΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΌΠΈ Π΄Π΅ΠΉΠ½ΠΎΡΡ Π΅ ΡΠ²ΡΡΠ·Π°Π½Π° Ρ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² docker ΠΏΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Linux (Π½Π°ΡΠΈΡΠ°Π½Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρ ΠΠ‘). ΠΠ΅ΠΎΡΠ΄Π°Π²Π½Π° ΠΈΠΌΠ°Ρ Π·Π°Π΄Π°ΡΠ° ΡΡΡ ΡΡΡΠΈΡΠ΅ Π΄Π΅ΠΉΠ½ΠΎΡΡΠΈ, Π½ΠΎ ΡΠ΅Π»Π΅Π²Π°ΡΠ° ΠΠ‘ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π±Π΅ΡΠ΅ Windows Server ΠΈ Π½Π°Π±ΠΎΡ ΠΎΡ C++ ΠΏΡΠΎΠ΅ΠΊΡΠΈ. ΠΠ° ΠΌΠ΅Π½ ΡΠΎΠ²Π° Π±Π΅ΡΠ΅ ΠΏΡΡΠ²ΠΎΡΠΎ Π±Π»ΠΈΠ·ΠΊΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π΄ΠΎΠΊΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΠΏΠΎΠ΄ Windows OS ΠΈ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ Ρ C++ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΠ²Π° ΠΈΠΌΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ ΠΎΠΏΠΈΡ ΠΈ Π½Π°ΡΡΠΈΡ Π·Π° Π½ΡΠΊΠΎΠΈ ΠΎΡ ΡΡΠ½ΠΊΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Windows.
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΠΈΡΠΊΠ°ΠΌ Π΄Π° Π²ΠΈ ΡΠ°Π·ΠΊΠ°ΠΆΠ° Ρ ΠΊΠ°ΠΊΠ²ΠΈ ΡΡΡΠ΄Π½ΠΎΡΡΠΈ ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠ±Π»ΡΡΠΊΠ°ΠΌ ΠΈ ΠΊΠ°ΠΊ ΡΡΠΏΡΡ Π΄Π° Π³ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ°. ΠΠ°Π΄ΡΠ²Π°ΠΌ ΡΠ΅, ΡΠ΅ ΡΠΎΠ²Π° Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π° Π²Π°ΡΠΈΡΠ΅ Π½Π°ΡΡΠΎΡΡΠΈ ΠΈ Π±ΡΠ΄Π΅ΡΠΈ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°ΡΠ΅Π»ΡΡΠ²Π°. ΠΠ°ΡΠ»Π°Π΄ΠΈ ΡΠ΅ Π½Π° ΡΠ΅ΡΠ΅Π½Π΅ΡΠΎ!
ΠΠ°ΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ?
ΠΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π° ΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΠΈΡ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΎΡ Hashicorp Nomad ΠΈ ΡΠ²ΡΡΠ·Π°Π½ΠΈΡΠ΅ Ρ Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ - Consul ΠΈ Vault. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° Π±Π΅ΡΠ΅ ΠΈΠ·Π±ΡΠ°Π½Π° ΠΊΠ°ΡΠΎ ΡΠ½ΠΈΡΠΈΡΠΈΡΠ°Π½ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΡΡΠ»ΠΎΡΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΡΠ΄ΡΡΠΆΠ° Π΄ΠΎΠΊΠ΅Ρ Ρ
ΠΎΡΡΠΎΠ²Π΅ Ρ Windows Server Core OS Π²Π΅ΡΡΠΈΠΈ 1803 ΠΈ 1809, Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄ΡΡ ΠΎΡΠ΄Π΅Π»Π½ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° Π΄ΠΎΠΊΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π° 1803 ΠΈ 1809. ΠΡΠ² Π²Π΅ΡΡΠΈΡ 1803 Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΠ΅ ΡΠ΅Π²ΠΈΠ·ΠΈΠΎΠ½Π½ΠΈΡΡ Π½ΠΎΠΌΠ΅Ρ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π½Π° Π΄ΠΎΠΊΠ΅Ρ Ρ
ΠΎΡΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ²ΠΏΠ°Π΄Π° Ρ Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° Π±Π°Π·ΠΎΠ²ΠΎΡΠΎ Π΄ΠΎΠΊΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ
ΠΎΡΡΠ°, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΡ ΠΎΡ ΡΠΎΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. ΠΠ΅ΡΡΠΈΡ 1809 Π½ΡΠΌΠ° ΡΠ°ΠΊΡΠ² Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΊ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅
ΠΠ°ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ΡΠ°ΠΏΠ΅Π½?
ΠΠ½ΠΆΠ΅Π½Π΅ΡΠΈΡΠ΅ Π½Π° Π΅ΠΊΠΈΠΏΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½ΡΠΌΠ°Ρ ΠΈΠ»ΠΈ ΠΈΠΌΠ°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π΄ΠΎΡΡΡΠΏ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ ΠΎΡΡΠΎΠ²Π΅; Π½ΡΠΌΠ° Π½Π°ΡΠΈΠ½ Π·Π° Π±ΡΡΠ·ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½Π°Π±ΠΎΡΠ° ΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π·ΠΈ Ρ ΠΎΡΡΠΎΠ²Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΈΠ»ΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Π·Π° Visual Studio. ΠΠ°ΡΠΎΠ²Π° Π²Π·Π΅Ρ ΠΌΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π² ΠΎΠ±ΡΠ°Π·Π° Π½Π° Docker Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅. ΠΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π±ΡΡΠ·ΠΎ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ°ΠΌΠΎ Π΄ΠΎΠΊΠ΅Ρ ΡΠ°ΠΉΠ»Π° ΠΈ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠΎΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
ΠΡ ΡΠ΅ΠΎΡΠΈΡ ΠΊΡΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅
Π ΠΈΠ΄Π΅Π°Π»Π½ΠΎΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ΡΠ°ΠΏΠ½ΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Docker, ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Ρ Π² ΡΡΡΠΈΡ 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'
ΠΠ° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° chocolatey, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄Π° Π³ΠΈ ΠΏΠΎΠ΄Π°Π΄Π΅ΡΠ΅ ΠΊΠ°ΡΠΎ ΡΠΏΠΈΡΡΠΊ ΠΈΠ»ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΏΠΎ Π΅Π΄ΠΈΠ½, Π°ΠΊΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ΄Π°Π΄Π΅ΡΠ΅ ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ. Π Π½Π°ΡΠ°ΡΠ° ΡΠΈΡΡΠ°ΡΠΈΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ΅ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ΅Π½ ΡΠ°ΠΉΠ» Π² 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