在 Windows Server 2022 上搭建 Docker,最推荐且稳定的方式是使用 Docker Desktop for Windows(虽然它通常用于桌面版 Windows,但在服务器版上通过特定配置或脚本也可运行)或者直接使用 Docker Engine (Linux Containers)。
但需要特别注意:Windows Server 2022 默认支持两种容器模式:
- Windows Containers:原生支持,无需额外虚拟化层,性能最好,适合运行 .NET、IIS 等 Windows 应用。
- Linux Containers:需要开启 Hyper-V 隔离或使用 WSL2 后端,适合运行 Linux 应用(如 Nginx, MySQL, Python 等)。
以下是针对这两种场景的详细搭建步骤。
前置条件检查
在开始之前,请确保满足以下基础要求:
- 操作系统:Windows Server 2022 (Standard or Datacenter edition)。
- 版本要求:建议安装最新的累积更新。
- 功能依赖:必须启用 Hyper-V 和 Containers 功能。
- 内存:建议至少 8GB RAM(若跑 Linux 容器,推荐 16GB+)。
1. 启用必要功能
打开 PowerShell(管理员身份),执行以下命令启用容器和 Hyper-V 支持:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Enable-WindowsOptionalFeature -Online -FeatureName Containers
Restart-Computer
系统重启后继续下一步。
方案一:部署 Windows 容器(推荐用于 .NET/ASP.NET Core 应用)
这是最原生的方式,不需要复杂的转换层,性能损耗最小。
1. 安装 Docker
对于 Windows Server,微软官方推荐使用 docker install 脚本或直接下载 MSI 安装包。
-
方法 A(推荐):使用官方安装脚本自动处理依赖。
# 下载并运行安装脚本 curl.exe https://raw.githubusercontent.com/microsoft/winget-pkgs/master/src/Microsoft/Docker/DockerInstall.ps1 | iex注意:如果脚本无法运行,请手动前往 Microsoft Store 搜索 "Docker" 并安装,或者去 GitHub 下载 Docker Engine for Windows 的 MSI 包。
-
方法 B(手动 MSI):
访问 Docker Hub 或微软官方文档,下载Docker-Desktop-for-Windows.msi(注意:部分旧版 Docker Desktop 对 Server 支持不佳,建议直接下载 Docker Engine for Windows 的 standalone installer,通常在 GitHub Releases 页面查找docker-ce相关包,或者使用winget install docker.docker-desktop)。
2. 验证安装
安装完成后,打开新的 PowerShell 窗口:
docker --version
docker info
如果看到 Server Version: 24.x.x 且没有报错,说明安装成功。
3. 拉取镜像测试
尝试拉取一个 Windows 镜像:
docker pull mcr.microsoft.com/windows/nanoserver:ltsc2022
# 或者更轻量的版本
docker pull mcr.microsoft.com/windows/servercore:ltsc2022
方案二:部署 Linux 容器(推荐用于通用 Web/数据库服务)
如果你需要在 Windows Server 上运行 Linux 应用(如 Nginx, Redis, Go, Node.js),你需要让 Docker 能够运行 Linux 内核。
1. 启用 WSL2 后端(推荐方式)
Windows Server 2022 支持 WSL2,这是运行 Linux 容器的最佳实践。
第一步:启用 WSL2 功能
dism.exe /online /enable-feature /featurename:ms-platform /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Restart-Computer
第二步:设置默认 WSL 版本
wsl --set-default-version 2
第三步:安装 Docker Desktop 并切换后端
- 安装 Docker Desktop for Windows(通过 Winget 或 MSI)。
- 启动 Docker Desktop。
- 进入设置(齿轮图标) -> General。
- 勾选 "Use the ‘WSL 2 based engine’"。
- 点击 Apply & Restart。
注意:如果在纯服务器环境(无图形界面)中,Docker Desktop 可能无法启动 GUI。此时建议使用 Docker Engine for Linux (via WSL2) 的方式,但这在 Server 2022 上配置较为复杂。
替代方案(无图形界面):
如果你的 Server 是 Headless(无桌面),建议直接在服务器上安装 Docker CE for Windows 并配置其使用 Hyper-V 模式来模拟 Linux 容器,或者使用 Nexus 等工具管理远程 Linux 宿主机。最简单的手动配置(Hyper-V 模式):
在安装 Docker Desktop 时,选择 "Run in Hyper-V isolation mode"(如果选项可用),这允许在 Windows Server 上直接运行 Linux 容器,但性能略低于 WSL2。
2. 验证 Linux 容器
docker pull nginx
docker run -d -p 8080:80 --name my-nginx nginx
如果能看到容器状态为 Up,则说明 Linux 容器环境搭建成功。
常见问题与优化建议
-
资源限制:
Windows Server 的资源开销较大。如果是生产环境,建议在 Docker Desktop 设置中限制 CPU 和内存使用量,防止影响其他业务。 -
网络问题:
如果使用 NAT 网络,宿主机访问容器可能需要配置端口映射。确保防火墙规则允许相应端口(如 80, 443, 3306 等)。New-NetFirewallRule -DisplayName "Docker Port 80" -Direction Inbound -LocalPort 80 -Protocol TCP -Action Allow -
生产环境建议:
- 不要在生产服务器上使用 Docker Desktop:它是为开发设计的,包含不必要的 GUI 组件且资源占用高。
- 推荐架构:在 Windows Server 2022 上仅运行 Windows 容器。如果需要 Linux 容器,建议搭建一台独立的 Linux VM(如 Ubuntu/CentOS)专门作为 Docker 宿主机,通过 K8s 或 Swarm 进行统一调度,或者使用 Azure Arc / AWS EKS Anywhere 等混合云方案。
- 轻量级替代:如果只需要简单的 Linux 容器,可以考虑安装 Docker Engine (CLI only) 配合 WSL2,但这在 Server 2022 上的 CLI 版本获取较麻烦(通常需要构建自定义 ISO 或脚本),不如直接使用 Docker Desktop 方便。
总结
- 运行 .NET/IIS 应用:直接安装 Docker Desktop,使用 Windows 容器 (
mcr.microsoft.com/windows/...)。 - 运行 Linux 应用:安装 Docker Desktop,启用 WSL2 后端,使用 Linux 镜像 (
nginx,mysql等)。 - 纯命令行/Headless 环境:建议先尝试安装 Docker Desktop 的无头模式(Headless),如果不可行,考虑迁移至 Linux 宿主机以获取更好的稳定性和性能。
安装完成后,运行 docker run hello-world (Windows) 或 docker run hello-world (Linux) 即可确认一切正常。
CLOUD云枢