喵星之旅-狂奔的兔子-linux服务器启用windows(KVM)

前置条件

使用kvm技术

1
ls /dev/kvm

有输出文件 → 可以全速跑 Win10; 容器提示不存在 → 不能跑。

现状

解决方案

Linux:用 dockurr/windows 或 m1k1o/win10-in-docker,容器里跑 KVM + Win10,用浏览器 / VNC/RDP 连接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker run -d \
--name win10 \
--privileged \
--device /dev/kvm \
-p 18006:8006 \
-p 13389:3389 \
-e OS=win10 \
-e VERSION=10 \
-e CPU_CORES=3 \
-e RAM_SIZE=6G \
-e DISK_SIZE=40G \
-e USER="XXX" \
-e PASS="XXXX" \
-e USERNAME="XXX" \
-e PASSWORD="XXXX" \
-v /home/win10-data:/storage \
dockurr/windows

相关端口安全策略自行解决。

说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
容器需要 --privileged 权限,性能接近虚拟机,不是轻量容器。

-e OS=win10 操作系统,根据实际情况调整
-e VERSION=10 windows版本,根据实际情况调整

-e CPU_CORES=3 cpu核心数,根据实际情况调整
-e RAM_SIZE=6G 内存大小,根据实际情况调整
-e DISK_SIZE=40G 磁盘大小,根据实际情况调整
-e USER="XXX" vnc账号,登录vnc桌面的账号
-e PASS="XXXX" vnc密码,登录vnc桌面的密码
-e USERNAME="XXX" 系统的账号
-e PASSWORD="XXXX" 系统的密码
-v /home/win10-data:/storage 数据挂载路径,迁移系统的时候直接迁移这个文件夹

支持的系统

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
VERSION 值	系统版本	        大小
11 Windows 11 Pro 7.2 GB
11l Windows 11 LTSC 4.7 GB
11e Windows 11 企业版 6.6 GB
10 Windows 10 Pro 5.7 GB
10l Windows 10 LTSC 4.6 GB
10e Windows 10 企业版 5.2 GB
8e Windows 8.1 企业版 3.7 GB
7u Windows 7 旗舰版 3.1 GB
vu Windows Vista 旗舰版 3.0 GB
xp Windows XP 专业版 0.6 GB

VERSION 值 系统版本
2025 Windows Server 2025
2022 Windows Server 2022
2019 Windows Server 2019
2016 Windows Server 2016
2012 Windows Server 2012
2008 Windows Server 2008
2003 Windows Server 2003

常用合法 OS 值

1
2
3
4
5
win7
win10
win11
xp
server

容器迁移

dockurr/windows 这个 Docker 镜像本身不带 Windows 系统,它只是一个 “安装器 + 虚拟机管理器”,系统是容器第一次启动时自动下载、自动安装的。

镜像里到底有什么?
没有 Windows ISO,没有系统文件
只有:
一个精简的 Linux 环境(用来做宿主机)
QEMU/KVM(虚拟机软件)
自动安装脚本
noVNC(网页 VNC)

第一次启动容器时发生了什么?
容器启动 → 脚本检测到 /storage 是空的
自动从微软官网下载 Windows ISO(你指定的 Win10/Win11)
用 QEMU 启动虚拟机,全自动安装 Windows
安装过程中自动创建用户:Docker(你可以用环境变量改名字 / 密码)
安装完成后,把整个虚拟机磁盘保存到 /storage(宿主机的目录)

之后再启动容器,就不会重装了
因为 /storage 里已经有了虚拟机磁盘文件(.qcow2)
直接启动这个虚拟机,系统和数据都在
你之前设置的密码、安装的软件、文件全部保留

综上所述,迁移容器包含两部分:运行的容器和 /storage 目录下的数据。系统不存在容器中。新建容器如果挂载的地址是 /storage,就会直接使用这个数据。这样的话

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
可以随便改,不影响系统:
8006 网页 VNC 加密码
改外网端口
改分配内存、CPU 核数
改映射端口
加防火墙限制

❌ 不会改动:
Windows 账号密码
桌面文件、软件
系统设置
已经装好的环境

-e CPU_CORES=2 # 生效 → Windows CPU核心数改了
-e RAM_SIZE=4G # 生效 → Windows 内存改了
-e USER="webadmin"# 生效 → VNC网页登录账号
-e PASS="Web@123456" # 生效 → VNC网页登录密码

-e DISK_SIZE=40G # 不生效!磁盘已经创建,不能改
-e USERNAME="Docker" # 不生效!系统早就装完了
-e PASSWORD="Win@123456" # 不生效!系统密码不会被覆盖
系统已经安装完成,这些参数只在第一次下载安装系统时有用。装好后再改,容器直接无视,不会碰 Windows 系统。

使用

浏览器打开:

http://你的IP:18006

直接看到 Win10 图形桌面,全自动安装。

安装完成之后可以使用13389端口远程桌面。

装好后关闭休眠

1
2
3
管理员身份打开 CMD
powercfg -h off

关闭虚拟内存

1
2
3
4
5
6
7
8
9

右键 此电脑 → 属性
右侧 高级系统设置
性能 → 点 设置
高级 → 虚拟内存 → 更改
顶部取消勾选:自动管理所有驱动器的分页文件大小
选中 C 盘 → 选择 无分页文件 → 点 设置
一路确定,重启电脑 生效

其他优化

1
2
3
4
5
6
7
关闭 Windows 更新
虚拟机不用更新,避免自动下载补丁、狂写磁盘、扩容 qcow2。
关闭系统还原
右键此电脑 → 属性 → 系统保护 → 配置 → 禁用系统保护
关闭睡眠
电源设置里把 睡眠 全部设为 从不

性能问题

你宿主机本身就是 KVM 硬件虚拟化;容器直通 /dev/kvm; 性能 ≈ 直接在 KVM 里装 Win10,损耗极低。

现在结构:物理机 → KVM 宿主机 → Docker → QEMU/KVM 虚拟机(Win10/Win7)

看着套了三四层,为啥性能几乎没损失?

关键核心:不是纯软件模拟,是硬件直通虚拟化

普通嵌套(纯软件模拟)才会卡、有损耗。

这里全程用的 Intel VT-x / AMD-V 硬件虚拟化指令集。

CPU 硬件直接支持:
第一层 KVM 拿硬件虚拟化
Docker 把 /dev/kvm 直通传给里面的 QEMU
里面的 Windows 直接跑在 CPU 硬件虚拟化层级

等于:Windows 虚拟机 几乎直接跑在物理 CPU 上中间的 Linux、Docker 只是当个 “壳、管理壳”,不参与运算模拟。

KVM 是内核级虚拟化,不是应用层模拟器。
KVM 是 Linux 内核模块,和系统平级,调度极快。
② 你给容器传了 –device /dev/kvm
这一步是灵魂:
不是容器虚拟出新虚拟机,而是把物理机的硬件虚拟化设备直接交给里面的 Windows 用没有二次模拟、没有翻译转发。

文章目录
  1. 前置条件
  2. 现状
  3. 解决方案
    1. 说明
    2. 支持的系统
    3. 容器迁移
    4. 使用
      1. 装好后关闭休眠
      2. 关闭虚拟内存
      3. 其他优化
  4. 性能问题
|