ΠšΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° ΠΏΠΎΠ²Π΅ΡœΠ΅ΡΡ‚Π΅ΠΏΠ΅Π½ΠΈ docker Π·Π° создавањС слики Π½Π° Windows

Π—Π΄Ρ€Π°Π²ΠΎ Π½Π° ситС! ΠœΠΎΠ΅Ρ‚ΠΎ ΠΈΠΌΠ΅ Π΅ ΠΠ½Π΄Ρ€Π΅Ρ˜ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΠΌ ΠΊΠ°ΠΊΠΎ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ Π·Π° DevOps Π²ΠΎ Exness Π²ΠΎ Ρ‚ΠΈΠΌΠΎΡ‚ Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜. ΠœΠΎΡ˜Π°Ρ‚Π° Π³Π»Π°Π²Π½Π° активност Π΅ ΠΏΠΎΠ²Ρ€Π·Π°Π½Π° со Π³Ρ€Π°Π΄Π΅ΡšΠ΅, Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π²ΠΎ docker ΠΏΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈΠΎΡ‚ систСм Linux (Π²ΠΎ Π½Π°Ρ‚Π°ΠΌΠΎΡˆΠ½ΠΈΠΎΡ‚ тСкст ОБ). НС Ρ‚Π°ΠΊΠ° ΠΎΠ΄Π°ΠΌΠ½Π° ΠΈΠΌΠ°Π² Π·Π°Π΄Π°Ρ‡Π° со иститС активности, Π½ΠΎ Ρ†Π΅Π»Π½ΠΈΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π΅Π½ систСм Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ бСшС Windows Server ΠΈ сСт ΠΎΠ΄ C++ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ. Π—Π° ΠΌΠ΅Π½Π΅, ΠΎΠ²Π° бСшС ΠΏΡ€Π²Π° блиска ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π° со Π΄ΠΎΠΊΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ ΠΏΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈΠΎΡ‚ систСм Windows ΠΈ, Π³Π΅Π½Π΅Ρ€Π°Π»Π½ΠΎ, со C++ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ²Π°, ΠΈΠΌΠ°Π² интСрСсно искуство ΠΈ Π΄ΠΎΠ·Π½Π°Π² Π·Π° Π½Π΅ΠΊΠΎΠΈ ΠΎΠ΄ слоТСноста Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π²ΠΎ Windows.

ΠšΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° ΠΏΠΎΠ²Π΅ΡœΠ΅ΡΡ‚Π΅ΠΏΠ΅Π½ΠΈ docker Π·Π° создавањС слики Π½Π° 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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€