本文最后更新于 2024-06-28,文章内容可能已经过时。

前言

大家好,这里是可爱的Cherry。 用习惯了NAS/AIO系统的小伙伴们,对于虚拟机的依赖应该都很深吧,不管是多加个ubuntu,还是内置个windows,那肯定都是手到擒来的事情,反正NAS在手,真谛就在于套娃!套,拼命套!(笑) 但是!家人们!有没有见过在docker里装的Windows!相比于docker和传统的虚拟机模式,大家对docker部署windows系统应该都会有些疑问吧,譬如安装简单不?性能怎么样?稳定性如何?共享文件方便不? 今天,让我们带着这些问题,逐一讲解如何在docker中部署windows系统。 说说windows系统在NAS中的用处!
1、可以打开浏览器,访问一些只能在localhost访问的应用。 2、可以作为下载机使用,配合例如115、百度网盘等工具。 3、可以实现AIO,解决一些在NAS上无法使用软件,这样又省一台电脑的钱。 4、当然还有开发需要的非linux开发环境啥之类的。

项目介绍:

windows in docker是zai在github上有9.6K星星的项目,通过全自动安装windows镜像来实现在docker内的使用。
项目特性包括有:
  • ISO下载器
  • KVM加速
  • 基于Web的查看器
  • 项目地址:dockur/windows
🟡本项目默认window镜像以及容量大小 image.png

系统演示

一、安装过程

🔻Cherry分别安装了windows XP和windows 11,大约安装了15分钟左右。XP是全自动安装的,win11的话需要登录webui点击下一步才会自动开始。 image.png image.png

二、性能展现

🔻winxp(2核4G)待机状态下,CPU和内存使用率均低于5%。 image.png 🔻win11(2核4G)待机状态下,CPU使用率低于5%,内存使用率达61%。 image.png

三、RDP访问

一般来说,该容器可以通过网页进行访问。当然,也支持通过RDP访问,如果没有修改默认rdp端口的,则直接在windows的mstsc访问下输入ip地址,如果修改了rdp端口的,则需要输入ip:port进行访问。登录后的默认账号是docker,默认密码为空。 image.png

四、共享文件

打开文件资源管理器,点击网络部分,你会看到一台名为 host.lan 的计算机,双击它,它会显示一个名为 Data 的文件夹。 在此文件夹中,您可以访问宿主机上 /storage/shared 目录中的所有文件。 image.png

系统部署

一、下载镜像

在镜像仓库搜索dockurr/windows,下载windows镜像 image.png

二、下载Windows镜像

🔻本项目采用自动下载ISO镜像的方式安装windows,但是大部分站点都被墙了,所以这里Cherry墙裂建议小伙伴们自行下载镜像,镜像站当然首选NEXT, ITELLYOU,将镜像改名为custom.iso,放到我们的持久化目录./data下。 image.png

三、docker-compose代码

🔻随便新建一个docker-compose的txt文件,把下面的代码复制到文件内,然后文件改名为docker-compose.yaml
version: "3"
services:
  windows:
    image: dockurr/windows
    container_name: windows
    cap_add:
      - NET_ADMIN
    volumes:
      - ./data:/storage         #实现C盘数据持久化
      #- ./data2:/storage2        #实现D盘数据持久化,以此类推
	environment:
      CPU_CORES: "2"          #CPU数量,默认2核,要小于NAS本身的核数
      RAM_SIZE: "4G"          #内存大小,默认4G,要小于NAS本身的内存
      DISK_SIZE: "256G"       #C盘硬盘大小,默认64G
      #DISK2_SIZE: "256G"     #D盘硬盘大小,默认64G 
      #VERSION: "win11"       #镜像的ISO下载地址,用本地镜像的话就不填
      #DEVICE: "/dev/sda"     #将本地硬盘直通为主驱动器
      #DEVICE2: "/dev/sdb"    #将本地硬盘直通为第二个驱动器
      #ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234" #通过lsusb查询USB讯息后填入,在devices中对应增加。
    devices:
      - /dev/kvm
      #- /dev/sda
      #- /dev/sdb
      #- /dev/bus/usb
    ports:
      - 8006:8006               #WEB控制端口
      - 3389:3389/tcp           #rdp端口
      - 3389:3389/udp           #rdp端口
    stop_grace_period: 2m
    restart: on-failure