Windows コンテナと Docker
〜 Window 専用コンテナの作成と実行 〜
2026-08-08 作成 福島
TOP > tips > docker-win
[ TIPS | TOYS | OTAKU | LINK | MOVIE | CGI | AvTitle | ConfuTerm | HIST | AnSt | Asob | Shell | GBC | LLM ]

0. 前置き

本稿は Windows Server で「Windows コンテナ」の実行環境を構築します。
実行するコンテナを作成するために、Windows コンテナの作成環境も構築します。

Linux コンテナなら Linux / MacOS / Windows のどこでも実行できますが、
Windows コンテナは Windows / Windows Server だけが実行環境になります。

Windows コンテナは GUI を扱えません。実装するとしたら下記のようなものに使用できます。
Python や PHP を動作させるなら Linux を使用するので、Windows コンテナを動作させる場合は Microsoft のアプリに限定されます。


コンテナ機構は主にサービスとして提供されるものであり、Windows でサービスを提供することが前提となるので、Windows Server を使用します。
一方、コンテナ作成は主にクライアント PC で実施するため、作成と実行を分離して開発します。
したがって、以下の構成を想定しています。
注意:Windows Server では、いつもの GUI インストールは使用できません。
GUI 管理コンソールとして Portainer を動作させます。(Portaner もコンテナのひとつ)
デファクトである Docker が Windows Server 用の Docker Desktop を提供していない

実行環境
項目内容備考
基本ソフトコンテナ実行Windows Server 2025 Standard 24H2本稿記述時の最新版
コンテナ作成Windows11 Pro 25H2
コンテナエンジンDocker Engine - Community 29.7.2
確認用
コンテナイメージ
IIS (Web サーバ)iis:windowsservercore-ltsc2025Windows コンテナは環境依存が強いためバージョンを指定している
LTSC: Long-Term Servicing Channel
PowerShell (REPL)powershell:nanoserver-ltsc2022


1. コンテナ作成・実行環境 (Docker Engine) をインストールする。

1-1. コンテナ機能を有効にするため、下記のどちらかを実行する。
1-1-a. … Windows Server 2025
1-1-b. … Windows11
1-1-a. コンテナ機能を有効にする。(Windows Server 2025 の場合)
− □ × 
 >_ 管理者: Windows PowerShell ×   + |
 
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows  

PS C:\> # コンテナ機能を有効化する
PS C:\> Install-WindowsFeature -Name Containers 

Success Restart Needed Exit Code      Feature Result
------- -------------- ---------      --------------
True    Yes            SuccessRest... {コンテナー}
警告: インストール処理を完了するには、このサーバーを再起動する必要があります。

PS C:\> # PC を再起動させる
PS C:\> shutdown /r /t 0 

1-1-b. コンテナ機能を有効にする。(Windows11 の場合)
− □ × 
 >_ 管理者: Windows PowerShell ×   + |
 
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows  

PS C:\> # コンテナ機能を有効化する
PS C:\> Enable-WindowsOptionalFeature -All -Online `
 -FeatureName Containers, Microsoft-Hyper-V 
この操作を完了するために、今すぐコンピューターを再起動しますか?
[Y] Yes  [N] No  [?] ヘルプ (既定値は "Y"): y 


ここで再起動する

1-2. Docker の環境をインストールする。
Windows Server 2025 / Windows11 の両方で実施する。

− □ × 
 >_ 管理者: Windows PowerShell ×   + |
 
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows  

PS C:\> # Docker Engine をダウンロードする
PS C:\> Invoke-WebRequest `
-UseBasicParsing "https://download.docker.com/win/static/stable/x86_64/docker-29.7.2.zip" `
-OutFile "docker.zip" 

PS C:\> # Docker Engine を展開・設置する
PS C:\> Expand-Archive -Path "docker.zip" -DestinationPath "C:\Program Files\" -Force  

PS C:\> # Docker Engine のパスを設定する
PS C:\> $env:Path += ";C:\Program Files\docker"  
PS C:\> [Environment]::SetEnvironmentVariable("Path",
 $env:Path, [EnvironmentVariableTarget]::Machine)  

PS C:\> # Docker Engine のバージョンを確認する (まだ Client だけ確認)
PS C:\> docker version  
Client:
 Version:           29.7.2
 API version:       1.55
 Go version:        go1.26.5
 Git commit:        a7dcaa6
 Built:             Wed Aug  5 18:31:33 2026
 OS/Arch:           windows/amd64
 Context:           default
failed to connect to the docker API at npipe:////./pipe/docker_engine; check if the path
 is correct and if the daemon is running: open //./pipe/docker_engine: The system cannot
 find the file specified.
↑ Docker Engine の起動前なので failed が表示されている

PS C:\> # Docker Engine をサービスとして登録する
PS C:\> & "C:\Program Files\docker\dockerd.exe" --register-service  

PS C:\> # Docker Engine サービスを起動する
PS C:\> Get-Service docker  

Status   Name               DisplayName
------   ----               -----------
Stopped  docker             Docker Engine   ← Stopped: 未起動

PS C:\> Start-Service docker  
PS C:\> Get-Service docker  

Status   Name               DisplayName
------   ----               -----------
Running  docker             Docker Engine   ← Running: 起動した

PS C:\> # Docker Engine のバージョンを確認する (Docker Engine も確認)
PS C:\> docker version  
Client:
 Version:           29.7.2
 API version:       1.55
 Go version:        go1.26.5
 Git commit:        a7dcaa6
 Built:             Wed Aug  5 18:31:33 2026
 OS/Arch:           windows/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          29.7.2
  API version:      1.55 (minimum version 1.40)
  Go version:       go1.26.5
  Git commit:       6a43e3d
  Built:            Wed Aug  5 18:28:13 2026
  OS/Arch:          windows/amd64
  Experimental:     false

PS C:\> exit 

1-3. 動作確認をする。
Windows Server 2025 / Windows11 の両方で実施する。

− □ × 
 >_ 管理者: Windows PowerShell ×   + |
 
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows  

PS C:\> # コンテナの動作確認をする (Windows Server 2025 は --isolation=hyperv も可*1)
PS C:\> docker pull hello-world  
PS C:\> docker run --isolation=process --pull never --name hello-container hello-world  
Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (windows-amd64, nanoserver-ltsc2025) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run a Windows Server container with: PS C:\> docker run -it mcr.microsoft.com/windows/servercore:ltsc2025 powershell Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
PS C:\> docker rm hello-container PS C:\> docker rmi hello-world PS C:\> exit
*1--isolation の互換性はここを参照。
物理サーバや仮想化がネストされている場合に =hyperv を指定可能。
=process ならネストされていない仮想 Windows でも動作する上に軽量かつ高速。


2. Windows コンテナを実行する。

Windows Server 2025 で実施する。

− □ × 
 >_ 管理者: Windows PowerShell ×   + |
 
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows  

PS C:\> # IIS コンテナを pull する (約 1.5GB: ダウンロードに 45 分間程度を要する)
PS C:\> docker pull mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2025 

PS C:\> # IIS コンテナを 実行する (-d でバックグラウンド実行)
PS C:\> docker run -d --isolation=process --pull never -p 80:80 --name iis-container `
mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2025 

PS C:\> # IIS コンテナの起動を確認する
PS C:\> docker ps --format "{{.Names}}, {{.CreatedAt}}" 
iis-container, 2026-08-07 08:16:07 +0900 JST

PS C:\> # Web コンテンツから Web サーバが IIS であることを確認する
PS C:\> (Invoke-WebRequest -UseBasicParsing http://localhost/).Headers 

Key            Value
---            -----
Accept-Ranges  bytes
Content-Length 703
Content-Type   text/html
Date           Thu, 06 Aug 2026 23:16:07 GMT
ETag           "3ac1630cc13dd1:0"
Last-Modified  Tue, 14 Jul 2026 20:04:39 GMT
Server         Microsoft-IIS/10.0   ← IIS になっている

PS C:\> # バックグラウンドの Windows コンテナを停止させる
PS C:\> docker stop iis-container 

PS C:\> # コンテナインスタンスとコンテナイメージを削除する
PS C:\> docker rm iis-container 
PS C:\> docker rmi mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2025 

PS C:\> exit 


3. Portainer のインストール

Windows Server 2025 で実施する。

3-1. Portaner をインストールする。
− □ × 
 >_ 管理者: Windows PowerShell ×   + |
 
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows  

PS C:\> # コンテナごとのデータ保存領域を確保する
PS C:\> docker volume create portainer-data 

PS C:\> # Portainer を pull する (Community Edition: Long Term Support)
PS C:\> docker image pull portainer/portainer-ce:lts 

PS C:\> # Portainer を起動する
PS C:\> docker run -d -p 9000:9000 --name portainer --restart=always `
-v \\.\pipe\docker_engine:\\.\pipe\docker_engine `
-v portainer-data:C:\data portainer/portainer-ce:lts 

PS C:\> # Setup token をログから抽出する (初回ログイン時にこの 64 文字が必要)*2
PS C:\> (docker logs portainer 2>&1 | Select-String "setup_token=.*").Matches.Value 
setup_token=7eed123456c98659e11edf8311ed66ffdbbb1df115a4ab46f0366ebe9b09189c

PS C:\> # ログの実体を表示する
PS C:\> $contId = docker inspect --format='{{.Id}}' portainer 
PS C:\> Get-Content -Tail 2 `
 C:\ProgramData\docker\containers\$contId\$contId-json.log 
{"log":"\u001b[90m2026/08/07 11:31AM\u001b[0m \u001b[32mINF\u001b[0m \u001b[1mgithub.com/ portainer/portainer/api/http/server.go:371\u001b[0m\u001b[36m \u003e\u001b[0m starting HT TPS server | \u001b[36mbind_address=\u001b[0m:9443\n","stream":"stderr","time":"2026-08-0 7T02:31:00.5120652Z"}{"log":"\u001b[90m2026/08/0 7 11:31AM\u001b[0m \u001b[32mINF\u001b[0m \u001b[1mgithub.com/ portainer/portainer/api/http/server.go:355\u001b[0m\u001b[36m \u003e\u001b[0m starting HT TP server | \u001b[36mbind_address=\u001b[0m:9000\n","stream":"stderr","time":"2026-08-07 T02:31:00.5120652Z"}
PS C:\> exit
3-2. Portainer の画面を確認する。
ブラウザで http://localhost:9000/ を表示する。

 初回アクセス時は管理者アカウントを作成しなければならない。
「Setup token」には上記 3-1*2 で抽出した文字列を記入する。
 ⇓


4. Windows コンテナの作成と実行

4-1. Windows11 でコンテナを作成する。(Windows Server 2025 でも作成可能)
− □ × 
 >_ 管理者: Windows PowerShell ×   + |
 
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows  

PS C:\> # Dockerfileを作成する
PS C:\> mkdir .\poor\ -Force
PS C:\> @"
# ベースイメージとして nanoserver を指定
FROM mcr.microsoft.com/powershell:nanoserver-ltsc2022
# ユーザとして Windows の既存管理者 ID を指定
USER ContainerAdministrator
# ワークディレクトリを指定
WORKDIR C:/workdir
# デフォルトシェルは省略可能
CMD ["pwsh.exe", "-NoExit", "-Command", \
"Write-Host '===================' -ForegroundColor Cyan; \
 Write-Host ' Windows Container ' -ForegroundColor Yellow; \
 Write-Host '===================' -ForegroundColor Cyan"]

"@ | % { [System.IO.File]::WriteAllText(".\poor\Dockerfile", $_,
 (New-Object System.Text.UTF8Encoding $false)) } 

PS C:\> # Docker イメージをビルドする*3
PS C:\> docker build --isolation=process -t windows-poor-app:latest .\poor\ 


PS C:\> # Windows コンテナを起動する (-i:interactive -t:tty) PS C:\> docker run -it --isolation=process --name windows-poor windows-poor-app:latest
=================== Windows Container =================== PS C:\workdir> exit
PS C:\> # Windows コンテナを停止する PS C:\> docker stop windows-poor PS C:\> docker rm windows-poor PS C:\> # Docker アーカイブファイルを作成する (.tar ファイルは実行環境へ転送する*4) PS C:\> docker save windows-poor-app -o windows-poor-app.tar
PS C:\> # イメージを削除する (必要なら) PS C:\> docker rmi windows-poor-app:latest PS C:\> exit
*3 :latest はバージョンタグ。省略可能だが、ここでは明示している。
4-2. Windows Server 2025 でコンテナを実行する。
− □ × 
 >_ 管理者: Windows PowerShell ×   + |
 
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows  

PS C:\> # Docker アーカイブファイルをロードする (上記 4-1*4で作成した .tar ファイル)
PS C:\> docker load -i windows-poor-app.tar 


PS C:\> # Windows コンテナを起動する PS C:\> docker run -it --isolation=process --name windows-poor windows-poor-app:latest
=================== Windows Container =================== PS C:\workdir> exit
PS C:\> # Windows コンテナを停止する PS C:\> docker stop windows-poor PS C:\> docker rm windows-poor PS C:\> exit