4.7 KiB
在linux中使用docker运行windows
为什么要在linux中运行windows
作为一个linuxer,我其实已经多年没有正儿八经的使用windows了。但是!!!!
首先讲一下为什么要跑windows。原因是贵司打印机实在太老,linux下搞了半天没找到相应的驱动,只能用windows的驱动来使用这台打印机。
除了这个原因,还有其他的,比如在使用wps 高级版的时候,有时会用到pdf编辑等高级功能。这些功能在linux版本的wps会员版中,是没有的。当然还有,使用adobe系列软件、其他视频编辑软件时,偶尔也会用到windows版本。因为linux下的这些专业软件实在不太行。
为什么要用docker跑windows
其实,在linux下跑windows有很多方法,我的电脑还装着双系统。在linux下可以跑虚拟机,如:vmware、virtualbox等。但是,试试看就知道,跑这些非常的耗资源;而且虚拟机的性能也非常不可靠。
而docker则是非常的轻量级的虚拟化技术,可以让你在linux系统中运行windows的应用。
如何安装docker下的windows
如何安装docker
这个省略吧!网上一搜一大把!
如何安装docker下的windows
使用这个镜像:dockurr/windows
使用之前,请先检测cpu是否支持虚拟化kvm。大部分现在的电脑都是支持的。
- cpu是否支持kvm:
egrep -c '(vmx|svm)' /proc/cpuinfo
如果返回数字大于0,则表示支持kvm。
- 验证是否加载了kvm模块:
lsmod | grep kvm
如果没有加载kvm模块,则需要加载:
modprobe kvm
- 检查/dev/kvm是否存在:
ls -l /dev/kvm
如果没有这个文件,则需要创建:
mknod /dev/kvm c 10 232
下载镜像dockurr/windows
docker pull dockurr/windows
运行镜像
docker run -d \
--name windows \
-e RAM_SIZE="4G" \
-e CPU_CORES="4" \
-e VERSION="win10" \
-v /windows/docker/storage:/storage \
--device /dev/dri \
--device /dev/kvm \
--cap-add NET_ADMIN \
-p 8006:8006 \
-p 3389:3389/tcp \
-p 3389:3389/udp \
--stop-timeout 2m \
--restart on-failure \
dockurr/windows
使用docker-compose
也可以使用docker-compose来运行镜像,如果用这个来运行,则可省略以上[下载镜像]和[运行镜像]两步。
把以下代码复制,新建一个docker-compose.yaml文件,然后执行:docker compose up -d :
version: "3"
services:
windows:
image: dockurr/windows
container_name: windows
environment:
RAM_SIZE: "4G"
CPU_CORES: "4"
VERSION: "win10"
volumes:
- /windows/docker/storage:/storage
devices:
- /dev/dri
- /dev/kvm
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 3389:3389/tcp
- 3389:3389/udp
stop_grace_period: 2m
restart: on-failure
解释一下上面的代码:
image: dockurr/windows:指定镜像container_name: windows:指定容器名environment:设置环境变量,这里设置了内存和cpu核数,VERSION是指需要运行windows的版本。在docker作者主页有详细解释。volumes:挂载目录,这里挂载了/windows/docker/storage目录到容器的/storage目录devices:指定设备,这里指定了/dev/dri和/dev/kvm设备cap_add:添加权限,这里添加了NET_ADMIN权限ports:端口映射,这里映射了8006端口到容器的8006端口,8006端口是web访问的端口,运行后可以使用浏览器直接运行windows(http://localhost:8006)。3389端口到容器的3389端口。3389端口是远程桌面协议(RDP)的端口,需要映射出来。stop_grace_period:设置停止超时时间,这里设置了2分钟restart:设置重启策略,这里设置了在失败时重启
如何使用windows
浏览器使用
这也是最方便的使用方法。 启动容器后,使用浏览器访问http://localhost:8006,进入windows的桌面。
rdp连接
由于开启了rdp远程桌面端口映射,所以可以直接使用远程桌面连接到容器。 推荐这种方式,体验更好,也不卡顿。
linux下远程桌面软件,推荐开源的freerdp。自行搜索安装。
然后运行:
xfreerdp3 /u:docker /p: /v:localhost /scale:180 /size:2560x1440
解释一下:
/u:docker:用户名,这个是默认的/p::密码,这个是空的/v:localhost:远程计算机的ip地址,这里是本机/scale:180:缩放比例,可以根据需要设置/size:2560x1440:分辨率,可以根据需要设置
然后就可以进入windows桌面了。
本地化管理
由于docker映射到了storage目录,所以可以直接在本地进行管理。