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

相关推荐
binqian1 小时前
【Docker】安装registry本地镜像库,开启Https功能
java·docker·https
悟纤1 小时前
Docker入门篇[SpringBoot之Docker实战系列] - 第534篇
spring boot·docker·eureka
杰克逊的日记2 小时前
k8s的ip地址分别都是从哪里来的
tcp/ip·容器·kubernetes
小白电脑技术3 小时前
在爱快iKuai路由系统上添加docker功能!操作很简单
docker·电脑
白手小弟3 小时前
docker 部署Nginx UI
nginx·docker·容器
shark_西瓜甜4 小时前
Kubernetes Gateway API-5-后端协议和网关基础设置标签
容器·kubernetes·gateway
可以吧可以吧6 小时前
Docker-compose Prometheus Grafana 安装
docker·grafana·prometheus
wyw00006 小时前
rknn环境搭建之docker篇
运维·docker·ai·容器
JZC_xiaozhong6 小时前
制造业该怎么做数据治理?
大数据·安全·ci/cd·容器·数据挖掘·数据分析·云计算