Docker ๋‹ค๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Windows ์ด๋ฏธ์ง€ ๋นŒ๋“œ

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„! ์ œ ์ด๋ฆ„์€ Andrey์ด๊ณ  Exness์˜ ๊ฐœ๋ฐœํŒ€์—์„œ DevOps ์—”์ง€๋‹ˆ์–ด๋กœ ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์˜ ์ฃผ์š” ํ™œ๋™์€ Linux ์šด์˜ ์ฒด์ œ(์ดํ•˜ OS๋ผ๊ณ  ํ•จ)์—์„œ Docker๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•, ๋ฐฐํฌ ๋ฐ ์ง€์›ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์–ผ๋งˆ ์ „ ๊ฐ™์€ ํ™œ๋™์„ ํ•˜๋Š” ์ž‘์—…์ด ์žˆ์—ˆ๋Š”๋ฐ, ํ”„๋กœ์ ํŠธ์˜ ๋Œ€์ƒ OS๋Š” Windows Server์™€ C++ ํ”„๋กœ์ ํŠธ ์„ธํŠธ์˜€์Šต๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ์ด๊ฒƒ์€ Windows OS์˜ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋ฐ ์ผ๋ฐ˜์ ์œผ๋กœ C++ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ์˜ ์ฒซ ๋ฒˆ์งธ ๊ธด๋ฐ€ํ•œ ์ƒํ˜ธ ์ž‘์šฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋•๋ถ„์— ์ €๋Š” ํฅ๋ฏธ๋กœ์šด ๊ฒฝํ—˜์„ ํ–ˆ๊ณ  Windows์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆํ™”ํ•˜๋Š” ๋ณต์žกํ•œ ๊ณผ์ •์— ๋Œ€ํ•ด ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.

Docker ๋‹ค๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Windows ์ด๋ฏธ์ง€ ๋นŒ๋“œ

์ด ๊ธ€์—์„œ๋Š” ์ œ๊ฐ€ ๊ฒช์—ˆ๋˜ ์–ด๋ ค์›€๊ณผ ์ด๋ฅผ ํ•ด๊ฒฐํ•œ ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด ๋‚ด์šฉ์ด ํ˜„์žฌ์™€ ๋ฏธ๋ž˜์˜ ๊ณผ์ œ์— ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ฆ๊ฒ๊ฒŒ ์ฝ์–ด๋ณด์„ธ์š”!

์™œ ์ปจํ…Œ์ด๋„ˆ์ธ๊ฐ€?

์ด ํšŒ์‚ฌ๋Š” Hashicorp Nomad ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ ๋ฐ ๊ด€๋ จ ๊ตฌ์„ฑ์š”์†Œ(Consul ๋ฐ Vault)๋ฅผ ์œ„ํ•œ ๊ธฐ์กด ์ธํ”„๋ผ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ„ดํ‚ค ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ํ†ตํ•ฉ ๋ฐฉ๋ฒ•์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆํ™”๊ฐ€ ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ธํ”„๋ผ์—๋Š” Windows Server Core OS ๋ฒ„์ „ 1803 ๋ฐ 1809๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Docker ํ˜ธ์ŠคํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ 1803 ๋ฐ 1809์— ๋Œ€ํ•œ ๋ณ„๋„์˜ Docker ์ด๋ฏธ์ง€ ๋ฒ„์ „์„ ๋นŒ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„์ „ 1803์—์„œ๋Š” ๋นŒ๋“œ Docker ํ˜ธ์ŠคํŠธ์˜ ๊ฐœ์ • ๋ฒˆํ˜ธ๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ Docker ์ด๋ฏธ์ง€์˜ ๊ฐœ์ • ๋ฒˆํ˜ธ์™€ ์ด ์ด๋ฏธ์ง€์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ํ˜ธ์ŠคํŠธ์™€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„์ „ 1809์—๋Š” ๊ทธ๋Ÿฌํ•œ ๋‹จ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋” ์ฝ์–ด๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์—ฌ๊ธฐ์—.

์™œ ๋‹ค๋‹จ๊ณ„์ธ๊ฐ€?

๊ฐœ๋ฐœ ํŒ€ ์—”์ง€๋‹ˆ์–ด๋Š” ๋นŒ๋“œ ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์—†๊ฑฐ๋‚˜ ๋งค์šฐ ์ œํ•œ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ํ˜ธ์ŠคํŠธ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์„ฑ ์š”์†Œ ์ง‘ํ•ฉ์„ ์‹ ์†ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค(์˜ˆ: Visual Studio์šฉ ์ถ”๊ฐ€ ๋„๊ตฌ ์„ธํŠธ ๋˜๋Š” ์›Œํฌ๋กœ๋“œ ์„ค์น˜). ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋นŒ๋“œ Docker ์ด๋ฏธ์ง€์— ์„ค์น˜ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‹ ์†ํ•˜๊ฒŒ dockerfile๋งŒ ๋ณ€๊ฒฝํ•˜๊ณ  ์ด ์ด๋ฏธ์ง€ ์ƒ์„ฑ์„ ์œ„ํ•œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ก ๋ถ€ํ„ฐ ์‹ค์ฒœ๊นŒ์ง€

์ด์ƒ์ ์ธ Docker ๋‹ค๋‹จ๊ณ„ ์ด๋ฏธ์ง€ ๋นŒ๋“œ์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ๋ฅผ ์œ„ํ•œ ํ™˜๊ฒฝ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด๊ฐ€ ๋นŒ๋“œ๋  ๋•Œ์™€ ๋™์ผํ•œ Dockerfile ์Šคํฌ๋ฆฝํŠธ๋กœ ์ค€๋น„๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ์ค‘๊ฐ„ ๋งํฌ, ์ฆ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ํฌํ•จ๋œ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜๋Š” ๋‹จ๊ณ„๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Docker ์บ์‹œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ข…์† ํ•ญ๋ชฉ์˜ ์„ค์น˜ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ dockerfile ์Šคํฌ๋ฆฝํŠธ์˜ ์ฃผ์š” ์‚ฌํ•ญ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‹ค์–‘ํ•œ OS ๋ฒ„์ „์˜ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋นŒ๋“œ ์ค‘์— ๋ฒ„์ „ ๋ฒˆํ˜ธ๊ฐ€ ์ „๋‹ฌ๋˜๋Š” dockerfile์˜ ์ธ์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ๊ธฐ๋ณธ ์ด๋ฏธ์ง€์˜ ํƒœ๊ทธ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

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 ํ˜•์‹์˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

<?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
  • ์œˆ๋„์šฐ 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 ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ ์ƒ์„ฑ์„ ์ง์ ‘ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋‹จ๊ณ„ ์ž‘๋™

๋‚ด์žฅ๋œ ๋ชจ๋“  ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œ ์ด๋ฏธ์ง€๋กœ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด์ „ 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.

๊ฒฐ๋ก 

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” Windows์˜ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ C++ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ๋ณธ๊ฒฉ์ ์ธ ์ปดํŒŒ์ผ ํ™˜๊ฒฝ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๊ณผ docker ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณธ๊ฒฉ์ ์ธ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€