dockurr/windows 是一个强大的 Docker 镜像,它允许用户在 Docker 容器内运行完整的 Windows 操作系统。借助 KVM 硬件加速和自动化安装流程,用户可以轻松地部署和使用一个虚拟化的 Windows 环境。

核心特性 ✨

  • ISO 自动下载: 根据配置自动下载所需的 Windows 安装镜像。
  • KVM 硬件加速: 利用 Linux 内核的 KVM (Kernel-based Virtual Machine) 提供接近原生的虚拟化性能。
  • Web 界面查看器: 提供一个基于 Web 的界面,方便在安装过程中和安装后进行访问和操作。
  • 全自动安装: 从系统安装到基本设置,整个过程无需人工干预。

快速上手与使用方法 🐳

最简单的方式是使用 Docker Compose 或 Docker CLI。

容器启动后安装可能需要一两个小时,logs或者访问ip:8006看安装进度,全程自动安装

1. 通过 Docker Compose:

services:
  windows:
    image: dockurr/windows
    container_name: windows
    environment:
      VERSION: "11" # 可选:指定 Windows 版本,默认为 11 Pro
      # DISK_SIZE: "128G" # 可选:设置磁盘大小,默认 64G
      # RAM_SIZE: "8G"     # 可选:设置内存大小,默认 4G
      # CPU_CORES: "4"     # 可选:设置 CPU 核心数,默认 2
    devices:
      - /dev/kvm        # 必须:启用 KVM 加速
      - /dev/net/tun    # 可选:某些网络模式需要
    cap_add:
      - NET_ADMIN     # 可选:某些网络模式需要
    ports:
      - 8006:8006      # Web 查看器端口
      - 3389:3389/tcp  # RDP 远程桌面端口 (TCP)
      - 3389:3389/udp  # RDP 远程桌面端口 (UDP)
    volumes:
      - ./windows:/storage # Windows 磁盘文件存储位置
      # - ./mydata:/data   # 可选:共享主机文件夹到 Windows 的 \\host.lan\Data
    restart: always
    stop_grace_period: 2m # 优雅停机时间

2. 通过 Docker CLI:

docker run -it --rm --name windows \
  -p 8006:8006 \
  -p 3389:3389/tcp -p 3389:3389/udp \
  --device=/dev/kvm \
  --device=/dev/net/tun --cap-add NET_ADMIN \
  -v ${PWD:-.}/windows:/storage \
  -e VERSION="11" \ # 可选:指定版本
  --stop-timeout 120 \
  dockurr/windows

基本使用流程:

  1. 启动容器 (使用 docker-compose up -d 或 docker run ...)。
  2. 在浏览器中访问 http://<你的主机IP>:8006
  3. 等待全自动安装完成。你会看到 Windows 的安装过程,最后进入桌面。
  4. 安装完成后,即可通过 Web 查看器或 RDP (推荐) 使用 Windows。

常见配置与问答 (FAQ) 💬

  • 选择 Windows 版本:

    • 通过环境变量 VERSION 指定。可选值包括:11 (Win11 Pro), 10 (Win10 Pro), 11l (Win11 LTSC), 10l (Win10 LTSC), 2022 (Server 2022), xp (XP Pro), 7e (Win7 Ent), 2k (Win2k Pro) 等。
    • 也可以指定一个 ISO 文件的 URL: VERSION: "https://example.com/win.iso"
    • 或者使用本地 ISO 文件:挂载本地 ISO 到容器内的 /custom.iso,如 volumes: - ./my-windows.iso:/custom.iso
  • 更改存储位置和大小:

    • 存储位置:修改 volumes 中的 - ./windows:/storage 映射。
    • 磁盘大小:设置环境变量 DISK_SIZE,如 DISK_SIZE: "256G"。支持在线扩容现有磁盘。
  • 与主机共享文件:

    • 添加卷映射,如 volumes: - ./shared_folder:/data
    • 在 Windows 内部,访问网络邻居中的 host.lan,即可看到 Data 文件夹,对应主机上的 shared_folder
  • 调整 CPU 和内存:

    • 使用环境变量 CPU_CORES 和 RAM_SIZE,如 CPU_CORES: "4"RAM_SIZE: "8G"
  • 自定义用户名和密码:

    • 首次安装前,设置环境变量 USERNAME 和 PASSWORD。默认用户 Docker,密码 admin
  • 选择语言、区域和键盘布局:

    • 首次安装前,设置环境变量 LANGUAGE (如 "French""Chinese"), REGION (如 "zh-CN"), KEYBOARD (如 "zh-CN")。
  • 选择系统版本 (Edition):

    • 对于 Server 版本,可以通过 EDITION: "core" 选择无 GUI 的 Core 版本 (需在首次安装前设置)。
  • 运行安装后脚本:

    • 创建一个包含 install.bat 脚本和所需文件的文件夹 (例如 my_oem_files)。
    • 将该文件夹挂载到容器的 /oemvolumes: - ./my_oem_files:/oem
    • install.bat 会在自动安装的最后阶段执行。
  • 手动安装:

    • 设置环境变量 MANUAL: "Y",将禁用自动安装流程。不推荐,因为自动安装会应用很多优化设置。
  • 使用 RDP 连接:

    • Web 查看器主要用于安装过程,功能有限。
    • 推荐使用标准的 RDP 客户端 (如 Windows 自带的 mstsc,或 FreeRDP) 连接到容器的 IP 地址和端口 3389。默认用户名 Docker,密码 admin
  • 分配独立 IP 地址 (Macvlan):

    • 可以创建 macvlan 网络,让容器获得与主机不同的、在局域网内可路由的 IP 地址。配置略复杂,需根据自身网络环境创建 Docker network 并修改 Compose 文件。
    • 启用 macvlan 后,可进一步设置 DHCP: "Y" (并添加相关设备权限),让 Windows 直接从路由器获取 IP 地址。
  • 添加额外磁盘:

    • 设置环境变量 DISK2_SIZEDISK3_SIZE 等。
    • 同时添加对应的卷映射:volumes: - ./disk2_data:/storage2 - ./disk3_data:/storage3
  • 直通物理磁盘/分区:

    • 使用 devices 映射物理设备,如 devices: - /dev/sda:/disk1 (作为主磁盘,会被格式化) 或 - /dev/sdb1:/disk2 (作为额外磁盘,数据保留)。
  • 直通 USB 设备:

    • 查找设备的 Vendor ID 和 Product ID (用 lsusb)。
    • 设置环境变量 ARGUMENTS: "-device usb-host,vendorid=0xABCD,productid=0x1234"
    • 添加 devices: - /dev/bus/usb
  • KVM 支持验证:

    • 极其重要: 性能依赖 KVM。需要宿主机 CPU 支持并在 BIOS/UEFI 中启用虚拟化技术 (Intel VT-x 或 AMD-V/SVM)。
    • 在 Linux 下可用 sudo kvm-ok 命令检查。
    • 若在虚拟机中运行 Docker,需启用 "嵌套虚拟化"。
    • 某些云服务商可能不允许 KVM。
    • Docker Desktop for Windows/macOS 不支持 KVM 直通,性能会很差。推荐在 Linux 主机上使用 Docker Engine 或 Podman。
  • 合法性:

    • 项目本身只包含开源代码,不分发受版权保护的 Windows 镜像或密钥。安装过程中使用的密钥是微软提供的通用评估密钥。项目符合相关法律。

总结

dockurr/windows 提供了一种在 Docker 中便捷、高效地运行 Windows 虚拟环境的方案。其自动化安装、KVM 加速以及灵活的配置选项,使其非常适合开发测试、运行特定 Windows 应用或体验不同 Windows 版本等场景。但务必确保宿主机满足 KVM 要求以获得最佳性能。