基于docker运行windows系统

      作为一个开发人员,日常生活基本是在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版本信息

支持使用的值包含:win11win10ltsc10win81win7vistawinxp20222019201620122008

  • 资源配置:

这个 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 启动配置。

上一篇:高级java每日一道面试题-2024年10月19日-消息队列[RabbitMQ]-RabbitMQ中积压了大量的消息,如何处理?-我回答:


下一篇:新书速览|Spring+Spring MVC+MyBatis从零开始学(视频教学版)(第3版)