前言

在docker部署Windows系统,本质上是通过docker帮助管理一个kvm虚拟机,故类似的玩法仅限于物理机,或者已经开启了虚拟化透传的虚拟机、云服务器。开启了虚拟化的物理计算机可以玩,开启了虚拟化透传的虚拟机可以玩,绝大多数云服务器、VPS,还是洗洗睡吧。云服务器之类的基本上只能玩玩没有独立内核的openvz或者docker,或者以CPU模拟低效率的实现虚拟机。


项目推荐

实际上类似的项目相当多,但是许多项目实现的不是太多,仍然需要用户自备iso,安装系统镜像加载kvm虚拟设备驱动,因此从价值上,我推荐这个项目:https://github.com/dockur/windows

根据项目页面的描述,这个方式具有以下特性:

 - ISO下载

 - KVM加速

 - 基于WEB的查看器

此开源项目发布也就没几个月,类似的项目大多也都是差不多的时间。从开箱即用的角度,笔者推荐这个。

如果这种docker镜像做不到开箱即用还需要繁琐的系统部署流程,笔者认为不如随意找个主流的Linux发行版手搓kvm命令,或者以qemu-kvm之类的工具部署Windows虚拟机,或者直接在debian操作系统部署一个proxmox ve,嫌弃前者麻烦,后者太重,也有一些例如使用PHP ruby之类的语言编写的简单的基于网页管理的kvm虚拟机管理程序,基本的创建几个简单的虚拟机的需求,这种简单的小规模程序可能会更好:没那么多的东西,本身引入漏洞的风险小很多,也没太高的性能资源占用,特别适合内存不太多的情况。


使用方法

使用方法非常简单,官方给出了两种方式,docker-compose.yml以及直接docker run命令。

version: "3"
services:
  windows:
    image: dockurr/windows
    container_name: windows
    devices:
      - /dev/kvm
    cap_add:
      - NET_ADMIN
    ports:
      - 8006:8006
      - 3389:3389/tcp
      - 3389:3389/udp
    stop_grace_period: 2m
    restart: on-failure
docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows

运行命令后,程序就会自动开始运行Windows 11。可以通过浏览器访问运行docker的计算机的IP:8006端口操作Windows;也可以通过RDP协议连接运行docker的计算机的IP连接Windows的RDP服务,能够成功连接的前提是TCP8006,3389的TCP与UDP端口都没有被占用。

environment:
  VERSION: "win11"
-e VERSION= "win11"

通过传递环境变量可以控制自动下载的Windows版本。

Value

描述

提供者

国内下载速度

镜像大小

win11

Windows 11 Pro

Microsoft

极慢,可能很快

6.4 GB

win10

Windows 10 Pro

Microsoft

极慢,可能很快

5.8 GB

ltsc10

Windows 10 LTSC

Microsoft

极慢,可能很快

4.6 GB

win81

Windows 8.1 Pro

Microsoft

极慢,可能很快

4.2 GB

win7

Windows 7 SP1

Bob Pony

极慢

3.0 GB

vista

Windows Vista SP2

Bob Pony

极慢

3.6 GB

winxp

Windows XP SP3

Bob Pony

极慢

0.6 GB

2022

Windows Server 2022

Microsoft

极慢,可能很快

4.7 GB

2019

Windows Server 2019

Microsoft

极慢,可能很快

5.3 GB

2016

Windows Server 2016

Microsoft

极慢,可能很快

6.5 GB

2012

Windows Server 2012 R2

Microsoft

极慢,可能很快

4.3 GB

2008

Windows Server 2008 R2

Microsoft

极慢,可能很快

3.0 GB

core11

Tiny 11 Core

Archive.org

不可用

2.1 GB

tiny11

Tiny 11

Archive.org

不可用

3.8 GB

tiny10

Tiny 10

Archive.org

不可用

3.6 GB

默认情况是2核4G,分配了64G的磁盘空间。同样通过类似的参数可以自由指定:

environment:
  RAM_SIZE: "8G"
  CPU_CORES: "4"
  DISK_SIZE: "256G"

macvlan方式也可以让虚拟机自身直接得到当前局域网的IP地址,而不是与运行docker的计算机共享。也可以自行修改iso地址,VERSION: "win11"修改为例如VERSION: "http://ip/win.iso",就可用使用自定义的镜像了。