作为一个开发人员,日常生活基本是在mac和ubuntu系统上操作,但是时不时会有 Windows 使用的场景,不论是运行某个指定的软件,还是要做一些跨平台软件的功能验证。下面就基于docker完成windows虚拟化使用,参考链接:
github源码链接:https://github.com/dockur/windows
文档链接:https://soulteary.com/2024/03/11/install-windows-into-a-docker-container.html
本方案是基于linux环境下,采用了 KVM 加速完成,首先准备一个linux系统,然后检查是否支持kvm加速
##安装工具
sudo apt install cpu-checker -y
##检查
sudo kvm-ok
##正常输出结果
INFO: /dev/kvm exists
KVM acceleration can be used
下面基本操作如下:
(1)安装
获取在 Docker 中运行 Windows 的容器镜像很简单:
docker pull dockurr/windows
当然,如果不能够直接下载,也可以选择本地构建:
git clone https://github.com/dockur/windows.git
cd windows
docker build -t dockurr/windows .
(2)使用
readme中提供了几种方式来启动,
-
Via Docker Compose:
services:
windows:
image: dockurr/windows
container_name: windows
environment:
VERSION: "win11"
devices:
- /dev/kvm
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 3389:3389/tcp
- 3389:3389/udp
stop_grace_period: 2m -
Via Docker CLI:
docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows
-
Via Kubernetes:
kubectl apply -f kubernetes.yml
下面以docker-compose为例进行说明,其中
- 系统配置:environment可以指定安装windows版本信息
支持使用的值包含:win11
、win10
、ltsc10
、win81
、win7
、vista
、winxp
、2022
、2019
、2016
、2012
、2008
- 资源配置:
这个 Windows 容器会使用 vCPU x2、4GB 内存、64G 的磁盘空间,来满足 Win11 的最低安装需求。我们可以根据自己的实际需求,来动态的调整容器的硬件资源限制。
environment:
RAM_SIZE: "8G"
CPU_CORES: "4"
DISK_SIZE: "256G"
- 增加外设
如果你需要挂载外设硬盘或者usb等,可以按如下方式添加
environment:
DEVICE: "/dev/sda"
DEVICE2: "/dev/sdb"
devices:
- /dev/sda
- /dev/sdb
- 加速持久化
由于系统镜像一版比较大,每次启动docker如果都进行下载的话,碰上网络情况不佳的时候就会很耗时,这时候可以先离线下载好系统镜像,然后将文件重命名为 win11x64.iso
,接着将文件放置在目录的 ./iso
子目录中。借助 Nginx,可以让整个安装部署过程变的飞快。最后修改yaml文件,启动时自动加载对应的镜像文件即可。
version: "3"
services:
windows:
image: dockurr/windows
container_name: windows
devices:
- /dev/kvm
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 3389:3389/tcp
- 3389:3389/udp
stop_grace_period: 2m
restart: on-failure
environment:
VERSION: "http://winiso/win11x64.iso"
MANUAL: "N"
volumes:
- ./win:/storage
depends_on:
- winiso
winiso:
image: nginx:alpine
container_name: winiso
restart: on-failure
volumes:
- ./iso:/usr/share/nginx/html
在上面的配置中,增加了一个用来将本地的 Windows 安装文件转换为 dockurr/windows
快速可安装的在线地址的容器。将配置文件保存为 docker-compose.yml
,然后使用 docker compose up
或者 docker compose up -d
启动配置。