рд╡рд┐рдиреНрдбреЛрдЬ рдЫрд╡рд┐рд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдбрдХрд░ рдмрд╣реБ-рдЪрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рдирдорд╕реНрддреЗ рд╕рдмреИ! рдореЗрд░реЛ рдирд╛рдо Andrey рд╣реЛ, рд░ рдо рд╡рд┐рдХрд╛рд╕ рдЯреЛрд▓реАрдорд╛ Exness рдорд╛ DevOps рдЗрдиреНрдЬрд┐рдирд┐рдпрд░рдХреЛ рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрдЫреБред рдореЗрд░реЛ рдореБрдЦреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рд▓рд┐рдирдХреНрд╕ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдо (рдпрд╕рд▓рд╛рдИ рдкрдЫрд┐ OS рднрдирд┐рдиреНрдЫ) рдЕрдиреНрддрд░реНрдЧрдд рдбрдХрд░рдорд╛ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд╣рд░реВ рдирд┐рд░реНрдорд╛рдг, рдбрд┐рдкреНрд▓реЛрдЗ рд░ рд╕рдорд░реНрдерди рдЧрд░реНрдиреЗрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЫред рдХреЗрд╣реА рд╕рдордп рдЕрдШрд┐ рдорд╕рдБрдЧ рд╕рдорд╛рди рдЧрддрд┐рд╡рд┐рдзрд┐рд╣рд░реВрдХреЛ рд╕рд╛рде рдХрд╛рд░реНрдп рдерд┐рдпреЛ, рддрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рдХреНрд╖реНрдп рдУрдПрд╕ рд╡рд┐рдиреНрдбреЛрдЬ рд╕рд░реНрднрд░ рд░ C++ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдХреЛ рд╕реЗрдЯ рдерд┐рдпреЛред рдореЗрд░реЛ рд▓рд╛рдЧрд┐, рдпреЛ Windows OS рдЕрдиреНрддрд░реНрдЧрдд рдбрдХрд░ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрд╕рдБрдЧ рдкрд╣рд┐рд▓реЛ рдирдЬрд┐рдХрдХреЛ рдЕрдиреНрддрд░реНрдХреНрд░рд┐рдпрд╛ рдерд┐рдпреЛ рд░ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, C++ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрд╕рдБрдЧред рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рдзрдиреНрдпрд╡рд╛рдж, рдорд╕рдБрдЧ рдПрдЙрдЯрд╛ рд░реЛрдЪрдХ рдЕрдиреБрднрд╡ рдерд┐рдпреЛ рд░ рд╡рд┐рдиреНрдбреЛрдЬрдорд╛ рдХрдиреНрдЯреЗрдирд░рд╛рдЗрдЬрд┐рдВрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рдХреЗрд╣реА рдЬрдЯрд┐рд▓рддрд╛рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕рд┐рдХреЗрдВред

рд╡рд┐рдиреНрдбреЛрдЬ рдЫрд╡рд┐рд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдбрдХрд░ рдмрд╣реБ-рдЪрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рдпрд╕ рд▓реЗрдЦрдорд╛ рдо рддрдкрд╛рдИрд▓рд╛рдИ рдмрддрд╛рдЙрди рдЪрд╛рд╣рдиреНрдЫреБ рдХрд┐ рдореИрд▓реЗ рдХрд╕реНрддрд╛ рдХрдард┐рдирд╛рдЗрд╣рд░реВрдХреЛ рд╕рд╛рдордирд╛ рдЧрд░реНрдиреБрдкрд░реЗрдХреЛ рдерд┐рдпреЛ рд░ рдореИрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдХрд╕рд░реА рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рд╕рдХреЗрдВред рдорд▓рд╛рдИ рдЖрд╢рд╛ рдЫ рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рддрдкрд╛рдИрдВрдХреЛ рд╡рд░реНрддрдорд╛рди рд░ рднрд╡рд┐рд╖реНрдпрдХрд╛ рдЪреБрдиреМрддреАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧреА рдкрд╛рдЙрдиреБрднрдпреЛред рдкрдвреЗрд░ рдЖрдирдиреНрдж рд▓рд┐рдиреБрд╣реЛрд╕реН!

рдХрд┐рди рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ?

рдХрдореНрдкрдиреАрд╕рдБрдЧ Hashicorp Nomad рдХрдиреНрдЯреЗрдирд░ рдЕрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯрд░ рд░ рд╕рдореНрдмрдиреНрдзрд┐рдд рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ - рдХрдиреНрд╕реБрд▓рд░ рд░ рднрд▓реНрдЯрдХреЛ рд▓рд╛рдЧрд┐ рдЕрд╡рд╕реНрдерд┐рдд рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдЫред рддрд╕рд░реНрде, рдЯрд░реНрдирдХреА рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдХрдиреНрдЯреЗрдирд░рд╛рдЗрдЬреЗрд╢рдирд▓рд╛рдИ рдПрдХреАрдХреГрдд рд╡рд┐рдзрд┐рдХреЛ рд░реВрдкрдорд╛ рд░реЛрдЬрд┐рдПрдХреЛ рдерд┐рдпреЛред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреВрд░реНрд╡рд╛рдзрд╛рд░рдорд╛ Windows Server Core OS рд╕рдВрд╕реНрдХрд░рдг резреорежрей рд░ резреорежреп рд╕рдБрдЧ рдбрдХрд░ рд╣реЛрд╕реНрдЯрд╣рд░реВ рднрдПрдХреЛ рд╣реБрдирд╛рд▓реЗ, резреорежрей рд░ резреорежреп рдХреЛ рд▓рд╛рдЧрд┐ рдбрдХрд░ рдЫрд╡рд┐рд╣рд░реВрдХреЛ рдЫреБрдЯреНрдЯрд╛рдЫреБрдЯреНрдЯреИ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рд╕рдВрд╕реНрдХрд░рдг резреорежрей рдорд╛, рдмрд┐рд▓реНрдб рдбрдХрд░ рд╣реЛрд╕реНрдЯрдХреЛ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдирдореНрдмрд░ рд╕рдореНрдЭрдиреБ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫред рдЖрдзрд╛рд░ рдбрдХрд░ рдЫрд╡рд┐рдХреЛ рд╕рдВрд╢реЛрдзрди рдирдореНрдмрд░ рд░ рдпреЛ рдЫрд╡рд┐рдмрд╛рдЯ рдХрдиреНрдЯреЗрдирд░ рд╕реБрд░реВ рдЧрд░рд┐рдиреЗ рд╣реЛрд╕реНрдЯрд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреБрдкрд░реНрдЫред рд╕рдВрд╕реНрдХрд░рдг 1803 рдорд╛ рддреНрдпрд╕реНрддреЛ рдХреБрдиреИ рдХрдореА рдЫреИрдиред рддрдкрд╛рдИрдВ рдердк рдкрдвреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдпрд╣рд╛рдБ.

рдХрд┐рди рдмрд╣реБ-рдЪрд░рдг?

рд╡рд┐рдХрд╛рд╕ рдЯреЛрд▓реА рдИрдиреНрдЬрд┐рдирд┐рдпрд░рд╣рд░реВрд╕рдБрдЧ рд╣реЛрд╕реНрдЯрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдХреБрдиреИ рд╡рд╛ рдзреЗрд░реИ рд╕реАрдорд┐рдд рдкрд╣реБрдБрдЪ рдЫреИрди; рдпреА рд╣реЛрд╕реНрдЯрд╣рд░реВрдорд╛ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВрдХреЛ рд╕реЗрдЯ рджреНрд░реБрдд рд░реВрдкрдорд╛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрдиреЗ рдХреБрдиреИ рддрд░рд┐рдХрд╛ рдЫреИрди, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рднрд┐рдЬреБрдЕрд▓ рд╕реНрдЯреБрдбрд┐рдпреЛрдХреЛ рд▓рд╛рдЧрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрдХрд░рдгрд╕реЗрдЯ рд╡рд╛ рдХрд╛рд░реНрдпрднрд╛рд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рддреНрдпрд╕рдХрд╛рд░рдг, рд╣рд╛рдореАрд▓реЗ рдмрд┐рд▓реНрдб рдбрдХрд░ рдЫрд╡рд┐рдорд╛ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╕рдмреИ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдЪрд╛рдБрдбреИ рдорд╛рддреНрд░ рдбрдХрд░рдлрд╛рдЗрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рдпреЛ рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рд╕рд┐рджреНрдзрд╛рдиреНрдд рджреЗрдЦрд┐ рдХрд╛рд░реНрдп рд╕рдореНрдо

рдПрдХ рдЖрджрд░реНрд╢ рдбрдХрд░ рдмрд╣реБ-рдЪрд░рдг рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдгрдорд╛, рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдирд┐рд░реНрдорд╛рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╡рд╛рддрд╛рд╡рд░рдг рдПрдЙрдЯреИ рдбрдХрд░рдлрд╛рдЗрд▓ рд▓рд┐рдкрд┐рдорд╛ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдЖрдлреИрдВ рдирд┐рд░реНрдорд╛рдг рдЧрд░рд┐рдПрдХреЛ рд░реВрдкрдорд╛ рддрдпрд╛рд░ рд╣реБрдиреНрдЫред рддрд░ рд╣рд╛рдореНрд░реЛ рдХреЗрд╕рдорд╛, рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рд▓рд┐рдЩреНрдХ рдердкрд┐рдПрдХреЛ рдерд┐рдпреЛ, рдЕрд░реНрдерд╛рддреН, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╕рдмреИ рдЪреАрдЬрдХреЛ рд╕рд╛рде рдбрдХрд░ рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдЪрд░рдгред рдпреЛ рдЧрд░рд┐рдпреЛ рдХрд┐рдирднрдиреЗ рдо рд╕рдмреИ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВрдХреЛ рд╕реНрдерд╛рдкрдирд╛ рд╕рдордп рдХрдо рдЧрд░реНрди рдбрдХрд░ рдХреНрдпрд╛рд╕ рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдереЗред

рдпреЛ рдЫрд╡рд┐ рдмрдирд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдбрдХрд░рдлрд╛рдЗрд▓ рд▓рд┐рдкрд┐рдХреЛ рдореБрдЦреНрдп рдмрд┐рдиреНрджреБрд╣рд░реВ рд╣реЗрд░реМрдВред

рдмрд┐рднрд┐рдиреНрди OS рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдХреЛ рдЫрд╡рд┐рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рдбрдХрд░рдлрд╛рдЗрд▓рдорд╛ рдПрдЙрдЯрд╛ рддрд░реНрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬрд╕рдХреЛ рдорд╛рдзреНрдпрдордмрд╛рдЯ рд╕рдВрд╕реНрдХрд░рдг рдирдореНрдмрд░ рдирд┐рд░реНрдорд╛рдгрдХреЛ рдХреНрд░рдордорд╛ рдкрд╛рд╕ рд╣реБрдиреНрдЫ, рд░ рдпреЛ рдЖрдзрд╛рд░ рдЫрд╡рд┐рдХреЛ рдЯреНрдпрд╛рдЧ рдкрдирд┐ рд╣реЛред

Microsoft Windows Server рдЫрд╡рд┐ рдЯреНрдпрд╛рдЧрд╣рд░реВрдХреЛ рдкреВрд░реНрдг рд╕реВрдЪреА рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫ рдпрд╣рд╛рдБ.

ARG WINDOWS_OS_VERSION=1809
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION

рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВрдорд╛ рдЖрджреЗрд╢рд╣рд░реВ RUN Windows OS рдорд╛ dockerfile рднрд┐рддреНрд░ рддрд┐рдиреАрд╣рд░реВ 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 рдврд╛рдБрдЪрд╛рдорд╛ manifest рдлрд╛рдЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВ, рдЬрд╕рдорд╛ рдЖрд╡рд╢реНрдпрдХ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рд╕реВрдЪреА рд╕рдорд╛рд╡реЗрд╢ рдЫред рдпрд╕рдХреЛ рд╕рд╛рдордЧреНрд░реА рдпрд╕ рдкреНрд░рдХрд╛рд░ рджреЗрдЦрд┐рдиреНрдЫ:

<?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++ рдЙрдкрдХрд░рдгрд╣рд░реВ
  • Toolset v141
  • Windows 10 SDK (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"
  ]
}

рдбрдХрд░рдлрд╛рдЗрд▓рд▓реЗ рд╕реНрдерд╛рдкрдирд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдЙрдБрдЫ, рд░ рд╕реБрд╡рд┐рдзрд╛рдХреЛ рд▓рд╛рдЧрд┐, рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░рдорд╛ рдирд┐рд░реНрдорд╛рдг рдЙрдкрдХрд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рдорд╛рд░реНрдЧ рдердкреНрдЫред 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++ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрдиреЗ рд╣рд╛рдореНрд░реЛ рдЫрд╡рд┐ рддрдпрд╛рд░ рдЫ, рд░ рд╣рд╛рдореА рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдбрдХрд░ рдмрд╣реБ-рдЪрд░рдг рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд╕рд┐рдзреИ рдЕрдЧрд╛рдбрд┐ рдмрдвреНрди рд╕рдХреНрдЫреМрдВред

рдХрд╛рд░реНрдпрдорд╛ рдмрд╣реБ-рдЪрд░рдг

рд╣рд╛рдореА рдирд┐рд░реНрдорд╛рдг рдЫрд╡рд┐рдХреЛ рд░реВрдкрдорд╛ рдмреЛрд░реНрдбрдорд╛ рд╕рдмреИ рдЙрдкрдХрд░рдгрд╣рд░реВрд╕рдБрдЧ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫрд╡рд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред рдЕрдШрд┐рд▓реНрд▓реЛ рдбрдХрд░рдлрд╛рдЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдЬрд╕реНрддреИ, рд╣рд╛рдореА рдХреЛрдб рдкреБрди: рдкреНрд░рдпреЛрдЧрдХреЛ рд╕рдЬрд┐рд▓реЛрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдВрд╕реНрдХрд░рдг рдирдореНрдмрд░/рдЫрд╡рд┐ рдЯреНрдпрд╛рдЧ рдЧрддрд┐рд╢реАрд▓ рд░реВрдкрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рдердкреНрдиреЗрдЫреМрдВред рдпреЛ рд▓реЗрдмрд▓ рдердкреНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ 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++ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд░реНрдг-рд╕рдВрдХрд▓рди рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╕рд░реА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рд░ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдкреВрд░реНрдг рдЫрд╡рд┐рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдбрдХрд░ рдмрд╣реБ-рдЪрд░рдг рдирд┐рд░реНрдорд╛рдгрд╣рд░реВрдХреЛ рдХреНрд╖рдорддрд╛рд╣рд░реВ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдХреБрд░рд╛ рдЧрд░реЗрдХреЛ рдЫреБред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди