
Dockerコンテナ内でKVMアクセラレーション、自動インストール、カスタマイズ可能なリソースを使用してWindowsを実行します。複数のWindowsバージョン、USBパススルー、macvlanネットワーキングをサポートしています。
<h1 align="center">Windows<br />
<div align="center">
<a href="https://github.com/dockur/windows"><img src="https://raw.githubusercontent.com/dockur/windows/master/.github/logo.png" title="Logo" style="max-width:100%;" width="96" /></a>
</div>
<div align="center">
[![Build]][build_url]
[![Version]][tag_url]
[![Size]][tag_url]
[![Package]][pkg_url]
[![Pulls]][hub_url]
</div></h1>
Dockerコンテナ内で動作するWindows。
## 機能 ✨
- Dockerコンテナ内でWindowsを実行
- 自動ダウンロードとハンズフリーインストール
- 最新およびレガシーWindowsリリースに対応
- KVMアクセラレーションによるネイティブに近いパフォーマンス
- CPU、メモリ、ストレージの割り当てをカスタマイズ可能
- メモリバルーニングによる動的メモリ割り当て
- USBパススルーとホストフォルダ共有
- NAT、ユーザーモード、macvlan、macvtapネットワーキングに対応
## 動画 📺
[](https://www.youtube.com/watch?v=xhGYobuG508)
## 使い方 🐳
##### Docker Compose:
```yaml
services:
windows:
image: dockurr/windows
container_name: windows
environment:
VERSION: "11"
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 3389:3389/tcp
- 3389:3389/udp
volumes:
- ./windows:/storage
restart: always
stop_grace_period: 2m
```
##### Docker CLI:
```bash
docker run -it --rm --name windows -e "VERSION=11" -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --stop-timeout 120 docker.io/dockurr/windows
```
##### Kubernetes:
```shell
kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml
```
##### GitHub Codespaces:
[](https://codespaces.new/dockur/windows)
##### グラフィカルインストーラ:
[](https://winboat.app)
## 要件 ⚙️
- KVM対応のLinuxホスト上のDockerまたはPodman。
- ネストされた仮想化を有効にしたWindows 11上のDocker DesktopまたはPodman(Desktop)。
- 少なくとも4 GBの利用可能なRAM。
- 少なくとも64 GBの空きディスク容量。
> [!NOTE]
> Linux、macOS、Windows 10上のDocker Desktopは現在コンテナへのKVMアクセスを提供しておらず、サポートされていません。
## FAQ 💬
### 使い方は?
とても簡単です!以下の手順です:
- コンテナを起動し、Webブラウザで[ポート8006](http://127.0.0.1:8006/)に接続します。
- 魔法が起こるのを待つだけです。インストール全体が完全に自動で実行されます。
- デスクトップが表示されたら、Windowsのインストール完了です。
新しいマシンをお楽しみください。このリポジトリにスターを忘れずに!
### Windowsのバージョンを選択するには?
デフォルトではWindows 11 Proがインストールされます。しかし、composeファイルに環境変数`VERSION`を追加することで、別のWindowsバージョンをダウンロードするように指定できます:
```yaml
environment:
VERSION: "10"
```
以下の値から選択してください:
| **値** | **バージョン** | **サイズ** |
|---|---|---|
| `11` | Windows 11 Pro | 7.9 GB |
| `11l` | Windows 11 LTSC | 4.7 GB |
| `11e` | Windows 11 Enterprise | 6.6 GB |
||||
| `10` | Windows 10 Pro | 5.7 GB |
| `10l` | Windows 10 LTSC | 4.6 GB |
| `10e` | Windows 10 Enterprise | 5.2 GB |
||||
| `8e` | Windows 8.1 Enterprise | 3.7 GB |
| `7u` | Windows 7 Ultimate | 3.1 GB |
| `vu` | Windows Vista Ultimate | 3.0 GB |
| `xp` | Windows XP Professional | 0.6 GB |
| `2k` | Windows 2000 Professional | 0.4 GB |
||||
| `2025` | Windows Server 2025 | 7.6 GB |
| `2022` | Windows Server 2022 | 6.0 GB |
| `2019` | Windows Server 2019 | 5.3 GB |
| `2016` | Windows Server 2016 | 6.5 GB |
| `2012` | Windows Server 2012 | 4.3 GB |
| `2008` | Windows Server 2008 | 3.0 GB |
| `2003` | Windows Server 2003 | 0.6 GB |
> [!TIP]
> ARM64版Windowsをインストールするには[dockur/windows-arm](https://github.com/dockur/windows-arm/)を使用してください。
### ストレージ場所を変更するには?
ストレージ場所を変更するには、composeファイルに以下のバインドマウントを含めてください:
```yaml
volumes:
- ./windows:/storage
```
例のパス`./windows`を希望のストレージフォルダまたは名前付きボリュームに置き換えてください。
### ディスクサイズを変更するには?
デフォルトの64 GBを拡張するには、composeファイルに`DISK_SIZE`設定を追加し、希望の容量に設定します:
```yaml
environment:
DISK_SIZE: "256G"
```
> [!TIP]
> データを失うことなく既存のディスクをより大きな容量にリサイズするためにも使用できます。ただし、追加されたディスク領域は未割り当てとして表示されるため、その後手動で[ディスクパーティションを拡張](https://learn.microsoft.com/ja-jp/windows-server/storage/disk-management/extend-a-basic-volume?tabs=disk-management)する必要があります。
### ホストとファイルを共有するには?
インストール後、デスクトップに`Shared`というフォルダが作成され、ホストマシンとのファイル交換に使用できます。
この目的でホスト上のフォルダを選択するには、composeファイルに以下のバインドマウントを含めてください:
```yaml
volumes:
- ./example:/shared
```
例のパス`./example`を希望の共有フォルダに置き換えてください。そのフォルダが`Shared`として表示されます。
### CPUやRAMの量を変更するには?
デフォルトでは、Windowsは2つのCPUコアと4 GBのRAMを使用できます。
これを調整したい場合は、以下の環境変数を使用して希望の量を指定できます:
```yaml
environment:
RAM_SIZE: "8G"
CPU_CORES: "4"
```
### ユーザー名とパスワードを設定するには?
デフォルトでは、`Docker`というユーザーが作成され、パスワードは`admin`です。
インストール中に別の認証情報を設定したい場合は、composeファイルで設定できます:
```yaml
environment:
USERNAME: "bill"
PASSWORD: "gates"
```
### Windowsの言語を選択するには?
デフォルトでは、英語版のWindowsがダウンロードされます。
しかし、composeファイルに環境変数`LANGUAGE`を追加することで、別の言語を指定してダウンロードできます:
```yaml
environment:
LANGUAGE: "French"
```
選択肢は以下の通りです:🇦🇪 アラビア語、🇧🇬 ブルガリア語、🇨🇳 中国語、🇭🇷 クロアチア語、🇨🇿 チェコ語、🇩🇰 デンマーク語、🇳🇱 オランダ語、🇬🇧 英語、🇪🇪 エストニア語、🇫🇮 フィンランド語、🇫🇷 フランス語、🇩🇪 ドイツ語、🇬🇷 ギリシャ語、🇮🇱 ヘブライ語、🇭🇺 ハンガリー語、🇮🇹 イタリア語、🇯🇵 日本語、🇰🇷 韓国語、🇱🇻 ラトビア語、🇱🇹 リトアニア語、🇳🇴 ノルウェー語、🇵🇱 ポーランド語、🇵🇹 ポルトガル語、🇷🇴 ルーマニア語、🇷🇺 ロシア語、🇷🇸 セルビア語、🇸🇰 スロバキア語、🇸🇮 スロベニア語、🇪🇸 スペイン語、🇸🇪 スウェーデン語、🇹🇭 タイ語、🇹🇷 トルコ語、🇺🇦 ウクライナ語。
### キーボードレイアウトを選択するには?
選択した言語のデフォルトではないキーボードレイアウトやロケールを設定したい場合は、次のように`KEYBOARD`と`REGION`変数を追加します:
```yaml
environment:
REGION: "en-US"
KEYBOARD: "en-US"
```
### カスタムイメージをインストールするには?
サポートされていないISOイメージをダウンロードするには、環境変数`VERSION`にそのURLを指定します:
```yaml
environment:
VERSION: "https://example.com/win.iso"
```
または、ダウンロードをスキップしてローカルファイルを使用するには、次のようにcomposeファイルにバインドします:
```yaml
volumes:
- ./example.iso:/custom.iso
```
例のパス`./example.iso`を希望のISOファイルのファイル名に置き換えてください。この場合、`VERSION`の値は無視されます。
### インストール後にスクリプトを実行するには?
インストール後に独自のスクリプトを実行するには、`install.bat`というファイルを作成し、必要な追加ファイル(インストールするソフトウェアなど)と一緒にフォルダに配置します。
次に、そのフォルダを次のようにcomposeファイルにバインドします:
```yaml
volumes:
- ./example:/oem
```
フォルダ`./example`は`C:\OEM`にコピーされ、そのフォルダ内の`install.bat`ファイルが自動インストールの最後のステップで実行されます。
### 手動インストールを行うには?
仮想環境でWindowsを実行する際の一般的な問題を防ぐために、自動インストールを使用することをお勧めします。
ただし、どうしても手動でインストールしたい場合(自己責任で)、composeファイルに以下の環境変数を追加します:
```yaml
MANUAL: "Y"
```
### RDPで接続するには?
Webビューアーは主にインストール中に使用することを目的としており、RDPよりも応答性が低く、クリップボード共有などの機能をサポートしていません。
そのため、より良い体験を得るには、Microsoftリモートデスクトップクライアントを使用してコンテナのIPに接続し、ユーザー名`Docker`、パスワード`admin`を使用してください。
RDPクライアントは、Playストアから[Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx)用、Appleストアから[iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB)用が入手可能です。Linuxでは[FreeRDP](https://www.freerdp.com/)を使用でき、Windowsでは検索ボックスに`mstsc`と入力するだけです。
### オーディオを有効にするには?
RDPを使用している場合を除き、オーディオはデフォルトで無効になっています。ブラウザにストリーミングするには、以下の環境変数を追加します:
```yaml
environment:
AUDIO: "Y"
```
次に、Webビューアーの**設定 → 詳細**で**オーディオ**を有効にします。ストリームはこのオプションが有効な間のみアクティブになるため、それ以外では余分な帯域幅を使用しません。
### コンテナに個別のIPアドレスを割り当てるには?
デフォルトでは、コンテナはブリッジネットワーキングを使用し、ホストとIPアドレスを共有します。
コンテナに個別のIPアドレスを割り当てたい場合は、次のようにmacvlanネットワークを作成できます:
```bash
docker network create -d macvlan \
--subnet=192.168.0.0/24 \
--gateway=192.168.0.1 \
--ip-range=192.168.0.100/28 \
-o parent=eth0 vlan
```
ローカルサブネットに合わせてこれらの値を変更してください。
ネットワークを作成したら、composeファイルを次のように変更します:
```yaml
services:
windows:
container_name: windows
..<snip>..
networks:
vlan:
ipv4_address: 192.168.0.100
networks:
vlan:
external: true
```
このアプローチの追加の利点は、すべてのポートがデフォルトで公開されるため、ポートマッピングを行う必要がなくなることです。
> [!IMPORTANT]
> macvlanの設計により、このIPアドレスはDockerホストからアクセスできません。macvlanはホストとコンテナ間の通信を許可しないためです。これが懸念される場合は、回避策として[2番目のmacvlan](https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/#host-access)を作成する必要があります。
### WindowsがルーターからIPアドレスを取得するには?
コンテナを[macvlan](#コンテナに個別のipアドレスを割り当てるには)用に設定した後、実際のPCのようにルーターにIPを要求してWindowsをホームネットワークの一部にすることが可能です。
このモード(コンテナとWindowsが別々のIPアドレスを持つ)を有効にするには、composeファイルに次の行を追加します:
```yaml
environment:
DHCP: "Y"
devices:
- /dev/vhost-net
device_cgroup_rules:
- 'c *:* rwm'
```
### 複数のディスクを追加するには?
追加のディスクを作成するには、composeファイルを次のように変更します:
```yaml
environment:
DISK2_SIZE: "32G"
DISK3_SIZE: "64G"
volumes:
- ./example2:/storage2
- ./example3:/storage3
```
### ディスクをパススルーするには?
ディスクデバイスやパーティションを直接パススルーするには、次のようにcomposeファイルに追加します:
```yaml
devices:
- /dev/sdb:/disk1
- /dev/sdc1:/disk2
```
メインドライブにしたい場合は`/disk1`を使用します(インストール中にフォーマットされます)。`/disk2`以降はセカンダリドライブとして追加され、そのまま保持されます。
### USBデバイスをパススルーするには?
USBデバイスをパススルーするには、まず`lsusb`コマンドでベンダーIDとプロダクトIDを調べ、次のようにcomposeファイルに追加します:
```yaml
environment:
ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
devices:
- /dev/bus/usb
```
> [!WARNING]
> Windowsセットアップが完了する前にUSBマスストレージデバイスを追加すると、セットアップが失敗する可能性があります。さらに悪いことに、ドライブがシステムディスクとしてフォーマットされ、すべてのデータが失われる可能性があります!そのため、初めてコンテナを起動するときは常にそれらを切断したままにしてください。
### これらが利用可能なすべてのオプションですか?
いいえ。サポートされているすべての設定の完全な概要については、[環境変数](https://github.com/dockur/windows/blob/master/docs/environment.md)のページを参照してください。
### KVMが利用可能かどうかを確認するには?
まず、プラットフォームとコンテナランタイムが上記の[要件](#要件-️)を満たしていることを確認してください。
Linuxホストで、`cpu-checker`をインストールして実行します:
```bash
sudo apt install cpu-checker
sudo kvm-ok
```
正しく構成されている場合、次のように報告されます:
```text
KVM acceleration can be used
```
KVMデバイスが存在することも確認できます:
```bash
ls -l /dev/kvm
```
KVMが利用できない場合は、以下を確認してください:
- BIOSまたはUEFIでハードウェア仮想化(`Intel VT-x`または`AMD-V`)が有効になっているか。
- ホスト自体が仮想マシンの場合、ネストされた仮想化が有効になっているか。
- VPSやクラウドプロバイダーがネストされた仮想化をサポートしているか。
`kvm-ok`が成功してもコンテナがKVMが利用できないと報告する場合は、権限やデバイスアクセスの問題を除外するために、一時的にComposeファイルに`privileged: true`を追加できます。
### コンテナ内でmacOSを実行するには?
[dockur/macos](https://github.com/dockur/macos)を使用できます。自動インストールを除き、同じ機能の多くを共有しています。
### コンテナ内でLinuxデスクトップを実行するには?
その場合は[qemus/qemu](https://github.com/qemus/qemu)を使用できます。
### このプロジェクトは合法ですか?
はい。このプロジェクトにはオープンソースコードのみが含まれており、Windows自体は配布していません。コード内にあるプロダクトキーは、すべてMicrosoftが試用目的で公開した汎用インストールキーであり、有効なアクティベーションライセンスではありません。
有効なWindowsライセンスを保有していること、および使用がMicrosoftのライセンス条件に準拠していることを確認する責任は利用者にあります。
## スター 🌟
[](https://github.com/dockur/windows/stargazers)
## 免責事項 ⚖️
*このプロジェクトで参照される製品名、ロゴ、ブランド、その他の商標は、それぞれの商標権者の財産です。このプロジェクトはMicrosoft Corporationと提携、スポンサー、または推奨するものではありません。*
[build_url]: https://github.com/dockur/windows/
[hub_url]: https://hub.docker.com/r/dockurr/windows/
[tag_url]: https://hub.docker.com/r/dockurr/windows/tags
[pkg_url]: https://github.com/dockur/windows/pkgs/container/windows
[Build]: https://github.com/dockur/windows/actions/workflows/build.yml/badge.svg
[Size]: https://img.shields.io/docker/image-size/dockurr/windows/latest?color=066da5&label=size
[Pulls]: https://img.shields.io/docker/pulls/dockurr/windows.svg?style=flat&label=pulls&logo=docker
[Version]: https://img.shields.io/docker/v/dockurr/windows/latest?arch=amd64&sort=semver&color=066da5
[Package]: https://img.shields.io/badge/dynamic/json?url=https://ipitio.github.io/backage/dockur/windows/windows.json&query=$.downloads&logo=github&style=flat&color=066da5&label=pulls