我日常在外面有远程桌面Windows的需求,用来学习和工作,用来运行某个指定的软件,还是要做一些跨平台软件的功能验证。因为自己有一台服务器,安装的是Ubuntu系统,又在系统里面安装了Docker,于是有了把Windows装进容器,然后进行远程桌面的想法。
一、环境准备
1.安装了 Docker 的操作系统(我使用 是Ubuntu,其他版本的Linux理论上也是一样的)文章源自合一学院-https://unvmax.com/linux%e4%b8%ad%e9%80%9a%e8%bf%87docker%e5%ae%89%e8%a3%85windows-%e6%8a%8a-windows%e8%a3%85%e8%bf%9bdocker%e5%ae%b9%e5%99%a8%e9%87%8c.html
ubuntu 安装docker官方教程:Install Docker Engine on Ubuntu | Docker Docs文章源自合一学院-https://unvmax.com/linux%e4%b8%ad%e9%80%9a%e8%bf%87docker%e5%ae%89%e8%a3%85windows-%e6%8a%8a-windows%e8%a3%85%e8%bf%9bdocker%e5%ae%b9%e5%99%a8%e9%87%8c.html
2.操作系统是支持 KVM技术,一般情况VPS是不支持的,通常需要独立的服务器。可以通过以下方式进行验证:文章源自合一学院-https://unvmax.com/linux%e4%b8%ad%e9%80%9a%e8%bf%87docker%e5%ae%89%e8%a3%85windows-%e6%8a%8a-windows%e8%a3%85%e8%bf%9bdocker%e5%ae%b9%e5%99%a8%e9%87%8c.html
安装cpu-checker文章源自合一学院-https://unvmax.com/linux%e4%b8%ad%e9%80%9a%e8%bf%87docker%e5%ae%89%e8%a3%85windows-%e6%8a%8a-windows%e8%a3%85%e8%bf%9bdocker%e5%ae%b9%e5%99%a8%e9%87%8c.html
sudo apt install cpu-checker -y
然后执行文章源自合一学院-https://unvmax.com/linux%e4%b8%ad%e9%80%9a%e8%bf%87docker%e5%ae%89%e8%a3%85windows-%e6%8a%8a-windows%e8%a3%85%e8%bf%9bdocker%e5%ae%b9%e5%99%a8%e9%87%8c.html
sudo kvm-ok
如果返回如下内容,表示支持KVM文章源自合一学院-https://unvmax.com/linux%e4%b8%ad%e9%80%9a%e8%bf%87docker%e5%ae%89%e8%a3%85windows-%e6%8a%8a-windows%e8%a3%85%e8%bf%9bdocker%e5%ae%b9%e5%99%a8%e9%87%8c.html
INFO: /dev/kvm exists KVM acceleration can be used
二、开始安装Windows
我们这里基于开源项目 dockur/windows 的 Docker 镜像,详细的内容可以查看官方文档。文章源自合一学院-https://unvmax.com/linux%e4%b8%ad%e9%80%9a%e8%bf%87docker%e5%ae%89%e8%a3%85windows-%e6%8a%8a-windows%e8%a3%85%e8%bf%9bdocker%e5%ae%b9%e5%99%a8%e9%87%8c.html
首先找一个你自己喜欢的目录,编写一个docker-compose.yml文件:文章源自合一学院-https://unvmax.com/linux%e4%b8%ad%e9%80%9a%e8%bf%87docker%e5%ae%89%e8%a3%85windows-%e6%8a%8a-windows%e8%a3%85%e8%bf%9bdocker%e5%ae%b9%e5%99%a8%e9%87%8c.html
vim docker-compose.yml
将下面面的配置保存为 docker-compose.yml
,然后使用 docker compose up
启动服务。文章源自合一学院-https://unvmax.com/linux%e4%b8%ad%e9%80%9a%e8%bf%87docker%e5%ae%89%e8%a3%85windows-%e6%8a%8a-windows%e8%a3%85%e8%bf%9bdocker%e5%ae%b9%e5%99%a8%e9%87%8c.html
services: windows: image: dockurr/windows container_name: windows #容器名称 environment: VERSION: "tiny11" #指定系统版本 DISK_SIZE: "256G" #指定磁盘大小 RAM_SIZE: "8G" #指定内存大小 CPU_CORES: "4" #指定CPU核心数 devices: - /dev/kvm cap_add: - NET_ADMIN ports: - 8006:8006 #Web 浏览器中看到 Windows 安装屏幕 - 3389:3389/tcp #远程桌面端口 - 3389:3389/udp stop_grace_period: 2m
当运行完成,一切就绪后,我们可以使用两个方式来访问这个运行在 Docker 中的 Windows。文章源自合一学院-https://unvmax.com/linux%e4%b8%ad%e9%80%9a%e8%bf%87docker%e5%ae%89%e8%a3%85windows-%e6%8a%8a-windows%e8%a3%85%e8%bf%9bdocker%e5%ae%b9%e5%99%a8%e9%87%8c.html
三、Windows的使用
第一种方法 使用浏览器访问容器所在主机的 IP地址:8006
下图为正在下载安装,安装完是Windows桌面。
第二种方法 使用支持 RDP 远程访问功能的软件访问
在软件服务器地址和端口内容中分别填写 IP地址
和 3389
,在用户名栏填写 docker
,密码保持空白即可。
四、其他使用技巧
聊聊其他的使用技巧,其实就是官方文档。
更换 Windows 版本(不提前准备镜像)
如果你的网络环境非常棒,不需要提前下载安装镜像,或者直接使用云主机进行项目部署,那么可以考虑直接调整配置文件中的内容为合适的数值:
environment: VERSION: "win11"
支持我们调整使用的值包含:win11
、win10
、ltsc10
、win81
、win7
、vista
、winxp
、2022
、2019
、2016
、2012
、2008
。
调整 Windows 容器资源配置
默认情况下,这个 Windows 容器会使用 vCPU x2、4GB 内存、64G 的磁盘空间,来满足 Win11 的最低安装需求。我们可以根据自己的实际需求,来动态的调整容器的硬件资源限制。
environment: RAM_SIZE: "8G" CPU_CORES: "4" DISK_SIZE: "256G"
比如,在上面的配置中,我们调整 CPU 核心数到 4,内存到 8GB,磁盘到 256GB。
为容器分配独立的 IP 地址
默认情况下,Docker 会共享宿主机的 IP,如果我们想要让容器拥有独立的 IP 地址,需要先创建一个 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
创建完网卡后,调整上面使用的容器配置,根据自己的需求指定容器 IP 即可:
services: windows: container_name: windows ..<snip>.. networks: vlan: ipv4_address: 192.168.0.100 networks: vlan: external: true
使用一整块磁盘
如果你的主机上有多块磁盘,或者想将某一块磁盘完整的分配给 Windows,可以采用下面的方法,其中 DEVICE
将作为你的主磁盘:
environment: DEVICE: "/dev/sda" DEVICE2: "/dev/sdb" devices: - /dev/sda - /dev/sdb
在 Docker 中的 Windows 使用 USB 设备
我们首先需要使用 lsusb
来获取 USB 设备的 VendorID
和 ProductID
,然后将这些信息添加到配置中:
environment: ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234" devices: - /dev/bus/usb