详解 Docker 启动 Windows 容器第一篇:多种方式及实用配置指南

文章目录

  • 前言
  • [1. 使用 Docker Compose 启动](#1. 使用 Docker Compose 启动)
  • [2. 使用 Docker CLI 启动](#2. 使用 Docker CLI 启动)
  • [3. 使用 Kubernetes 启动](#3. 使用 Kubernetes 启动)
  • [4. 兼容性说明](#4. 兼容性说明)
  • [5. 常见问题解答](#5. 常见问题解答)
  • [6. 高级配置](#6. 高级配置)
  • 总结

前言

在容器化技术中,Docker 允许我们在不同的平台上轻松运行各种操作系统,包括 Windows。本文将介绍如何通过 Docker Compose、Docker CLI 和 Kubernetes 来启动 Windows 系统容器(dockurr/windows),并提供详细的操作步骤及其配置方法。

windows 容器 dockerhub 地址(含使用):dockurr/windows

原理以及实现
dockurr/windows 是一个 Docker 镜像,通常用于运行 Windows 容器。这个镜像的主要目标是让你能够在 Linux 系统上模拟和运行 Windows 容器,尤其是在 Docker 环境下。它实现了一个类似于虚拟化的技术,可以通过 KVM(Kernel-based Virtual Machine)来支持 Windows 容器的运行。

1. 使用 Docker Compose 启动

Docker Compose 是管理多容器 Docker 应用的工具。你可以通过它快速启动并配置 Windows 容器。以下是配置示例:

yaml 复制代码
services:
  windows:
    image: dockurr/windows
    container_name: windows
    environment:
      VERSION: "11"
    devices:
      - /dev/kvm
      - /dev/net/tun
    cap_add:
      - NET_ADMIN
    ports:
      - 8006:8006
      - 3389:3389/tcp
      - 3389:3389/udp
    stop_grace_period: 2m

说明:

  • VERSION: "11":指定 Windows 版本,默认是 Windows 11 Pro。如果你需要其他版本,可以修改该值(详细版本选择见下文)。
  • devices:指定容器需要使用的设备,如 KVM(硬件虚拟化)和网络设备。
  • cap_add: NET_ADMIN:为容器添加网络管理员权限,允许容器进行网络配置。
  • ports:映射容器端口到宿主机端口,3389端口用于远程桌面连接(RDP)。
  • stop_grace_period:设置容器停止时的宽限期。

2. 使用 Docker CLI 启动

如果你更喜欢通过命令行启动容器,可以使用以下 Docker 命令:

bash 复制代码
docker run -it --rm -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows

说明:

  • -it:以交互模式运行容器。
  • --rm:容器停止后自动删除。
  • -p 8006:8006:映射容器端口 8006 到宿主机端口 8006。
  • --device:挂载 KVM 和网络设备。
  • --cap-add NET_ADMIN:为容器添加网络管理员权限。
  • --stop-timeout 120:设置容器停止时的超时时间。

3. 使用 Kubernetes 启动

如果你在 Kubernetes 集群中管理容器,可以通过以下命令将 Windows 容器部署到集群中:

bash 复制代码
kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml

4. 兼容性说明

不同平台对 Docker 的支持情况不同,以下是关于不同平台兼容性的总结:

产品 平台 兼容性
Docker Engine Linux
Docker Desktop Linux
Docker Desktop macOS
Docker Desktop Windows 11
Docker Desktop Windows 10

5. 常见问题解答

如何使用 Windows 容器?

  1. 启动容器并连接到 8006 端口。
  2. 使用浏览器连接到该端口。
  3. 安装过程会自动完成,直到你看到 Windows 桌面。

如何选择 Windows 版本?

默认情况下,安装的是 Windows 11 Pro。如果你需要选择其他版本,可以通过 VERSION 环境变量来指定。例如:

yaml 复制代码
environment:
  VERSION: "11"

如何更改存储位置?

可以通过在 Docker Compose 配置中使用 volumes 绑定来更改存储路径。例如:

yaml 复制代码
volumes:
  - /var/win:/storage

如何更改磁盘大小?

默认情况下,磁盘大小为 64 GB。如果你想增加磁盘容量,可以在配置文件中添加 DISK_SIZE 环境变量。例如:

yaml 复制代码
environment:
  DISK_SIZE: "256G"

如何共享文件?

你可以通过将本地文件夹挂载到容器内来实现文件共享。例如:

yaml 复制代码
volumes:
  - /home/user/example:/data

容器内的 /data 目录将映射到宿主机的 /home/user/example 目录。

如何在安装后运行脚本?

你可以在容器安装完成后运行自定义脚本。首先创建一个 install.bat 文件,并将其放入一个文件夹中,然后通过 volumes 绑定该文件夹。例如:

yaml 复制代码
volumes:
  - /home/user/example:/oem

容器会在安装完成后执行 install.bat 脚本。

如何设置用户名和密码?

默认情况下,安装时会创建一个用户名为 Docker 的账户,密码为空。如果你需要修改用户名和密码,可以在配置文件中设置:

yaml 复制代码
environment:
  USERNAME: "bill"
  PASSWORD: "gates"

如何选择 Windows 的语言和键盘布局?

你可以通过设置 LANGUAGE 和 KEYBOARD 环境变量来选择不同的语言和键盘布局。例如:

yaml 复制代码
environment:
  LANGUAGE: "French"
  KEYBOARD: "fr-FR"

6. 高级配置

如何配置独立的 IP 地址?

默认情况下,容器使用桥接网络共享宿主机的 IP 地址。如果你希望为容器分配一个独立的 IP 地址,可以创建一个 macvlan 网络。例如:

bash 复制代码
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

然后在 docker-compose.yml 文件中配置:

yaml 复制代码
services:
  windows:
    container_name: windows
    networks:
      vlan:
        ipv4_address: 192.168.0.100
networks:
  vlan:
    external: true

如何通过 RDP 连接到 Windows 容器?

你可以使用 Microsoft RDP 客户端(Windows 下使用 mstsc,Linux 可以使用 FreeRDP)连接到容器的 IP 地址,用户名为 Docker,密码为空。

总结

本文深入介绍了如何在 Docker 环境中启动 Windows 容器(dockurr/windows),提供了多种实现方式,包括通过 Docker Compose、Docker CLI 和 Kubernetes 启动容器的方法。同时,文章详述了各配置参数的意义和操作细节,覆盖了版本选择、磁盘大小调整、文件共享、自定义脚本运行、语言和键盘布局设置等常见需求。

此外,本文还探讨了容器的网络配置,包括如何为容器分配独立的 IP 地址以及通过 RDP 连接到 Windows 容器的具体方法。最后,总结了不同平台对 Windows 容器的兼容性,帮助读者快速排除可能遇到的问题。

对于想深入了解技术原理和潜在问题的读者,可以关注系列文章的下一篇,进一步探讨在本人部署 dockurr/windows 过程中遇到的一些问题,解释其中的原理和原因。

相关推荐
脸红ฅฅ*的思春期1 天前
免杀对抗—WinDbg查看Windows内存
windows·windbg·windows内核·windows内存查看
一条懒鱼6661 天前
K8S-特殊容器
云原生·容器·kubernetes
无限进步_1 天前
深入理解 C/C++ 内存管理:从内存布局到动态分配
c语言·c++·windows·git·算法·github·visual studio
克喵的水银蛇1 天前
Flutter 通用标签选择组件:TagSelector 支持单选 / 多选
javascript·windows·flutter
txzz88881 天前
网络应用netstart命令
网络·windows·计算机网络·microsoft
水饺编程1 天前
第3章,[标签 Win32] :处理 WM_PRINT 消息
c语言·c++·windows·visual studio
求梦8201 天前
Java:Windows家庭中文版的Docker下载安装
java·windows·docker
❀͜͡傀儡师1 天前
docker一键部署Flatnotes笔记工具
笔记·docker·容器
北极糊的狐1 天前
报错java: 找不到符号符号: 类 XxxController位置: 程序包 com.ruoyi.xxx.xxx.service
开发语言·windows·python
❀͜͡傀儡师1 天前
docker一键部署夜莺监控
运维·docker·容器