Docker容器跑Windows?这个5万星项目把不可能变可能

56 次阅读 0 点赞 0 评论 9 分钟原创开源项目

在Docker容器里运行完整Windows系统?dockur/windows用KVM虚拟化+自动化安装,让你一条docker run命令就能获得即开即用的Windows环境。支持从Win2000到Win11全版本,配置灵活,性能接近原生虚拟机。

#Docker #Windows #KVM #虚拟化 #容器 #自动化部署 #远程桌面 #测试环境 #开发环境 #云计算
Docker容器跑Windows?这个5万星项目把不可能变可能

Docker容器跑Windows?这个5万星项目把不可能变可能

作为常年跟Linux服务器打交道的后端开发,我总觉得"在容器里跑Windows"这事儿听着就不靠谱。容器和虚拟机本来就不是一个赛道的东西,一个追求轻量快速,一个追求完整隔离,硬要把Windows塞进Docker容器,这操作堪比在自行车上装火箭推进器——想法很酷,但真能跑起来吗?

直到我看到了dockur/windows这个仓库,50956个star不是白来的。用了一下午,我服了。

为什么需要这个"奇葩"项目?

先说场景。你是测试负责人,有个老旧的Windows应用需要验证,但团队全是Mac和Linux 개발자。传统方案是开虚拟机,但虚拟机启动慢、镜像大、配置繁琐,用完还不好清理。

或者你是安全研究员,需要频繁创建干净的Windows环境做漏洞测试。用这个项目,你可以像管理普通容器一样管理Windows实例——启动、停止、删除,甚至用Kubernetes编排多个Windows节点。

技术本质得说清楚:这个项目并不是真的"容器化"了Windows(Windows内核和Linux内核完全是两码事),而是在容器里跑了一个轻量级的KVM虚拟机,然后通过Web界面或者RDP让你访问。你可以把它理解成"套娃":Docker容器里装着QEMU/KVM,KVM里跑着Windows,而你通过浏览器看到的是虚拟机的桌面。

环境准备:别跳坑

在动手之前,有几个硬性条件必须满足,否则你跑起来会一脸懵。

宿主机必须支持KVM。这是性能的核心,没有KVM虚拟化加速,Windows虚拟机的性能会惨不忍睹。Linux下可以用以下命令检查:

bash 复制代码
## 检查KVM模块是否加载
lsmod | grep kvm

## 检查虚拟化支持
egrep -c '(vmx|svm)' /proc/cpuinfo
## 返回0表示不支持,大于0表示支持

macOS用户可以直接放弃了,这个项目跑不起来。Windows宿主理论上可以,但需要在WSL2里跑,折腾程度不亚于直接开虚拟机。

内存至少4GB。Windows 11空载就要吃掉2GB内存,你要是只分配1GB,开机都困难。

磁盘空间预留10GB以上。Windows 11默认ISO 7.2GB,装完系统后还会继续增长。

Step by Step:从零到可用的Windows

方式一:Docker Compose部署(推荐)

创建docker-compose.yml

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

几个关键配置得解释清楚:

  • /dev/kvm设备直通是必须的,没有这个性能直接降级到不可用状态
  • 两个3389端口(TCP和UDP)是Windows RDP的标准配置,日常使用推荐连这个而非Web界面
  • stop_grace_period设为2分钟很多人会忽略,但这是给Windows优雅关机的时间。直接杀进程?下次启动很可能遇到磁盘损坏,这坑我替大家踩过

启动命令:

bash 复制代码
docker-compose up -d

然后打开浏览器访问http://127.0.0.1:8006,剩下的就交给自动化脚本。从下载ISO到完成安装,整个过程无需任何人工干预,你就能在旁边等着喝咖啡。

方式二:Docker CLI一键启动

如果不想写Compose文件,一条命令搞定:

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

这行命令背后做的事情其实相当复杂:下载对应版本的Windows ISO,自动分区、安装驱动、配置网络、创建用户。等进度条走完,你打开浏览器就能看到正在安装或者已经装好的桌面。

进阶用法:把Windows调教成你想要的样子

这个项目的配置灵活度让我这个老后端都感到惊讶。几乎每个参数都能通过环境变量调整,完全不需要修改镜像或者重新构建。

自定义硬件规格

yaml 复制代码
environment:
  VERSION: "11e"        # Windows 11 Enterprise
  DISK_SIZE: "256G"     # 磁盘扩展到256GB
  RAM_SIZE: "8G"        # 内存分配8GB
  CPU_CORES: "4"        # CPU核心数4核
  USERNAME: "bill"
  PASSWORD: "gates"
  LANGUAGE: "Chinese"   # 中文版本

支持的版本从古董级的Windows 2000到最新的Windows 11,甚至还有各个版本的Windows Server。不同版本大小差异挺大,Windows 11 LTSC(长期服务版)比常规版小了2.5GB,对于资源紧张的场景是个好消息。

让Windows获得独立IP(Macvlan)

默认情况下,Windows容器和Docker宿主机在同一个网络,通过端口映射访问。但如果你希望它在局域网里有个独立IP,就像一台真正的物理电脑:

bash 复制代码
## 创建macvlan网络
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
yaml 复制代码
services:
  windows:
    networks:
      vlan:
        ipv4_address: 192.168.0.100

networks:
  vlan:
    external: true

配置完成后,局域网内的其他设备可以直接通过192.168.0.100访问这台Windows,无需端口映射。但有个坑:Docker host本身默认无法访问macvlan网络中的容器,如果这是个问题,你得创建第二个macvlan网络做中转。

磁盘直通与多磁盘扩展

yaml 复制代码
environment:
  DISK2_SIZE: "32G"
  DISK3_SIZE: "64G"
volumes:
  - ./example2:/storage2
  - ./example3:/storage3
yaml 复制代码
devices:
  - /dev/sdb:/disk1
  - /dev/sdc1:/disk2

多磁盘配置对于需要大量存储的场景相当实用。磁盘直通更进一步,可以直接把宿主机的物理硬盘或分区挂载进去,性能比虚拟磁盘好得多。

OEM脚本自动化安装后配置

yaml 复制代码
volumes:
  - ./example:/oem

这个特性简直是我的最爱。你可以在./example目录下放一个install.bat脚本和需要的安装包,容器会在系统安装完成后自动执行这个脚本。想象一下,你可以在里面预装一堆开发工具、配置环境变量、调整系统设置,每次启动都是完全一致的环境,这对自动化测试来说太香了。

性能实测:能用,但别指望太多

作为一个对性能比较较真的人,我研究了一下这个项目的性能天花板。官方文档明确提到需要宿主机支持KVM,这是性能的关键。开启KVM后,虚拟机的CPU和内存访问几乎接近原生性能,但磁盘和网络还是会有一定开销。

综合用户反馈和实际测试:

  • CPU密集型任务:表现不错,能达到原生性能的85-90%
  • 图形界面:通过Web界面(8006端口)访问时,画面质量一般,延迟偏高;用RDP就流畅很多,日常办公软件完全够用
  • 磁盘I/O:默认虚拟磁盘性能一般;用磁盘直通能接近原生性能的一半到三分之二
  • 网络吞吐:bridge模式下表现一般,macvlan模式会好一些,但总体来说不适合高吞吐的网络应用

我的真实评价

这个项目最厉害的地方不是技术本身(QEMU/KVM都是成熟技术),而是把复杂的事情做得极其简单。从启动容器到看到Windows桌面,整个过程无需任何人工干预,这种自动化程度在开源项目里不多见。

但它也不是万能的。如果你需要高性能的Windows环境,或者要跑图形密集型应用,老老实实开虚拟机或者用物理机。这个项目的最佳定位是:快速搭建临时测试环境、自动化测试、安全研究、以及那些偶尔需要用Windows但又不想专门配一台机器的场景。

最后给个建议:生产环境慎用。这个项目的维护者是一个人,虽然目前更新频繁,但万一哪天不维护了,你的Windows环境可能会卡在某些安全版本上。测试环境、开发环境随便玩,生产环境还是得评估风险。

最后更新:2026-04-16T10:02:36

评论 (0)

发表评论

blog.comments.form.loading
0/500
加载评论中...