在 Windows Server 2019 上部署 Docker 容器,首先需要明确一个关键前提:Windows Server 2019 原生支持的是“Windows 容器”(Windows Containers)。
如果你需要运行 Linux 容器(Linux Containers),则必须启用 WSL 2 或安装 Docker Desktop for Windows(但这通常用于开发环境,生产服务器更推荐直接使用 Windows 容器)。
以下是针对生产环境的两种主要方案:
方案一:使用 Windows 容器(推荐用于生产环境)
这是 Windows Server 2019 最原生的方式,无需额外的虚拟化层,性能最好。
1. 前置条件与角色安装
确保服务器已安装 .NET Framework 4.7.2 或更高版本(通常默认已安装)。
打开 PowerShell(以管理员身份运行),执行以下命令安装容器功能:
# 启用容器功能
Install-WindowsFeature -Name Container -IncludeManagementTools
2. 安装 Docker Engine
微软官方提供了 docker-engine 的 MSI 安装包。
- 下载地址:访问 Microsoft Container Registry 或搜索 "Docker CE for Windows Server"。
- 步骤:
- 下载
.msi安装包(例如docker-ce.msi)。 - 双击运行安装程序,按照向导完成安装。
- 安装完成后,服务会自动启动。
- 下载
注意:如果是较新的 Docker 版本,可能需要先卸载旧版。可以通过
Get-WindowsPackage查看并移除冲突包。
3. 验证安装
在 PowerShell 中运行:
docker version
docker run hello-world
如果看到 "Hello from Docker!" 且没有报错,说明 Windows 容器引擎已就绪。
4. 拉取和运行 Windows 镜像
由于是 Windows 环境,你需要拉取 Windows 基础镜像:
# 拉取最新的 Windows Server Core 镜像
docker pull mcr.microsoft.com/windows/servercore:ltsc2019
# 运行一个简单的 PowerShell 容器
docker run --rm -it mcr.microsoft.com/windows/servercore:ltsc2019 powershell
此时你将进入一个 Windows CMD/PowerShell 环境。
方案二:使用 WSL 2 运行 Linux 容器(适合混合环境)
如果你必须在 Windows Server 2019 上运行 Linux 容器(如 Nginx, Redis, Python Linux 版等),则需要启用 WSL 2 内核。
1. 启用 WSL 2 功能
以管理员身份运行 PowerShell:
# 启用 WSL 功能和虚拟机平台
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 重启服务器
Restart-Computer
2. 设置默认版本为 WSL 2
重启后,再次以管理员身份运行:
wsl --set-default-version 2
3. 安装 Linux 发行版(可选但推荐)
为了管理方便,建议安装 Ubuntu 作为 WSL 发行版:
wsl --install -d Ubuntu
首次运行会提示你设置用户名和密码。
4. 安装 Docker Engine (Linux 版)
在 WSL 2 的 Ubuntu 终端内,按照标准的 Ubuntu Docker 安装流程操作:
sudo apt-get update
sudo apt-get install docker.io
# 或者使用官方脚本
curl -fsSL https://get.docker.com | sh
之后即可像在普通 Linux 服务器上一样运行 Linux 容器。
常见问题与注意事项
-
网络模式:
- Windows 容器默认使用
nat网络模式,宿主机端口映射可能不如 Linux 灵活。 - 如果需要更复杂的网络配置,可能需要配置
transparent或l2bridge模式。
- Windows 容器默认使用
-
安全组与防火墙:
- 确保 Windows Server 的防火墙允许 Docker 相关的端口(通常是 TCP 2375, 2376 以及容器暴露的业务端口)。
- 如果使用云服务商(如 Azure/AWS),别忘了在安全组规则中放行对应端口。
-
资源限制:
- Windows 容器共享宿主机的内核,因此对 CPU 和内存的限制不如 Linux 容器精细,但在大多数场景下足够使用。
-
长期支持 (LTSC):
- 务必使用
ltsc2019版本的镜像,避免使用nanoserver除非你有特殊需求,因为servercore兼容性更好且包含更多常用工具。
- 务必使用
总结
- 如果你的应用是 .NET Framework 或基于 Windows 的应用,请直接使用 方案一(Windows 容器)。
- 如果你的应用依赖 Linux 库 或必须是 Linux 环境,请使用 方案二(WSL 2 + Linux Docker)。
如果你需要具体的某个应用(如 IIS, SQL Server, .NET Core API)的 Dockerfile 示例或部署脚本,请告诉我具体需求。
云知识CLOUD