Young Leaves

Windows Server 2025 Datacenter でDocker コンテナを実行する

今回はWindows Server 2025 Datacenter でDocker を使ったコンテナの実行について説明します。Windows ベースのコンテナの実行とイメージ作成、WSL を使ったLinux ベースのコンテナの実行の2種類を試します。

実施環境

OS

Windows Server 2025 Datacenter

Docker CE

27.2.0

前提条件

  • Azure 上にWindows Server 2025 Datacenter の仮想マシンを構築していること
  • Windows Server が外部インターネットに接続可能なこと

Windows Server 上のコンテナについて

Windows Server でもLinux と同様にコンテナを実行できます。Windows Server 上のコンテナとLinux 上のコンテナの違いは、主に基盤となるオペレーティングシステムにあります。Windows コンテナはWindows カーネルを使用し、Windows ベースのアプリケーションに最適化されています。一方、Linux コンテナはLinux カーネルを使用し、Linux ベースのアプリケーションに最適化されています。これにより、各プラットフォームに特有のAPI やシステムコールを利用することができます。

Windows Server でコンテナを利用することで、Windows ベースのアプリケーションにおいて一貫性のある環境を提供できます。Windows ベースのOS を利用するため、OS による互換性の問題も少なくできます。これにより、開発から本番まで同じ環境でアプリケーションを実行できるため、環境の違いによる問題が減少します。また、コンテナは軽量でリソース効率が高く、仮想マシンよりも迅速にデプロイできます。

Windows におけるコンテナイメージは以下の4つがあります。各イメージとも通常提供のイメージとInsider 用のイメージがあります。

Windows Server Core

Windows Server Core のコンテナイメージ。

Nano Server

.NET Core アプリケーション用に構築されたイメージ。

Windows

Windows ベースのコンテナイメージ。

Windows Server

Windows Server ベースのコンテナイメージ。

Windows コンテナにはいくつの制約により適さないアプリケーションがあるため注意が必要です。

  • GUI 機能を使えないためデスクトップアプリケーションは利用できない
  • 対話側のセッションを使うリモートデスクトップは利用できない
  • ステートフルのため、永続的なデータ保持には向かない
  • Active Directory、DHCP などのWindows インフラストラクチャロールは利用できない
  • 古いWindows Server OS、.NET を必要とするアプリケーションはサポートされていない

今回の構成

今回はAzure 上にWindows Server 2025 Datacenter の仮想マシンを事前に作成して実施します。オンプレミスのWindows Server と環境の異なる点はご了承ください。

Windows Server にDocker CE をインストール

初めにWindows Server でContainers の機能が有効になっているか確認します。有効でない場合はContainers の機能を有効にします。Azure VM のWindows Server 2025 Datacenter ではデフォルトで有効になっています。

# Containers機能のインストールを確認する
# Install StateがInstalledであること
Get-WindowsFeature -Name Containers

# Containers機能がインストールされていない場合、以下コマンドで有効にする
Install-WindowsFeature -Name Containers

次にWindows Server にログインしDocker CE をインストールします。

# Windows ServerにDockerをインストールする
Invoke-WebRequest -UseBasicParsing "https://raw.githubusercontent.com/microsoft/Windows-Containers/Main/helpful_tools/Install-DockerCE/install-docker-ce.ps1" -o install-docker-ce.ps1
.\install-docker-ce.ps1

コマンド実行後、Windows Server の再起動が入ります。再起動後にPowerShell のプロンプトが実行され、インストール完了のターミナルが表示されます。ターミナル表示後、バージョン確認のコマンドを実行しDocker のインストールを確認します。

# Dockerのバージョンを確認する
# Docker Clientのバージョンが表示されること
docker version     

コンテナの基本イメージを取得

Docker CE インストール後、Nano Server 2022 のイメージを取得します。

# Nano Server 2022のイメージをインストールする
docker pull mcr.microsoft.com/windows/nanoserver:ltsc2022

# Dockerイメージを確認する
# Nano Serverのイメージが表示されること
docker images

コンテナを実行

コンテナイメージを取得後、イメージを実行し接続できるか確認します。

# Nano Server 2022のコンテナを実行する
# コマンドプロンプトのCLIに変更されること
docker run -it mcr.microsoft.com/windows/nanoserver:ltsc2022 cmd.exe

IIS をインストールしたDocker イメージを作成する

既存イメージからコンテナの実行を確認できたため、次はDockerfile を作成しコンテナイメージを作成します。今回はWindows Server Core 2022 のイメージにIIS を導入したコンテナイメージを準備します。初めに空のDockerfile を作成します。

# 空のDockefileを作成する
New-Item -Name Dockerfile -ItemType file

空のDockerfile 作成後、以下のように編集します。

# Windows Server 2022 Coreのイメージを取得する
FROM mcr.microsoft.com/windows/servercore:ltsc2022

# イメージのメンテナーをメタデータとして設定する
LABEL maintainer="admin@example.com"

# Dismコマンドを使いIISロールをインストールする
RUN dism.exe /online /enable-feature /all /featurename:iis-webserver /NoRestart

# HTMLファイルを作成しルートディレクトリに配置する
RUN echo "Hello! Windows Docker Containers" > c:\inetpub\wwwroot\index.html

# コマンドプロンプトでコンテナを実行する
CMD [ "cmd" ]

Dockerfile 作成後、イメージのビルドをします。ディレクトリの配置場所によって権限エラーが出るため、エラーが表示された場合はDocker で実行可能な場所にDockerfile を移動し再実行します。Linux イメージと違いイメージサイズが大きいためビルド時間が少し長くなりますが完了まで待ちます。

# Dockerfileからコンテナイメージを作成する
docker build -t iis .

# Dockerイメージ一覧を確認する
# iisのイメージが作成されたこと
docker images

イメージ作成後、コンテナを起動しコンテナのIP アドレスを確認します。

# コンテナを起動する
docker container run -it iis cmd.exe

# IPアドレスを確認する
ipconfig

IP アドレスを確認したら、Windows Server でブラウザを開き「http://<コンテナのIPアドレス>」を入力します。Dockerfile で作成した文字列が表示されることを確認します。

Windows Server でLinux ベースのコンテナイメージを実行する

Windows Server でLinux ベースのコンテナを実行するにはWSL が必要となります。Azure VM は仮想化された環境のため、WSL 利用には入れ子の仮想化をサポートしているVM サイズを指定します。また、一部サイズではTrusted Launch を有効にしていると入れ子のサポートを行わない場合があるため注意が必要です。

Azure 仮想マシンの Trusted Launch

今回はTrusted Launch を無効にし Standard D2ds v4 で試してみます。Trusted Launch を有効にした状態で行いたい場合はv5 VM サイズ ファミリを指定してください。どのVM サイズで入れ子の仮想化をサポートしているか確認したい場合、VM サイズのドキュメントページに記載されているためそちらを確認します。

# Windows Subsystem for LinuxとVirtualMachinePlatformを有効化する
# 再起動を求められるため「Y」を入力する
Enable-WindowsOptionalFeature -online -featurename Microsoft-Windows-Subsystem-Linux, VirtualMachinePlatform

# WSL2 Linuxカーネル更新プログラムをダウンロード
Invoke-WebRequest -Uri "https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi" -OutFile wsl_update_x64.msi

# WSL2 Linuxカーネル更新プログラムをインストールする
msiexec /i wsl_update_x64.msi /quiet

# Windows ServerにWSLをインストールする
# 今回はUbuntu 24.04をインストールする
wsl --install -d Ubuntu-24.04

WSL インストール後、Ubuntu にログインしDocker をインストールします。インストール後、docker コマンドをsudo なしで実行できるようにします。

# Dockerをインストールする
sudo snap install docker

# sudoなしでdockerコマンドを実行できるようにする
# dockerグループを作成し実行ユーザーを参加させる
sudo addgroup --system docker
sudo adduser $USER docker
newgrp docker

# Dockerを再起動させる
sudo snap disable docker
sudo snap enable docker

Docker インストール後、イメージを取得し実行できるか確認します。

# Nginxのイメージを取得する
docker pull nginx

# Nginxのコンテナを実行する
docker container run -p 8080:80 -it nginx

コンテナ起動後、ブラウザで http://localhost:8080 にアクセスしNginx のトップページが表示されることを確認します。

まとめ

  • Windows Server ベースのコンテナはWindows カーネルを利用するためWindows アプリケーションにおける互換性の問題を減らせる
  • Windows Server でコンテナを有効にするにはContainers 機能を有効にする
  • Windows Server でLinux コンテナを実行するにはWSL で実行する
  • Azure VM でWSL を利用する場合、入れ子の仮想化をサポートしたVM サイズを選択する必要がある

参考資料