基于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 启动配置。

相关推荐
斑马13910 分钟前
Linux软件编程学习笔记(四)——进程
linux·运维·服务器
扛枪的书生26 分钟前
Linux 三剑客 - Awk 命令指南
linux·运维
MaximusCoder1 小时前
等保测评命令——weblogic
运维·安全·安全威胁分析
Lyra_Infra1 小时前
MySQL Docker 误删恢复:binlog PITR
mysql·docker·命令行
学linux的QQ蛋1 小时前
Linux 文件 IO vs 标准 IO:缓冲区、目录操作、常用函数汇总
linux·运维·服务器
苍狗T2 小时前
k8s 控制器管理
linux·运维·云原生·容器·kubernetes
笨笨饿2 小时前
#121_图传中的H.364编码与MP4的联系
linux·运维·前端·单片机·嵌入式硬件·面试·职场和发展
运维糕手2 小时前
一次 EVS"disk doesn't exist"报错的完整排查:我差点删掉生产Kafka
运维
优化Henry2 小时前
5G站点BBU功能模块集成化与偶发案例
运维·网络·学习·5g·tdd
小HANN3 小时前
高可用架构实战:Keepalived+LVS(DR)+MariaDB主主集群搭建指南
linux·运维·服务器·经验分享