在 Windows Server 上进行 Docker 部署是完全可行的,但需要注意版本兼容性和部署方式。以下是详细的步骤和注意事项:
✅ 一、前提条件
1. 支持的 Windows Server 版本
Docker 支持以下 Windows Server 版本(以容器模式运行):
- Windows Server 2016(版本 1607)
- Windows Server 2019
- Windows Server 2022
- Windows Server, version 1809 / 2004 / 20H2(长期支持版推荐)
注意:必须是 Datacenter 或 Standard 版本,并启用 容器功能。
✅ 二、安装 Docker Engine(Windows 容器)
方法一:使用 PowerShell 安装 Docker EE(企业版)
-
以管理员身份打开 PowerShell
-
安装 OneGet PowerShell 模块(如果未安装)
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force -
安装 Docker
Install-Package -Name docker -ProviderName DockerMsftProvider -Force -
重启计算机
Restart-Computer -Force -
验证 Docker 是否正常运行
docker --version docker run hello-world:nanoserver
方法二:使用 Microsoft 的现代化方式(推荐用于新系统)
从 Windows Server 2019 开始,建议使用 Microsoft Update 或 PowerShell 脚本 安装最新版 Docker。
使用脚本安装(官方推荐)
# 安装最新版 Docker
Invoke-WebRequest "https://github.com/docker/cli/releases/download/v20.10.17/Docker.Desktop.for.Windows.Server.zip" -OutFile "docker.zip"
Expand-Archive docker.zip -DestinationPath $env:ProgramFiles
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";" + "$env:ProgramFilesdocker", [EnvironmentVariableTarget]::Machine)
$env:Path += ";" + "$env:ProgramFilesdocker"
dockerd --register-service
Start-Service docker
⚠️ 实际上,Docker 官方已不再维护独立的 Windows Docker Engine,推荐使用 Docker Desktop for Windows Server 或迁移到 containerd + Kubernetes。
✅ 三、配置 Docker 使用 Windows 容器
Windows 支持两种容器类型:
- Windows 容器(基于 Windows 内核)
- Linux 容器(通过 WSL2 或 Hyper-V,仅限特定环境)
设置为 Windows 容器模式:
& $Env:ProgramFilesDockerDockerDockerCli.exe -SwitchDaemon
注意:Linux 容器需要 WSL2 和 Hyper-V,通常在 Windows 10/11 上更常见;在 Windows Server 中主要使用 Windows 容器。
✅ 四、运行一个简单的 Windows 容器示例
docker run --rm mcr.microsoft.com/windows/nanoserver:ltsc2022 echo "Hello from Windows Container!"
✅ 五、部署应用(如 ASP.NET Core)
示例:运行一个 ASP.NET Core 应用
- 编写
Dockerfile:FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY –from=build /app/publish .
ENTRYPOINT [“dotnet”, “YourApp.dll”]
2. 构建镜像:
```powershell
docker build -t mywebapp .
- 运行容器:
docker run -d -p 8080:80 --name web mywebapp
访问 http://服务器IP:8080 查看应用。
✅ 六、管理与运维建议
| 任务 | 命令 |
|---|---|
| 查看容器 | docker ps |
| 查看镜像 | docker images |
| 日志查看 | docker logs <容器名> |
| 进入容器 | docker exec -it <容器名> powershell |
| 停止容器 | docker stop <容器名> |
✅ 七、替代方案(现代推荐)
由于原生 Docker Engine 在 Windows 上维护较弱,微软和 Docker 推荐以下替代方案:
1. 使用 containerd + Kubernetes(生产推荐)
- 使用 Kubernetes on Windows(如 AKS Hybrid 或 kubeadm)
- 配合 containerd 作为运行时
2. Docker Desktop for Windows Server(需授权)
- 提供 GUI 和 CLI 支持
- 更容易管理容器
3. Azure Container Instances (ACI) 或 AKS Windows 节点
- 云原生部署更简单可靠
✅ 八、常见问题排查
| 问题 | 解决方法 |
|---|---|
no matching manifest for windows/amd64 |
使用正确的基础镜像标签(如 ltsc2022, nanoserver) |
| 容器启动失败 | 检查宿主 OS 版本与镜像是否兼容 |
| 网络不通 | 检查 NAT 网络或使用 transparent 网络模式 |
| 性能差 | Windows 容器比 Linux 更重,建议优化镜像大小 |
✅ 总结
| 项目 | 推荐做法 |
|---|---|
| 操作系统 | Windows Server 2019/2022 |
| 安装方式 | PowerShell 安装 DockerMsftProvider 或使用 Docker Desktop |
| 容器类型 | Windows 容器(nanoserver、servercore) |
| 生产环境 | 推荐使用 Kubernetes + containerd |
| 开发测试 | 可直接使用 Docker CLI |
如果你有具体的应用场景(如 IIS、SQL Server、.NET 应用),我可以提供对应的 Dockerfile 示例。
是否需要我为你生成一个具体的部署模板?
CLOUD技术博