143 lines
4.7 KiB
Markdown
143 lines
4.7 KiB
Markdown
# 在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:
|
||
```sh
|
||
egrep -c '(vmx|svm)' /proc/cpuinfo
|
||
```
|
||
如果返回数字大于0,则表示支持kvm。
|
||
|
||
- 验证是否加载了kvm模块:
|
||
```sh
|
||
lsmod | grep kvm
|
||
```
|
||
如果没有加载kvm模块,则需要加载:
|
||
```sh
|
||
modprobe kvm
|
||
```
|
||
- 检查/dev/kvm是否存在:
|
||
```sh
|
||
ls -l /dev/kvm
|
||
```
|
||
如果没有这个文件,则需要创建:
|
||
```sh
|
||
mknod /dev/kvm c 10 232
|
||
```
|
||
|
||
#### 下载镜像dockurr/windows
|
||
```sh
|
||
docker pull dockurr/windows
|
||
```
|
||
|
||
#### 运行镜像
|
||
```sh
|
||
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 ` :
|
||
|
||
```yaml
|
||
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。自行搜索安装。
|
||
|
||
然后运行:
|
||
```sh
|
||
xfreerdp3 /u:docker /p: /v:localhost /scale:180 /size:2560x1440
|
||
```
|
||
解释一下:
|
||
- `/u:docker`:用户名,这个是默认的
|
||
- `/p:`:密码,这个是空的
|
||
- `/v:localhost`:远程计算机的ip地址,这里是本机
|
||
- `/scale:180`:缩放比例,可以根据需要设置
|
||
- `/size:2560x1440`:分辨率,可以根据需要设置
|
||
|
||
然后就可以进入windows桌面了。
|
||
|
||
## 本地化管理
|
||
|
||
由于docker映射到了storage目录,所以可以直接在本地进行管理。 |