Windows Container 베이스 이미지 일람

남정현
남정현
Dec 14, 2019 · 9 min read
Image Credit: https://unsplash.com/photos/8tS8ywl126Q
Image Credit: https://unsplash.com/photos/8tS8ywl126Q
Image Credit: https://unsplash.com/photos/8tS8ywl126Q

Windows Container는 Linux Container 만큼 대중적이지는 않지만, 기존 엔터프라이즈 애플리케이션을 지원하기 위하여 많은 이미지 메인테이너들이 Windows 기반 베이스 이미지들을 제공하고 있습니다.

이 문서에서는 Windows Container를 기반으로 하는 주요 이미지들을 소개합니다. 여기서는 Windows Server 2019 (LTSC)와 Windows Server 1809 (SAC)를 기반으로 하는 이미지들을 소개합니다.

Windows Server 베이스 이미지

여러분이 Windows 컨테이너로 작업하는 동안 가장 많이 사용하게 될 기본 이미지는 Server Core와 Nano Server 이미지입니다.

mcr.microsoft.com/windows/servercore:ltsc2019
mcr.microsoft.com/windows/nanoserver:1809

Server Core의 경우 흔히 기대하는 Windows 운영 체제의 주요 기능들, 단 GUI를 제외한 모든 기능들이 제공됩니다. 그리고 Nano Server의 경우 Windows 운영 체제의 극히 일부에 해당하는 핵심 기능만을 제공하여 빠른 시작 시간을 보장하는 것이 목표인 버전입니다.

기존에 개발 중인 애플리케이션이 Windows Server 위에서 실행되고 있었다면 Server Core 이미지를 선택하는 것이 가장 개발 공수가 적게 듭니다. 반면 .NET Core, Golang, Java 등 Windows 운영 체제의 기능에 종속성이 그다지 많지 않은 SDK나 프로그래밍 언어를 사용했을 경우 좀 더 공격적으로 Nano Server 이미지를 선택하는 것도 가능합니다.

Windows 베이스 이미지

Win32 애플리케이션을 Headless 모드로 실행하거나, DirectX API 등을 사용해야 하는 경우에는 이 버전의 이미지를 사용해야 합니다. 인터넷 서비스 목적이 아닌 개발과 UI 테스트 등을 목적으로 할 경우 이 이미지를 사용할 수 있습니다.

mcr.microsoft.com/windows:1809

다만 이 이미지의 경우 기존의 클라이언트 버전 Windows 운영 체제와 완전히 동일한 기능 집합을 제공하기 때문에 이미지 크기가 가장 큽니다. Docker Swarm이나 Kubernetes 등의 컨테이너 오케스트레이션 시나리오에서는 예기치 않은 문제를 일으킬 수 있으므로 선택과 활용 시 주의가 필요합니다.

Internet Information Server

Classic ASP, WCF, ASP.NET, Windows용 CGI 애플리케이션, ISAPI나 ASP.NET 모듈 등을 개발하여 사용 중일 경우 이 이미지를 기반으로 컨테이너화를 시도할 수 있습니다.

mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019

다만 기본으로 제공되는 이미지에 여러분이 원하는 컴포넌트가 들어있지 않을 수 있습니다. 예를 들어, 다음과 같이 Dockerfile을 만들어 Classic ASP 기능을 활성화할 수 있습니다.

#escape=`
FROM microsoft/iis:windowsservercore-ltsc2019
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

RUN Install-WindowsFeature Web-ASP

COPY ./share/ClassicAspApp.zip

RUN Expand-Archive -Path ClassicAspApp.zip -DestinationPath C:\ClassicAspApp; `
Remove-Item ClassicAspApp.zip

RUN Remove-Website -Name 'Default Web Site'; `
New-Website -Name web-app -Port 80 -PhysicalPath C:\ClassicAspApp

이미지 빌드와 실행은 다음과 같이 실행할 수 있을 것입니다.

docker image build `
-t classic-asp-app `
-f .\docker\classic-asp\Dockerfile .

docker container run -p 80:80 -d classic-asp-app

Windows Base Image를 지원하는 이미지들

OpenJDK의 경우 Java 8을 중심으로 Java의 새 버전이 나올 때 마다 Windows OS용 Docker 이미지를 같이 출시하고 있습니다.

openjdk:8-jre-windowsservercore-1809
openjdk:8-jdk-windowsservercore-1809
openjdk:11-jre-windowsservercore-1809
openjdk:11-jdk-windowsservercore-1809

Python의 경우 Python 2와 3모두 Windows OS용 Docker 이미지를 같이 출시하고 있습니다.

python:2-windowsservercore-1809
python:3-windowsservercore-1809

Golang도 Windows OS용 Docker 이미지가 있습니다.

golang:windowsservercore-1809

오픈 소스용 메시지 큐들 가운데에서 많은 주목을 받는 제품으로 NATS가 있는데, NATS는 Windows OS용 Docker 이미지도 지원합니다.

nats:2-windowsservercore-1809
nats:2-nanoserver-1809

PowerShell Core, .NET Core SDK, ASP.NET Core 역시 Windows Server Core용 이미지를 제공하고 있습니다.

mcr.microsoft.com/powershell:6.2.3-windowsservercore-1809mcr.microsoft.com/dotnet/core/sdk:2.1-nanoserver-1809
mcr.microsoft.com/dotnet/core/sdk:3.0-nanoserver-1809
mcr.microsoft.com/dotnet/core/aspnet:3.0-nanoserver-1809
mcr.microsoft.com/dotnet/core/aspnet:2.1-nanoserver-1809
mcr.microsoft.com/dotnet/core/runtime:3.0-nanoserver-1809
mcr.microsoft.com/dotnet/core/runtime:2.1-nanoserver-1809
mcr.microsoft.com/dotnet/core/samples:aspnetapp-nanoserver-1809
mcr.microsoft.com/dotnet/core/samples:dotnetapp-nanoserver-1809

.NET Framework의 경우

.NET Framework의 경우 대부분은 IIS와 함께 서버 사이드 애플리케이션을 배포하는 것이 흔한 경우입니다. 하지만 독립적으로 실행되는 서버 애플리케이션을 만들었거나, .NET Remoting, SignalR 등의 기능을 이용하는 애플리케이션을 만든 경우에는 아래의 베이스 이미지를 이용하면 배포 절차가 더 단순해집니다.

만약 .NET Framework 2.0부터 3.5 사이를 대상으로 애플리케이션을 빌드했다면 아래와 같이 3.5 태그를 기반으로 하는 이미지를 사용하면 모두 호환됩니다.

mcr.microsoft.com/dotnet/framework/aspnet:3.5-windowsservercore-ltsc2019
mcr.microsoft.com/dotnet/framework/sdk:3.5-windowsservercore-ltsc2019
mcr.microsoft.com/dotnet/framework/runtime:3.5-windowsservercore-ltsc2019

.NET Framework 4.0부터 4.8 사이를 대상으로 애플리케이션을 빌드한 경우에는 4.8 태그를 기반으로 하는 이미지를 사용하면 모두 호환됩니다.

mcr.microsoft.com/dotnet/framework/wcf:4.8-windowsservercore-ltsc2019
mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019
mcr.microsoft.com/dotnet/framework/sdk:4.8-windowsservercore-ltsc2019
mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019

마무리

Windows OS 이미지를 사용하여 애플리케이션을 배포하는 사례가 생각보다 많고, 다양하다는 것을 이번 블로그 포스트를 정리하면서 다시 확인할 수 있어서 기뻤습니다.

비교적 늦은 출발이지만 더 많은 애플리케이션이 Windows 생태계도 동시에 고려할 수 있게 되는 것은 매우 바람직한 일이라고 생각합니다. :-)

남정현의 블로그

DevOps related blogs

남정현

Written by

남정현

Azure와 .NET 기술을 즐겨 사용하는 개발자입니다. 한국 Azure 사용자 페이스북 그룹에서 활동합니다.

남정현의 블로그

DevOps related blogs

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade