我先记第一次安装时最常用的命令:

docker run -d \
  --name windows \
  --restart always \
  --device=/dev/kvm \
  --device=/dev/net/tun \
  --cap-add NET_ADMIN \
  -p 8006:8006 \
  -p 3389:3389/tcp \
  -p 3389:3389/udp \
  -v /opt/windows:/storage \
  -v /opt/windows/windows.iso:/boot.iso \
  -e MANUAL=Y \
  -e RAM_SIZE=4G \
  -e CPU_CORES=24 \
  -e DISK_TYPE=nvme \
  -e DISK_SIZE=256G \
  dockurr/windows

这个命令适合第一次装系统的时候用,因为它保留了网页控制台,远程桌面没配好之前,至少还能从浏览器进去看安装过程。我自己最常改的环境变量基本就是下面这些:

-v /opt/windows/windows.iso:/boot.iso

挂载/opt/windows/windows.iso为系统镜像,如果没有挂载的话记得指定一下系统版本

-e MANUAL=Y

表示手动安装。第一次部署时我一般都会先保留手动

-e RAM_SIZE=4G

虚拟机内存大小,默认是4G

-e CPU_CORES=24

虚拟机核心数,默认是2

-e DISK_TYPE=nvme

虚拟磁盘类型,默认是scsi,但进到系统中硬盘会识别为可插拔,提示安全删除硬件和弹出媒体/Safely Remove Hardware and Eject Media,我一般会改为nvme,常见的选项有:

ide
sata
nvme
usb
scsi
blk
auto
none

如果更看重性能,一般会优先在nvmescsiblk里选。 如果更看重兼容性,就选sata

-e DISK_SIZE=256G

虚拟磁盘大小,默认是64G

虚拟机稳定以后,我一般会改用第二个命令:

docker run -d \
  --name windows \
  --restart always \
  --device=/dev/kvm \
  --device=/dev/net/tun \
  --cap-add NET_ADMIN \
  -p 3389:3389/tcp \
  -p 3389:3389/udp \
  -v /opt/windows:/storage \
  -v /opt/windows/windows.iso:/boot.iso \
  -e RAM_SIZE=4G \
  -e CPU_CORES=24 \
  -e DISK_TYPE=nvme \
  -e DISK_SIZE=256G \
  -e DISPLAY=none \
  -e WEB=N \
  dockurr/windows

这个就是无头模式,只保留RDP,不用再开网页控制台。系统装好、远程桌面正常以后,我更推荐这个。


Windows 安装相关变量

变量默认值作用可选值
APPWindows产品名任意字符串
SUPPORTdockur/windows支持链接任意URL
PLATFORMx64平台标识x64
VERSION11安装版本11 10 ISO URL
LANGUAGEen安装语言语言代码
REGION区域设置en-US fr-FR
KEYBOARD键盘布局en-US de-DE
USERNAMEDocker用户名Windows用户名
PASSWORDadmin安装用户密码字符串
KEY产品密钥密钥
EDITION服务器安装版本DATACENTER STANDARD
MANUAL是否手动安装Y/N
VERIFY下载后校验哈希Y/N
WIDTH1280安装阶段分辨率宽正整数
HEIGHT720安装阶段分辨率高正整数
REMOVE安装完成删除ISOY/N
DETECTED内部检测版本标记内部值,不建议改
MIDO启用Mido下载链路Y/N
ESD启用ESD下载链路Y/N
UNPACK解包内层ISOY/N
SAMBAY启用共享目录Y/N
SAMBA_DEBUGNSamba调试日志Y/N
SAMBA_LEVEL1Samba日志级别数字字符串
SAMBA_INTERFACE绑定接口或IP接口名或IP
QEMU_TIMEOUT110关机等待超时秒数正整数

启动、CPU 和虚拟机核心变量

变量默认值作用可选值
BOOT启动镜像选择关键字 URL 本地映射
BOOT_MODEwindows启动固件模式uefi secure legacy
BOOT_INDEX9启动介质数字
BIOS自定义BIOS容器内路径
LOGO注入UEFI LOGOY/N
KVMY硬件加速Y/N
MACHINEq35QEMU machine类型q35 pc
CPU_CORES2vCPU 数2 max half
RAM_SIZE4G内存大小2G max half
RAM_CHECKY自动降配内存Y/N
CPU_MODEL自动CPU型号QEMU model host
CPU_FLAGS自动附加CPU特性QEMU参数
VMXNVMX开关Y/N
HPEToffmachine hpeton/off
VMPORToffmachine vmporton/off
UUIDVM UUIDUUID
TPMNswtpmY/N
SMMNSMMY/N
SERIALmon:stdio串口后端QEMU参数
SMP$CPU_CO...完整SMP拓扑QEMU参数
MONITORteln...monitor配置monitor参数
MON_PORT7100monitor端口端口号
ARGUMENTS追加QEMU参数任意参数串
ARGS内部兼容参数字符串
DEBUGN调试日志Y/N
TRACEshell traceY/N

磁盘和存储变量

变量默认值作用可选值
STORAGE/storage持久化目录容器内路径
ALLOCATEN是否预分配磁盘Y/N
DISK_SIZE64G主盘大小64G max half
DISK2_SIZE第二块盘大小64G max half
DISK3_SIZE第三块盘大小64G max half
DISK4_SIZE第四块盘大小64G max half
DISK5_SIZE第五块盘大小64G max half
DISK6_SIZE第六块盘大小64G max half
DISK_NAMEdata磁盘文件名前缀字符串
DEVICE直通块设备 1块设备路径
DEVICE2直通块设备 2块设备路径
DEVICE3直通块设备 3块设备路径
DEVICE4直通块设备 4块设备路径
DEVICE5直通块设备 5块设备路径
DEVICE6直通块设备 6块设备路径
DISK_FMTraw磁盘格式raw qcow2
DISK_TYPEscsi磁盘设备类型sata nvme scsi auto none
MEDIA_TYPE自动光驱或安装介质设备类型sata nvme scsi auto none
DISK_IOnativeAIO模式native threads io_uring
DISK_CACHEnone磁盘缓存策略none writeback
DISK_DISCARDonTRIM透传on/off
DISK_ROTATION1旋转率整数
DISK_FLAGSqcow2附加参数qemu-img参数

网络变量

变量默认值作用可选值
NETWORKY网络类型总开关N Y tap tun
DHCPN让客体从路由器拿 IPY/N
ADAPTERvirtio-net-pci网卡型号e1000rtl8139
MAC自动生成MAC地址MAC地址
MTU自动探测MTUMTU
HOST_PORTS保留或排除端口端口
USER_PORTS转发端口端口
VM_NET_IP自动客体IPIPv4
VM_NET_DEV自动容器网卡名网卡名
VM_NET_TAPqemutap名字符串
VM_NET_MAC$MAC覆盖客体MACMAC
VM_NET_HOST$APP客体hostname字符串
VM_NET_BRIDGEdockerbridge 名字符串
VM_NET_MASK255.255.255.0子网掩码子网掩码
PASST/run/passtpasst路径文件路径
PASST_MTUpasst MTU整数
PASST_OPTSpasst参数参数串
PASST_DEBUGpasst日志Y/N
PASST_PID/var/ru...passt pid文件文件路径
DNSMASQ/usr/sbi...dnsmasq程序路径文件路径
DNSMASQ_OPTSdnsmasq参数参数串
DNSMASQ_DEBUGdnsmasq日志Y/N
DNSMASQ_CONF_DIR/etc/dn...dnsmasq目录路径
DNSMASQ_PID/var/ru...dnsmasq pid文件路径
DNSMASQ_DISABLE禁用dnsmasqY/N

显示、Web 和 USB 变量

变量默认值作用可选值
DISPLAYweb显示模式web vnc disabled none
VGAvirtio显卡类型virtio std cirrus
GPUNIntel GPU加速Y/N
RENDERNODE/dev/dr...GPU render node设备路径
VNC_PORT5900VNC>=5900
WEB_PORT8006Web UI端口号
WSD_PORT8004websocketd端口号
WSS_PORT5700noVNC websocket端口号
WEB启用Web UIY/N
USERadmin用户名字符串
PASS密码字符串
USBqemu-x...控制器或设备参数字符串 no