Docker安装Windows 把 Windows装进Docker容器教程

Docker安装Windows 把 Windows装进Docker容器教程

我日常在外面有远程桌面Windows的需求,用来学习和工作,用来运行某个指定的软件,还是要做一些跨平台软件的功能验证。因为自己有一台服务器,安装的是Ubuntu系统,又在系统里面安装了Docker,于是有了把Windows装进容器,然后进行远程桌面的想法。

一、环境准备

1.安装了 Docker 的操作系统(我使用 是Ubuntu,其他版本的Linux理论上也是一样的)

2.操作系统是支持 KVM技术,一般情况VPS是不支持的,通常需要独立的服务器。可以通过以下方式进行验证:

安装cpu-checker

sudo apt install cpu-checker -y
Docker安装Windows 把 Windows装进Docker容器教程

然后执行

sudo kvm-ok

如果返回如下内容,表示支持KVM

INFO: /dev/kvm exists
KVM acceleration can be used

Docker安装Windows 把 Windows装进Docker容器教程

二、开始安装Windows

我们这里基于开源项目 dockur/windows 的 Docker 镜像,详细的内容可以查看官方文档。

首先找一个你自己喜欢的目录,编写一个docker-compose.yml文件:

vim docker-compose.yml

将下面面的配置保存为 docker-compose.yml,然后使用 docker compose up启动服务。

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 compose up
Docker安装Windows 把 Windows装进Docker容器教程

当运行完成,一切就绪后,我们可以使用两个方式来访问这个运行在 Docker 中的 Windows。

三、Windows的使用

第一种方法,是使用浏览器访问容器所在主机的 IP地址:8006

下图为正在下载安装,安装完是Windows桌面。

Docker安装Windows 把 Windows装进Docker容器教程

第二种方法,是使用支持 RDP 远程访问功能的软件,在软件服务器地址和端口内容中分别填写 IP地址 和 3389,在用户名栏填写 docker,密码保持空白即可。

其他使用技巧

聊聊其他的使用技巧,其实就是抄官方文档。

更换 Windows 版本(不提前准备镜像)

如果你的网络环境非常棒,不需要提前下载安装镜像,或者直接使用云主机进行项目部署,那么可以考虑直接调整配置文件中的内容为合适的数值:

environment:
  VERSION: "win11"

支持我们调整使用的值包含:win11win10ltsc10win81win7vistawinxp20222019201620122008

调整 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

【AD】DMIT优惠码 – 美国洛杉矶CN2 GIA VPS配置升级季付28美元起