docker版windows

33

docker版windows

原github链接

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

docker运行

docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows

代码讲解

如何选择 Windows 版本?

默认情况下,将安装 Windows 11。但您可以将 VERSION 环境变量添加到 Compose 文件中,以指定要下载的备用 Windows 版本:

environment:
  VERSION: "win11"

如何选择 Windows 语言?

默认情况下,将下载 Windows 的英文版本。但您可以将 LANGUAGE 环境变量添加到您的撰写文件中,以指定替代语言:

environment:
  LANGUAGE: "Chinese"

您可以选择 Arabic, Bulgarian, Chinese, Croatian, Czech, Danish, Dutch, Estonian, Finnish, French, German, Greek, Hebrew, Hungarian, Italian, Japanese, Korean, Latvian, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovenian, Spanish, Swedish, Turkish, Thai , Ukrainian.

如果您想要使用非所选语言默认的键盘布局或语言环境,您可以添加带有文化代码的 KEYBOARD 和 REGION 变量,如下所示:

environment:
  REGION: "en-US"
  KEYBOARD: "en-US"

如何更改存储位置?

要更改存储位置,请在 Compose 文件中包括以下绑定挂载:
volumes: /var/win:/storage
替换示例路径 /var/win 与所需的存储文件夹。

如何更改磁盘大小?

要扩展默认大小 64 GB,请将 DISK_SIZE 设置添加到您的撰写文件中,并将其设置为您喜欢的容量:
environment: DISK_SIZE: "256G"
这也可以用于将现有磁盘调整为更大的容量而不会丢失任何数据。

如何与主机共享文件?

打开“文件资源管理器”并单击“网络”部分,您将看到一台名为 host.lan 的计算机。双击它,它将显示一个名为 Data 的文件夹,该文件夹可以通过撰写文件绑定到主机上的任何文件夹:

volumes:
 -/home/user/example:/shared

示例文件夹 /home/user/example 将以 \host.lan\Data 的形式提供。您可以选择将此路径映射到 Windows 中的驱动器号,以便于访问。

如何安装自定义映像?

为了下载上面列表中无法选择的不受支持的 ISO 映像,请在 VERSION 环境变量中指定该 ISO 的 URL,例如:

environment:
  VERSION: "https://example.com/win.iso"

或者,您也可以跳过下载并使用本地文件,通过以下方式将其绑定到您的撰写文件中:

volumes:
- /home/user/example.iso:/custom.iso

将示例路径 /home/user/example.iso 替换为您想要的 ISO 文件的文件名,在这种情况下 VERSION 的值将被忽略。

如何在安装后运行脚本?

要在安装后运行您自己的脚本,您可以创建一个名为 install.bat 的文件,并将其与所需的任何其他文件(例如要安装的软件)一起放在文件夹中。然后将该文件夹绑定到您的撰写文件中,如下所示:

volumes:
-/home/user/example:/oem

示例文件夹 /home/user/example 将在安装过程中复制到 C:\OEM,其中包含的 install.bat 将在最后一步执行。

如何执行手动安装?

最好坚持使用自动安装,因为它会调整各种设置以防止在虚拟环境中运行 Windows 时出现常见问题。
但是,如果您坚持手动执行安装,请将以下环境变量添加到您的 Compose 文件中:

environment:
  MANUAL: "Y"

如何验证我的系统是否支持 KVM?

要验证您的系统是否支持 KVM,请运行以下命令:
sudo apt install cpu-checker
sudo kvm-ok
如果您收到来自 kvm-ok 的错误,表明无法使用 KVM 加速,请检查 BIOS 中的虚拟化设置。

如何更改 CPU 或 RAM 的数量?

默认情况下,容器最多可使用 2 个 CPU 核心和 4 GB RAM。
如果您想调整这个,您可以使用以下环境变量指定所需的数量:

environment:
  RAM_SIZE: "8G"
  CPU_CORES: "4"

如何配置用户名和密码?

默认情况下,安装过程中会创建一个名为 Docker 的用户,其密码为空。
如果您想使用不同的凭据,您可以在撰写文件中更改它们:

environment:
  USERNAME: "bill"
  PASSWORD: "gates"

如何使用 RDP 连接?

Web 查看器主要用于安装期间使用,因为它的图片质量较低,并且没有音频或剪贴板。
因此,为了获得更好的体验,您可以使用任何 Microsoft 远程桌面客户端连接到容器的 IP,使用用户名 Docker 并将密码留空。
Play Store 提供适用于 Android 的 RDP 客户端,Apple Store 提供适用于 iOS 的 RDP 客户端。对于 Linux,您可以使用 FreeRDP;对于 Windows,只需在搜索框中输入 mstsc 即可。

如何为容器分配单独的 IP 地址?

默认情况下,容器使用桥接网络,与主机共享 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

请务必修改这些值以匹配您的本地子网。
创建网络后,将撰写文件更改为如下所示:

services:
  windows:
    container_name: windows
    ..<snip>..
    networks:
      vlan:
        ipv4_address: 192.168.0.100
networks:
  vlan:
    external: true

这种方法的另一个好处是您不再需要执行任何端口映射,因为所有端口都会默认公开。
请注意,由于 macvlan 的设计不允许 Docker 主机与主机之间进行通信,因此无法从 Docker 主机访问此 IP 地址。如果担心此问题,您需要创建第二个 macvlan 作为解决方法。

Windows 如何从我的路由器获取 IP 地址?

配置 macvlan 容器后(见上文),Windows 可以通过从路由器请求 IP 成为家庭网络的一部分,就像真正的 PC 一样。
要启用此模式,请将以下行添加到您的撰写文件中:

environment:
  DHCP: "Y"
devices:
- /dev/vhost-net
device_cgroup_rules:
  - 'c *:* rwm'

请注意,在此模式下,容器和 Windows 将各自拥有单独的 IP。容器将保留 macvlan IP,而 Windows 将使用 DHCP IP。

如何添加多个磁盘?

要创建其他磁盘,请按如下方式修改您的 Compose 文件:

environment:
  DISK2_SIZE: "32G"
  DISK3_SIZE: "64G"
volumes:
  - /home/example:/storage2
  - /mnt/data/example:/storage3

如何直通磁盘?

可以通过以下方式将磁盘设备添加到 Compose 文件中,直接直通磁盘设备:

devices:
  - /dev/sdb:/disk1
  - /dev/sdc:/disk2

如果您希望它成为主驱动器,请使用 /disk1;如果希望它成为主驱动器,请使用 /disk2 及更高版本将其添加为辅助驱动器。

如何直通 USB 设备?

要直通 USB 设备,首先通过 lsusb 命令查找其供应商和产品 ID,然后将它们添加到您的撰写文件中,如下所示:

environment:
  ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
devices:
  - /dev/bus/usb

请注意,如果使用 USB 磁盘驱动器,则需要等到安装完成后才能添加它们。否则 Windows 会尝试将自身安装到错误的磁盘,因为磁盘的顺序将被重新排列。

该项目合法吗?

是的,该项目仅包含开源代码,不分发任何受版权保护的材料。代码中找到的任何产品密钥都只是 Microsoft 为试用目的提供的通用占位符。因此,根据所有适用法律,该项目将被视为合法。