在windows server 2019上部署docker容器?

在 Windows Server 2019 上部署 Docker 容器,通常需要使用 Windows 容器(Windows Containers)。虽然 Docker Desktop 是开发环境的首选,但在生产环境的服务器(Server Core 或带 GUI 的桌面版)上,我们更推荐使用 Docker Engine for Windows

以下是完整的部署步骤:

⚠️ 前置条件检查

在开始之前,请确保您的系统满足以下条件:

  1. 操作系统版本:必须是 Windows Server 2019 (版本 1809 或更高),且已安装最新的累积更新。
  2. 功能启用:必须启用“容器”和“Hyper-V"功能(如果是使用 Hyper-V 隔离模式)。
  3. 网络配置:确保服务器有稳定的网络连接以拉取镜像。
  4. 建议模式
    • 进程隔离 (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


常见问题与注意事项

  1. 镜像选择

    • Windows Server 上的容器不能运行 Linux 镜像(除非使用 WSL2,但这在 Server 2019 上支持有限且复杂)。
    • 请务必使用 mcr.microsoft.com/windows/... 前缀的镜像。
    • 常见的标签如 ltsc2019, ltsc2022 需与宿主机的版本匹配以避免兼容性问题。
  2. 网络模式

    • Windows 容器默认使用 nat 网络。如果需要暴露端口,使用 -p 参数即可,例如:docker run -d -p 80:80 mcr.microsoft.com/windows/nginx:latest
  3. 安全性

    • 在生产环境中,建议使用 Hyper-V 隔离模式 (--isolation=hyperv) 来运行容器,这样可以提供内核级别的隔离保护。
    • 示例:docker run --isolation=hyperv ...
  4. 资源限制

    • Windows 容器的内存和 CPU 管理不如 Linux 精细,建议在运行关键业务时监控宿主机的资源使用情况。

通过以上步骤,您应该已经在 Windows Server 2019 上成功部署并运行了 Docker 容器。如果您遇到具体的报错信息,可以提供日志以便进一步排查。

未经允许不得转载:云计算 » 在windows server 2019上部署docker容器?