如何在Docker中玩转Windows ?超简单教程来袭!

2024-12-26 15:02:10 2点赞 13收藏 1评论

项目介绍

Docker容器内安装windows系统,一个很有意思的docker项目dockur/windows,该项目运用 noVNC 和 QEMU 技术简化了 Windows 系统的模拟和管理过程,提供一个开源的 Docker 容器解决方案,允许用户轻松搭建并使用无需复杂配置的 Windows 桌面环境,同时利用 QEMU 和 KVM 虚拟化技术,使得 Windows 操作系统容器化,便于开发者和用户在虚拟化环境中高效地部署和管理,非常适合进行测试、开发和运行特定的 Windows 应用程序。

GitHub地址:dockur/windows

Docker地址:dockur/windows

如何在Docker中玩转Windows ?超简单教程来袭!

项目特色

  • 开箱即用:快速启动,无需繁琐配置,即刻体验Windows环境。

  • 自定义配置:根据需求自定义CPU、RAM数量和磁盘大小。

  • 版本支持:支持WinXP7至Win11等多个版本的Windows。

  • Web界面控制:通过Web浏览器实时操作Windows容器系统,无需安装额外插件。

  • ISO下载器:内置功能,自动下载所需的Windows版本ISO文件。

  • 硬件加速:利用Linux KVM技术提供硬件虚拟化加速。

  • 高级功能:支持文件共享、自定义镜像安装、DHCP、IP地址映射、USB映射等。

使用场景

  • 开发者环境搭建:节省时间,快速搭建适合的开发环境。

  • 软件测试与兼容性验证:确保软件在不同版本的Windows上都能正常运行。

  • 教育和研究:提供一个安全、可控的环境,用于教育和研究。

  • 远程办公:通过Web控制界面,实现灵活的远程工作方式。

如何在Docker中玩转Windows ?超简单教程来袭!

安装与使用

安装 dockur/windows 项目非常简单,以下是详细步骤:

使用以下命令启动容器,并根据需求调整参数,同时了解每个参数的具体作用:

docker run -it --name windows -p 8006:8006 -p 3389:3389/tcp -p 3389:3389/udp -v /mnt/user/appdata/windows/storage:/storage -v /mnt/user/appdata/windows/shared:/data -e VERSION="11" -e DISK_SIZE="64G" -e RAM_SIZE="4G" -e CPU_CORES="2" -e USERNAME="Admin" -e PASSWORD="123456" -e LANGUAGE="Chinese" -e REGION="zh-CN" -e KEYBOARD="zh-CN" --device /dev/kvm --device /dev/net/tun --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows

参数解释

  • --name windows:为容器指定名称,便于后续管理和访问。

  • 端口映射

    • -p 8006:8006:映射 noVNC 服务端口,用于 Web 浏览器访问桌面环境。

    • -p 3389:3389/tcp :映射 RDP(远程桌面协议)端口,以便通过远程桌面连接到 Windows 系统。

    • -p 3389:3389/udp:映射 RDP 的 UDP 通信端口,提高连接稳定性。

  • 卷挂载

    • -v /mnt/user/appdata/windows/storage:/storage:将主机上的目录 /mnt/user/appdata/windows/storage 挂载到容器内的 /storage 目录,用于存储 Windows 虚拟机的文件。

    • -v /mnt/user/appdata/windows/shared:/data:用于共享数据的目录挂载,容器和主机可以访问。

    • -v /mnt/user/isos/windows10LTSC.ISO:/custom.iso:将 Windows 10 LTSC 的 ISO 文件挂载到容器中,用作安装源。

  • 环境变量

    • -e VERSION="11":指定 Windows 的版本,默认为windows 11。

    • -e DISK_SIZE="64G":设置虚拟磁盘大小,默认64GB。

    • -e RAM_SIZE="4G":设置内存大小,默认4GB。

    • -e CPU_CORES="2":设置虚拟 CPU 核心数,例如 2 核。

    • -e USERNAME="Admin":设置容器内操作系统的用户名。

    • -e PASSWORD="123456":设置上述用户的密码。

    • -e LANGUAGE="Chinese":设置操作系统语言。

    • -e REGION="zh-CN":设置区域设置。

    • -e KEYBOARD="zh-CN":设置键盘布局。

  • 设备支持

    • --device /dev/kvm:启用 KVM 支持,这是虚拟化所需的硬件加速,以提升虚拟化性能。

    • --device /dev/net/tun:启用 TUN/TAP 网络设备支持,用于虚拟机的网络连接。

  • 权限和超时设置

    • --cap-add NET_ADMIN:增加 NET_ADMIN 能力以支持高级网络功能。

    • --stop-timeout 120:设置容器停止时的超时时间为 120 秒。

  • 镜像名称

    • dockurr/windows:指定要使用的 Docker 镜像。

基础使用技巧

更换 Windows 版本

默认情况下,将安装 Windows 11 专业版,可以直接通过环境变量设置版本,无需提前下载镜像:

-e VERSION="11"

提供多种 Windows 版本选项,包括:

版本代码版本名称系统大小11Windows 11 Pro5.4 GB11lWindows 11 LTSC4.2 GB11eWindows 11 Enterprise5.8 GB10Windows 10 Pro5.7 GB10lWindows 10 LTSC4.6 GB10eWindows 10 Enterprise5.2 GB8eWindows 8.1 Enterprise3.7 GB7eWindows 7 Enterprise3.0 GBveWindows Vista Enterprise3.0 GBxpWindows XP Professional0.6 GB2025Windows Server 20255.0 GB2022Windows Server 20224.7 GB2019Windows Server 20195.3 GB2016Windows Server 20166.5 GB2012Windows Server 20124.3 GB2008Windows Server 20083.0 GB2003Windows Server 20030.6 GB

安装自定义版本镜像

若要下载不在列表中的 ISO 镜像,可以在环境变量中指定该 ISO 的 iso直链下载地址URL,例如:

-e VERSION="https://example.com/win.iso"

你也可以跳过下载,使用本地镜像,推荐此方法:

-v /mnt/user/isos/windows.iso:/custom.iso

/mnt/user/isos/windows.iso 替换为所需 ISO 文件的文件名,如果挂载系统镜像,则前面设置的版本环境变量将会失效,系统初始化安装是会优先使用此处设置的镜像文件。

调整容器资源配置

默认情况下,容器最多使用 2个CPU核心、 4GB的内存和64GB磁盘大小,可以根据需求修改内存、CPU 核心数和磁盘大小:

-e DISK_SIZE="64G" -e RAM_SIZE="8G" -e CPU_CORES="4"

提示:磁盘大小后面可以直接修改扩大,进系统后使用磁盘管理再扩充磁盘即可,不会丢失数据。

与主机共享文件

容器系统内打开 '文件资源管理器' 并点击 '网络' 部分,你会看到一个名为 host.lan 的计算机。双击它,将显示一个名为 Data 的文件夹,你可以绑定到主机上的任何文件夹:

-v /mnt/user/appdata/windows/shared:/data

此时,/mnt/user/appdata/windows/shared 文件夹将映射到 host.lanData

提示:你可以将此路径映射到 磁盘盘符,方便访问。

配置用户名和密码

默认情况下,安装过程中会创建一个名为 Docker 的用户,并且没有密码。如果你想使用不同的凭据,可以在环境变量中更改:

-e USERNAME="Admin" -e PASSWORD="123456"

初始化运行脚本

可以创建一个名为 install.bat 的脚本文件,并将其与其他所需文件(例如需要安装的软件)一起放入一个文件夹。然后,在 挂载路径中绑定该文件夹:

-v /mnt/user/appdata/windows/oem:/oem

该文件夹将在安装过程中复制到容器内,并在最后一步执行 install.bat,可以设置默认的驱动或软件,普通用户无需设置此项。

设置 Windows 语言

默认情况下,会下载英文版 Windows。但你可以添加环境变量来指定其他语言:

-e LANGUAGE="Chinese"

支持的语言如下:

  • 阿拉伯语Arabic、保加利亚语Bulgarian、中文Bulgarian、克罗地亚语Bulgarian、捷克语Czech、丹麦语Danish、荷兰语Dutch、英语English、爱沙尼亚语Estonian、芬兰语Finnish、法语French、德语German、希腊语Greek、希伯来语Hebrew、匈牙利语Hungarian、意大利语Italian、日语Japanese、韩语Korean、拉脱维亚语Latvian、立陶宛语Lithuanian、挪威语Norwegian、波兰语Polish、葡萄牙语Portuguese、罗马尼亚语Romanian、俄语Russian、塞尔维亚语Serbian、斯洛伐克语Slovak、斯洛文尼亚语Slovenian、西班牙语Spanish、瑞典语Swedish、泰语Thai、土耳其语Turkish 、乌克兰语Ukrainian。

配置键盘布局

如果你希望使用不同于所选语言的键盘布局或区域设置,可以添加 REGIONKEYBOARD 变量,并指定区域代码,例如:

-e REGION="zh-CN" -e KEYBOARD="zh-CN"

注意:也可以等安装系统完成后,在 Windows 控制面板中进行修改。

远程 RDP 连接

Web 查看器主要用于安装过程中,因为图像质量较低,且没有音频或剪贴板等功能。

为了获得更好的体验,你可以使用任何 Microsoft Remote Desktop 客户端连接到容器的 IP 地址,用户名为 Docker,密码为空,如果通过环境变量设置用户和密码,则使用设置的用户密码连接。

其他平台也有RDP客户端,Android 版 RD 客户端,iOS也可以从 Apple Store 搜随,Linux 用户可以使用 FreeRDP,Windows 用户可以直接使用 远程桌面连接

如何在Docker中玩转Windows ?超简单教程来袭!如何在Docker中玩转Windows ?超简单教程来袭!如何在Docker中玩转Windows ?超简单教程来袭!

高级使用技巧

为容器分配独立 IP 地址

默认情况下,容器使用桥接网络,并与主机共享 IP 地址。如果你想为容器分配单独的 IP 地址,可以创建一个 macvlan 网络:

创建 macvlan 网络:

docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 --ip-range=192.168.1.100/28 -o parent=eth0 vlan

配置服务使用该网络:

静态设置:

--net=vlan --ip=192.168.1.100 --dns=192.168.1.1

动态获取:

在配置 macvlan 后,Windows 可以像真实计算机一样通过 DHCP 从路由器获取 IP 地址:

-e DHCP="Y" --device /dev/vhost-net --device-cgroup-rule='c *:* rwm'

这种方式的好处是,你不再需要做端口映射,因为所有端口都会默认暴露。

重要提示:由于 macvlan 的设计,容器与主机之间无法进行通信。如果这对你来说是一个问题,你需要创建第二个 macvlan 网络来解决,具体方法这里不再展开,相关教程很多,自行搜索。

添加其他数据磁盘

首个磁盘默认为系统盘,要创建更多数据磁盘,增加以下代码:

-e DISK2_SIZE="128G" -e DISK3_SIZE="256G" -v /mnt/user/appdata/windows/storage2:/storage2 -v /mnt/user/appdata/windows/storage3:/storage3

设置硬盘直通

你可以通过以下方式将磁盘设备直通到容器:

--device /dev/vhost-net --mount type=bind,source=/dev/sdb,target=/disk1 --mount type=bind,source=/dev/sdc,target=/disk2

直通 USB 设备键鼠

若要通过 USB 设备直通,你需要首先使用 lsusb 命令查找设备的厂商 ID 和产品 ID,然后在 Compose 文件中添加这些信息:

-e ARGUMENTS="-device usb-host,vendorid=0x1234,productid=0x1234" --device /dev/bus/usb

重要提示:如果设备是 USB 硬盘,请在安装完成后再连接它,否则安装可能失败。

调用核显GPU加速

在 Linux 中使用硬件加速对视频文件进行转码:

-e GPU= "Y" --device /dev/dri

提示:仅支持intel核显。

如何在Docker中玩转Windows ?超简单教程来袭!

其他问题

系统是否支持 KVM

KVM 虚拟化仅在 Linux 和 Windows 11 上受支持,macOS 和 Windows 10 不支持。可以通过以下命令检查你的系统:

sudo apt install cpu-checker sudo kvm-ok

如果出现 KVM 不可用的错误,请检查你的 BIOS 是否启用了虚拟化扩展(Intel VT-x 或 AMD SVM)。常见问题与解决方法

1️⃣ 启用嵌套虚拟化 确保主机的嵌套虚拟化功能已启用:

Intel CPU: 检查并启用嵌套虚拟化:

cat /sys/module/kvm_intel/parameters/nested

输出结果Y表示已启用。如果未启用,执行以下命令:

sudo modprobe -r kvm_intel sudo modprobe kvm_intel nested=1

AMD CPU: 检查:

cat /sys/module/kvm_amd/parameters/nested

启用:

sudo modprobe -r kvm_amd sudo modprobe kvm_amd nested=1

2️⃣ 检查内核版本和 KVM 模块 确保内核和 KVM 模块支持所需的虚拟化功能:

检查内核版本:

uname -r # 推荐使用较新的内核版本(如 5.15 或更高)

验证 KVM 模块是否已加载:

lsmod | grep kvm

3️⃣ 修改 QEMU 配置 如果嵌套虚拟化无法启用,可以尝试以下方法:

禁用 eVMCS 支持: 在运行 QEMU 时,添加以下参数:

-cpu host,-vmx # 这将禁用 eVMCS 功能,可能允许虚拟机启动。

使用 TCG 模式(无硬件加速): 如果 KVM 不支持,可尝试使用 TCG(全软件仿真):

-machine accel=tcg

dockur/windows 是一款强大的工具,为用户提供了一个简单、高效的 Windows 容器化解决方案。无论是开发测试、教育研究还是远程办公,都能显著提升效率,为数字化环境带来更多可能性。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
1评论

  • 精彩
  • 最新
  • 你好,创建 macvlan 网络那一段代码 在哪儿输入呢,也是在compose里的YAML配置那修改吗

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章

i若夜

Ta还没有介绍自己

关注 打赏
最新文章 热门文章
13
扫一下,分享更方便,购买更轻松