【無料ツール】画像をPDFに変換するPhotoPDF Appを公開しました!

【Windows Server入門 第8回】Hyper-Vとコンテナ。WindowsコンテナとDockerの共存戦略

記事内に広告が含まれています。
[PR]

  💡 サーバー構築やコマンドの練習には、VPSが圧倒的におすすめです。  

手元のパソコンや大切なメイン環境で検証を行うと、設定ミスでシステムを壊してしまったり、不要なパッケージが溜まって動作が不安定になるリスクがあります。

もしあなたが実務レベルのスキルを最短で身につけたいのであれば、月額ワンコインから使えて、失敗しても数分で初期状態にリセットできるVPS(仮想専用サーバー)を利用するのが、プロも実践する最も確実で安全な学習方法です。 「本記事は、10秒でサーバーが起動できる [ConoHa VPS](PR) の環境を使用して検証しています。」

▼ プロも推奨するVPS環境はこちら ▼

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

「Docker run」で、Windowsが起動する世界へようこそ。

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
全8回にわたるWindows Server入門講座、ついに最終回です。

これまで、AD、ファイルサーバー、IIS、WSUSと、Windows Serverの「伝統的な役割」を学んできました。
しかし、時代は「コンテナ」です。
Linuxの世界では、WebサーバーもDBも当たり前のようにDockerコンテナで動かしていますよね。
「Windowsアプリもコンテナになればいいのに……」と思ったことはありませんか?

コウ君

先生、それが一番の悩みです!
社内の古いASP.NETアプリ、VM(仮想マシン)で動かしてるんですけど、OSのパッチ当てとか再起動が面倒すぎて。
Linuxみたいに docker run 一発でIISが立ち上がれば、CI/CDパイプラインに乗せられるし、K8sで管理できるのに。
やっぱりWindowsは「重厚長大」なVMで運用するしかないんですか?

リナックス先生

コウ君、諦めるのはまだ早いわ。
実はWindows Server 2016以降、OSレベルで「コンテナ」に対応しているの。
Linux上のDockerと同じコマンドで、Windowsアプリをコンテナ化できるのよ。
でも、Linuxコンテナとは「カーネルの扱い」が決定的に違うから、そこを理解しないと大怪我をするわ。
最後もウィンドウズ先生に締めてもらいましょう!

ウィンドウズ先生

はい、ウィンドウズ先生です。
Linuxエンジニアの皆さんが大好きなDocker、実はWindowsでも(ほぼ)そのまま使えます。
しかし、Windowsコンテナには「プロセス分離」「Hyper-V分離」という2つのモードがあり、さらに「OSバージョンの厳密な一致」という厳しい制約があります。
最終回は、これらWindowsコンテナ特有の落とし穴を回避し、レガシーなWindowsアプリをモダンなコンテナ基盤へと昇華させる技術を伝授します。

本記事では、Hyper-Vの基礎から、Windowsコンテナのアーキテクチャ、Dockerfileの書き方、そしてKubernetesでのハイブリッド運用までを徹底解説します。


第1章:Hyper-Vの基礎。「Type 1」の威力

Windowsコンテナの話をする前に、その土台となる仮想化技術「Hyper-V」について理解しておく必要があります。

ホスト型 vs ハイパーバイザー型

  • VirtualBox / VMware Workstation (ホスト型): OSの上にアプリとして仮想化ソフトが乗ります。手軽ですがオーバーヘッドが大きいです。
  • Hyper-V (Type 1 ハイパーバイザー型): ハードウェアの直上でハイパーバイザーが動き、その上で「親パーティション(管理用Windows)」と「子パーティション(ゲストVM)」が動きます。

実は、Hyper-Vを有効にした時点で、あなたが操作しているWindows OS自体も、ハイパーバイザーの上で動く「特権的な仮想マシン」になっているのです。
これが、Hyper-Vが高性能である理由です。

ネストされた仮想化 (Nested Virtualization)

「VMの中でさらにHyper-Vを動かす」技術です。
これにより、Azure上のWindows VMの中でさらにDockerを動かしたり、WSL2を動かしたりすることが可能になります。
開発環境や検証環境では必須の技術です。

# PowerShellでネスト仮想化を有効にする(ホスト側で実行)
Set-VMProcessor -VMName "Dev-VM" -ExposeVirtualizationExtensions $true

第2章:Windowsコンテナとは何か? Linuxコンテナとの違い

「Dockerコンテナ」と言った場合、通常はLinuxコンテナ(LCOW)を指しますが、Windowsコンテナ(WCOW)は中身が全く異なります。

項目 Linuxコンテナ Windowsコンテナ
カーネル ホストのLinuxカーネルを共有 ホストのWindowsカーネルを共有(またはHyper-Vで分離)
ベースイメージ Alpine, Ubuntu (数MB〜数百MB) Nano Server, Server Core (数百MB〜数GB)
実行可能アプリ Linuxバイナリ (ELF) Windowsバイナリ (EXE, DLL)
管理コマンド docker, kubectl docker, kubectl (同じ!)

つまり、Windowsコンテナの中身は「ミニマムなWindows OS」です。
そのため、IISや.NET Framework(非Core)、PowerShellなどがそのまま動作します。


第3章:2つの分離モード。「プロセス分離」と「Hyper-V分離」

Windowsコンテナには、Linuxにはない独自の概念「分離モード(Isolation Mode)」があります。
ここが最大のハマりポイントです。

1. プロセス分離モード (Process Isolation)

Linuxコンテナと同様に、ホストOSのカーネルを共有します。
メリット: 軽量、高速、メモリ効率が良い。
デメリット: ホストOSとコンテナイメージのビルド番号(例:10.0.20348)が完全に一致していなければ動かない。

この制約が極めて厳しいです。
ホストがWindows Server 2019なら、コンテナも2019でなければなりません。2022のコンテナは動きません。

2. Hyper-V分離モード (Hyper-V Isolation)

各コンテナを軽量なHyper-V仮想マシン(Utility VM)の中で動かします。
独自カーネルを持つため、ホストOSとのバージョン不一致が許容されます。
メリット: カーネルバージョンが違っても動く。セキュリティが高い。
デメリット: VMを立ち上げるため、起動が遅くメモリを食う。

💡 プロの選択基準
Windows Server上: デフォルトは「プロセス分離」。パフォーマンス重視ならこれ一択。ただしOSバージョンの管理が必要。
Windows 10/11上: デフォルトは「Hyper-V分離」。開発環境ではこちらが使われる(カーネル不一致が前提のため)。


第4章:Windows ServerへのDockerインストール

Windows ServerにDockerを入れる場合、「Docker Desktop」は使いません(GUIが必要で、サーバー向きではないため)。
Microsoftが提供するPowerShellモジュールを使って、エンジン(Docker EE/CE)のみをインストールします。

インストール手順(PowerShell)

# 1. コンテナ機能の有効化
Install-WindowsFeature -Name Containers
Restart-Computer -Force

# 2. Dockerプロバイダーのインストール
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force

# 3. Dockerエンジンのインストール
Install-Package -Name docker -ProviderName DockerMsftProvider
Restart-Computer -Force

# 4. 確認
docker version

これで、Linuxと同じ docker コマンドが使えるようになります。


第5章:実践!IISコンテナのビルドと実行

それでは、IISが動くWebサーバーコンテナを作ってみましょう。
ベースイメージには、GUIを含まない軽量な「Server Core」を使います。

Dockerfileの作成

Linuxでは RUN apt-get ... ですが、Windowsでは RUN powershell ... になります。

# ベースイメージ(ホストOSとバージョンを合わせる)
FROM mcr.microsoft.com/windows/servercore:ltsc2022

# PowerShellをデフォルトシェルに設定
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

# IISのインストール
RUN Install-WindowsFeature -Name Web-Server

# コンテンツの配置(index.htmlを書き換え)
RUN Set-Content -Path "C:\inetpub\wwwroot\index.html" -Value "<h1>Hello from Windows Container!</h1>"

# ポート公開
EXPOSE 80

# サービス監視(コンテナが終了しないようにする)
CMD ["C:\\ServiceMonitor.exe", "w3svc"]

ビルドと実行

docker build -t my-iis .
docker run -d -p 8080:80 --name iis-test my-iis

ブラウザで http://localhost:8080 にアクセスし、「Hello from Windows Container!」と表示されれば成功です。
VMを立てるよりも圧倒的に速く、IIS環境が手に入りました。


第6章:ベースイメージの罠。「Nano Server」vs「Server Core」

Windowsコンテナには主に2種類のベースイメージがあります。

1. Nano Server

  • サイズ: 極小(圧縮後 100MB程度)。
  • 特徴: 32bitアプリ非対応。.NET Core (modern .NET) アプリ専用。PowerShell Coreのみ搭載。
  • 用途: Go, Node.js, .NET 6/7/8 などのモダンアプリ。

2. Server Core

  • サイズ: 巨大(圧縮後 1.5GB〜3GB)。
  • 特徴: 従来のWindows APIの大部分をサポート。IISや完全な.NET Frameworkが動く。
  • 用途: 既存のレガシーアプリ(ASP.NET MVCなど)のコンテナ化。

💡 ウィンドウズ先生の注意喚起
Linuxエンジニアは「Alpine Linux(5MB)」の感覚でいると、Windowsコンテナのサイズ(GB単位)に腰を抜かします。
docker pull が終わるまで数分かかることもザラです。
レガシー移行なら「Server Core」、新規開発なら「Nano Server」と使い分けることが、ディスク容量とデプロイ時間を守る鍵です。


第7章:Kubernetesでのハイブリッド運用

Windowsコンテナは、Kubernetesクラスターに参加できます。
これにより、LinuxノードとWindowsノードが混在する「ハイブリッドクラスター」が構築可能です。

TaintsとTolerations、NodeSelector

Linux用コンテナが間違ってWindowsノードにスケジューリングされないように(逆もしかり)、K8sのマニフェストで制御する必要があります。

apiVersion: v1
kind: Pod
metadata:
  name: win-web
spec:
  containers:
  - name: iis
    image: my-iis:latest
  # Windowsノードでのみ実行する指定
  nodeSelector:
    kubernetes.io/os: windows
  # WindowsノードのTaint(汚れ)を許容する設定
  tolerations:
  - key: "os"
    value: "windows"
    effect: "NoSchedule"

これにより、LinuxアプリはLinuxノードへ、WindowsアプリはWindowsノードへと、K8sが自動的に振り分けてくれます。
管理画面(Web UI)やDBはLinux、業務ロジックだけWindows、といった柔軟な構成が可能になります。


講座総まとめ:LinuxエンジニアがWindowsを知る意味

全8回の講座、本当にお疲れ様でした!
これまでの学びを振り返りましょう。

  1. 第1回: Windowsは「APIとオブジェクト」のOSであり、PowerShellが最強の武器であることを学びました。
  2. 第2回: 世界の認証基盤、Active Directoryの仕組みをLinux用語で解読しました。
  3. 第3回: NTFS権限とAGDLP戦略で、堅牢なファイルサーバーを構築しました。
  4. 第4回: IISのアプリケーションプールを知り、Webサーバーを自動構築しました。
  5. 第5回: WSL2によって、Windowsが最高のLinux開発機になることを体験しました。
  6. 第6回: WSUSとGPOで、勝手なアップデートを封じ込めました。
  7. 第7回: イベントビューアとパフォーマンスモニターで、障害の原因を突き止めました。
  8. 第8回: そして今回、Windowsコンテナでレガシー資産をモダンな基盤へ移行する道筋が見えました。
ウィンドウズ先生

コウ君、そして読者の皆さん。
「Windowsは分からないから嫌い」という食わず嫌いは解消されましたか?
クラウド全盛の今でも、企業のオンプレミス環境にはWindows Serverが残り続けます。
LinuxもWindowsも両方分かり、それらを繋ぐことができるエンジニアこそが、これからの時代に求められる「真のフルスタックエンジニア」です。
この講座が、皆さんのキャリアの新しい武器になることを願っています。

コウ君

先生たち、ありがとうございました!
もうWindows画面を見ても蕁麻疹が出なくなりました。
むしろPowerShellで自動化するのが楽しくなってきました!
これからはLinuxとWindows、二刀流で頑張ります!

これで「LinuxエンジニアのためのWindows Server入門講座」は完結です。
しかし、技術の進化は止まりません。Windows Server 2025、Azure Stack HCI、そしてAIとの統合。
学び続けることを止めないでください。

Happy Hacking Windows!

▼ Windowsコンテナを動かしてみる ▼

Docker環境を構築する
「おすすめVPS」

おすすめVPSを見る

コンテナ技術を活かす
「ITエンジニア転職」

転職エージェントを見る

コメント