速卖通素材
奋斗

在windows server 2019上部署docker容器?

服务器

在 Windows Server 2019 上部署 Docker 容器,主要取决于你希望使用 Windows 容器(运行 .NET Framework、IIS 等 Windows 应用)还是 Linux 容器(运行 Nginx、Node.js、Python 等 Linux 应用)。

以下是两种场景的详细部署步骤:


前置条件

  1. 操作系统版本:确保已安装 Windows Server 2019 (Standard or Datacenter)。
  2. 更新系统:运行 wsreset 或前往 Windows Update 将系统更新到最新补丁。
  3. 功能启用:必须启用“容器”和“Hyper-V"功能(如果是 Linux 容器模式,需开启 Hyper-V;如果是原生 Windows 容器模式,则不需要 Hyper-V,但推荐开启以支持混合模式)。

启用必要功能(PowerShell 管理员模式)

# 启用容器和 Hyper-V 功能
Enable-WindowsOptionalFeature -Online -FeatureName Containers,Microsoft-Hyper-V -All -NoRestart

执行后建议重启服务器:Restart-Computer


方案 A:部署 Windows 容器

适用于需要运行 .exe, .dll, IIS, SQL Server 等原生 Windows 应用。

1. 下载并安装 Docker Desktop for Windows (不推荐用于生产) 或 Docker Engine

注意:Windows Server 通常不使用 Docker Desktop(它依赖 WSL2),而是直接安装 Docker Engine

方法一:使用 Chocolatey (推荐,最简便)
打开 PowerShell (管理员),执行:

choco install docker-engine --params '/EngineVersion:24.0.7'

(注:版本号可根据需求调整,请查阅 Docker 官方文档获取最新版本)

方法二:手动安装 MSI

  1. 访问 Docker Hub。
  2. 下载 docker-ce-<version>.msi
  3. 双击运行安装程序,选择默认路径即可。

2. 验证安装

docker version

如果显示 Client 和 Server 版本信息,说明安装成功。

3. 拉取并运行 Windows 镜像

由于是 Windows 环境,必须使用 Windows 基础镜像:

# 拉取官方 Hello World 镜像 (Windows 版)
docker pull mcr.microsoft.com/windows/nanoserver:ltsc2019

# 运行容器
docker run -it --rm mcr.microsoft.com/windows/nanoserver:ltsc2019 cmd

如果报错提示缺少 NanoServer 镜像,请确认你的主机版本与镜像版本匹配(如 LTSC 2019 对应 ltsc2019)。


方案 B:部署 Linux 容器

适用于运行大多数开源工具(Nginx, Redis, Node.js, Python 等)。
前提:必须先启用 WSL 2 后端或 Hyper-V 隔离模式。在 Server 2019 上,推荐使用 Moby/LinuxKitDocker with Hyper-V

1. 配置 Docker 为 Linux 容器模式

编辑 Docker 配置文件 C:ProgramDataDockerconfigdaemon.json。如果不存在,请创建该文件。

添加以下内容:

{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-level": "warn",
  "storage-driver": "overlay2",
  "features": {
    "buildkit": true
  }
}

关键设置:对于 Linux 容器,通常需要设置 --exec-opt native.cgroupdriver=systemd 以确保兼容性。

2. 切换 Docker 运行时

关闭 Docker 服务:

Stop-Service docker

修改启动参数以允许 Linux 容器。在 C:ProgramDataDockerconfigdaemon.json 中确保没有强制指定 Windows 容器标签。

更简单的做法是使用 Docker Desktop 的 WSL 2 后端(如果在服务器上安装了 WSL 2),或者直接使用以下命令切换开关(视具体安装方式而定):

# 切换到 Linux 容器模式
Set-DockerContext -Name linux

如果未安装 Docker Desktop,直接在命令行运行 docker run 时会自动尝试拉取 Linux 镜像。如果失败,请检查是否启用了 Hyper-V 且网络正常。

3. 拉取并运行 Linux 镜像

# 拉取 Nginx 镜像
docker pull nginx:latest

# 运行容器,映射端口 80
docker run -d -p 80:80 --name my-web-server nginx

常见问题排查

问题现象 可能原因 解决方案
无法拉取镜像 网络不通或 DNS 问题 检查服务器能否 ping 通X_X,或在 daemon.json 中添加国内镜像提速器地址。
权限拒绝 (Access Denied) 用户无权限访问 Docker Socket 将当前用户加入 docker-users 组或运行 PowerShell 作为管理员。
Linux 容器启动失败 缺少 Hyper-V 或 WSL2 确保已启用 Hyper-V 功能 (Enable-WindowsOptionalFeature) 并重启。
Windows 容器版本不匹配 主机版本与镜像版本不一致 确保 mcr.microsoft.com/windows/nanoserver:<version> 中的 <version> 与 Server 2019 的构建号一致(通常用 ltsc2019)。

最佳实践建议

  1. 生产环境:建议使用 Docker Engine 而非 Docker Desktop,因为后者包含 GUI 组件且资源占用较高。
  2. 安全加固:不要随意暴露容器端口,建议使用反向X_X(如 Nginx Ingress 或 IIS ARR)管理流量。
  3. 日志管理:配置 json-file 驱动并限制日志大小,防止磁盘被填满。
  4. 监控:集成 Prometheus + Grafana 监控容器资源使用情况。

如果你需要针对特定应用(如 IIS 或 Nginx)的具体 Dockerfile 编写指导,请告诉我!

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