详解 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 过程中遇到的一些问题,解释其中的原理和原因。

相关推荐
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
rockmelodies3 天前
# Windows Server2008 R2 Standard(SP1镜像U盘)重置本地管理员密码【完整详细步骤】
windows·密码破解
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
分布式存储与RustFS3 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
玉&心3 天前
通过Arthas在线诊断K8S中的内存及JVM等使用情况
docker·k8s·arthas
xing-xing3 天前
Docker容器中Nginx站点根目录网页配置访问
nginx·docker
赵文宇(温玉)3 天前
CoreDNS的hosts插件的缺行配置导致k8s集群异常
容器·kubernetes·rancher
guo_wen_qiang3 天前
上传本地镜像到harbor中
docker·容器·持续部署
羑悻的小杀马特3 天前
Dockerfile 全景指南:从入门编写dockerfile到生产环境镜像优化实战,一步步带你从啃透制作指令到镜像制作落地!
docker·dockerfile·镜像制作
BianHuanShiZhe3 天前
docker常见命令
docker