在 Windows Server 2019 上部署 Docker 容器,通常需要使用 Windows 容器(Windows Containers)。虽然 Docker Desktop 是开发环境的首选,但在生产环境的服务器(Server Core 或带 GUI 的桌面版)上,我们更推荐使用 Docker Engine for Windows。
以下是完整的部署步骤:
⚠️ 前置条件检查
在开始之前,请确保您的系统满足以下条件:
- 操作系统版本:必须是 Windows Server 2019 (版本 1809 或更高),且已安装最新的累积更新。
- 功能启用:必须启用“容器”和“Hyper-V"功能(如果是使用 Hyper-V 隔离模式)。
- 网络配置:确保服务器有稳定的网络连接以拉取镜像。
- 建议模式:
- 进程隔离 (Process Isolation):性能更好,适合大多数场景,但容器与宿主机共享内核。
- Hyper-V 隔离 (Hyper-V Isolation):更安全,容器运行在轻量级虚拟机中,资源开销稍大。
第一步:启用必要的 Windows 功能
打开 PowerShell(以管理员身份运行),执行以下命令来启用容器支持所需的组件:
# 启用容器功能
Enable-WindowsOptionalFeature -Online -FeatureName Containers -All
# 如果计划使用 Hyper-V 隔离模式,还需要启用 Hyper-V 功能
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
# 重启服务器以使更改生效
Restart-Computer
注意:重启后,请重新以管理员身份打开 PowerShell。
第二步:安装 Docker Engine
有两种主要方式安装:通过脚本自动安装或通过 NuGet 包管理器。推荐直接使用微软官方提供的安装脚本,它会自动下载并配置 Docker。
方法 A:使用官方安装脚本(推荐)
在管理员 PowerShell 中运行以下命令:
# 下载并运行安装脚本
Invoke-WebRequest -UseBasicParsing https://raw.githubusercontent.com/microsoft/Windows-Containers/master/tools/install.ps1 -OutFile install.ps1
.install.ps1
或者,如果上述脚本因网络问题无法访问,可以使用 docker-install 脚本(从 GitHub 获取):
$ProgressPreference = 'SilentlyContinue'
$url = "https://download.docker.com/win/static/stable/x64/docker.zip"
$output = "$env:TEMPdocker.zip"
Invoke-WebRequest $url -OutFile $output
# 解压
Expand-Archive $output -DestinationPath "$env:TEMPdocker"
# 将 docker.exe 添加到系统路径
$dockerPath = "$env:TEMPdockerdocker.exe"
if (!(Test-Path $dockerPath)) {
Write-Error "Docker installation failed."
exit
}
# 添加环境变量
[Environment]::SetEnvironmentVariable("PATH", "$dockerPath;$env:PATH", [EnvironmentVariableTarget]::Machine)
# 启动 Docker 守护进程
Start-Sleep -Seconds 5
& "$dockerPath" --version
提示:最稳定且标准的做法是使用 Chocolatey 包管理器(如果已安装):
choco install docker-engine -y
方法 B:手动下载安装(离线环境)
如果无法联网,请访问 Docker 官网下载 Windows 静态二进制包(.zip),解压后将 docker.exe 放入 C:Program FilesDocker,并将该目录添加到系统环境变量 PATH 中。然后需要手动配置注册表项以允许非交互式启动服务。
第三步:验证安装
安装完成后,重启 PowerShell(如果未自动刷新),输入以下命令检查版本:
docker --version
输出应类似:Docker version 20.10.x, build ...
接着测试拉取一个基础镜像(例如 Nginx 的 Windows 版本):
# 拉取 Windows 版本的 Nginx 镜像
docker pull mcr.microsoft.com/windows/servercore:ltsc2019
# 或者拉取 Nginx
docker pull mcr.microsoft.com/windows/nginx:latest
第四步:运行第一个容器
尝试运行一个简单的 Hello World 容器:
# 运行容器
docker run --rm mcr.microsoft.com/windows/nanoserver:ltsc2019 echo "Hello from Windows!"
如果看到 Hello from Windows!,说明部署成功。
第五步:配置开机自启(重要)
默认情况下,Docker 可能不会随系统启动自动运行。你需要将其设置为 Windows 服务并设置自动启动:
# 创建 Docker 服务
New-Service -Name Docker -BinaryPathName "C:Program FilesDockerdocker.exe daemon" -DisplayName "Docker" -StartupType Automatic
注意:如果使用的是 Chocolatey 安装的 Docker,通常已经配置好了服务,可以直接跳过此步。
验证服务状态:
Get-Service Docker
状态应为 Running 且启动类型为 Automatic。
常见问题与注意事项
-
镜像选择:
- Windows Server 上的容器不能运行 Linux 镜像(除非使用 WSL2,但这在 Server 2019 上支持有限且复杂)。
- 请务必使用
mcr.microsoft.com/windows/...前缀的镜像。 - 常见的标签如
ltsc2019,ltsc2022需与宿主机的版本匹配以避免兼容性问题。
-
网络模式:
- Windows 容器默认使用
nat网络。如果需要暴露端口,使用-p参数即可,例如:docker run -d -p 80:80 mcr.microsoft.com/windows/nginx:latest。
- Windows 容器默认使用
-
安全性:
- 在生产环境中,建议使用 Hyper-V 隔离模式 (
--isolation=hyperv) 来运行容器,这样可以提供内核级别的隔离保护。 - 示例:
docker run --isolation=hyperv ...
- 在生产环境中,建议使用 Hyper-V 隔离模式 (
-
资源限制:
- Windows 容器的内存和 CPU 管理不如 Linux 精细,建议在运行关键业务时监控宿主机的资源使用情况。
通过以上步骤,您应该已经在 Windows Server 2019 上成功部署并运行了 Docker 容器。如果您遇到具体的报错信息,可以提供日志以便进一步排查。
云计算