在windows server 2019上部署docker容器,使用docker运行linux服务?

在 Windows Server 2019 上运行 Linux 容器是完全可行的,但需要注意:Windows Server 2019 默认只支持“Windows 容器”。要运行 Linux 容器,必须启用 WSL 2 (Windows Subsystem for Linux 2)Hyper-V 模式下的 Linux 兼容性支持。

以下是两种主流方案的详细步骤和对比:


方案一:使用 WSL 2 + Docker Desktop(推荐,轻量高效)

这是目前最流行、性能最好的方式。WSL 2 允许在 Windows 内部运行一个真实的 Linux 内核,Docker Desktop 会利用这个内核来运行 Linux 容器。

前置条件

  1. 操作系统版本:Windows Server 2019 需要安装 Update KB4578963 或更高版本(确保支持 WSL 2)。
  2. 虚拟化支持:BIOS/UEFI 中需开启虚拟化技术(VT-x/AMD-V)。
  3. 管理员权限:所有操作需在管理员命令行或 PowerShell 中执行。

部署步骤

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 发行版
重启后,再次以管理员身份运行 PowerShell,下载并安装 Ubuntu(或其他 Linux 发行版)作为后端:

# 设置默认版本为 WSL 2
wsl --set-default-version 2

# 从 Microsoft Store 安装 Ubuntu(如果无法访问商店,可手动下载 .appx 包)
# 或者使用命令行安装(需先下载 ubuntu-20.04.appx 等文件)
# 这里假设你已安装 Ubuntu,直接初始化:
wsl -l -v  # 查看状态

注意:如果是纯服务器环境没有图形界面,可能需要通过 .zip 包或 winget 安装 Ubuntu。

3. 安装 Docker Desktop for Windows

  1. 下载 Docker Desktop 安装包。
  2. 安装过程中,务必勾选 "Use WSL 2 instead of Hyper-V"
  3. 安装完成后启动 Docker Desktop,它会自动配置 WSL 2 后端。

4. 验证并运行 Linux 容器
打开新的 PowerShell 窗口(无需进入 WSL 子系统),直接运行:

docker run --rm hello-world

如果看到欢迎信息,说明基础环境正常。现在可以运行标准的 Linux 服务了,例如 Nginx:

docker run -d -p 8080:80 nginx:alpine

访问 http://localhost:8080 即可看到页面。


方案二:使用 Hyper-V 原生 Linux 容器(传统方式,较复杂)

如果你无法使用 WSL 2(例如某些旧版更新或特殊安全策略),可以使用 Hyper-V 隔离的 Linux 容器模式。这种方式资源开销稍大,且配置较为繁琐。

部署步骤

  1. 启用 Hyper-V 角色
    Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart
  2. 安装 Docker Engine (非 Desktop)
    Windows Server 通常不直接提供 Docker Desktop 的安装包(它是面向桌面的)。你需要下载 Docker Engine for Windows 的 MSI 包。
    注意:较新版本的 Docker Engine 对 Windows Server 2019 的 Linux 容器支持可能受限,建议优先尝试方案一。
  3. 配置 Docker 守护进程
    编辑 C:ProgramDatadockerconfigdaemon.json,添加以下内容以强制使用 Linux 模式:

    {
     "default-runtime": "runc",
     "runtimes": {
       "runc": {
         "path": "docker-runc"
       }
     },
     "exec-opts": ["native.cgroupdriver=cgroupfs"]
    }

    (注:此配置在不同 Docker 版本中差异较大,极易出错,故不推荐生产环境首选)


关键注意事项与最佳实践

特性 WSL 2 方案 (推荐) Hyper-V 方案
性能 接近原生 Linux,启动快 较慢,启动需完整 VM
网络 NAT 模式,端口映射简单 虚拟交换机,配置复杂
文件系统 跨系统访问方便 (\wsl$) 需挂载共享文件夹
适用场景 开发、测试、一般生产 特定遗留系统需求
维护难度

常见问题排查

  1. 端口冲突:Windows 宿主机和容器端口不能重复。确保 docker run -p 8080:80 中的 8080 未被其他服务占用。
  2. 持久化数据:Linux 容器内的数据默认是易失的。务必使用 Volume 挂载
    docker run -d -p 8080:80 -v C:data/nginx:/usr/share/nginx/html nginx
  3. 防火墙:Windows Server 防火墙可能会阻止外部访问容器的端口。需要在“高级安全 Windows Defender 防火墙”中添加入站规则,允许对应端口(如 8080)。
  4. DNS 解析:如果容器内无法解析域名,可在 daemon.json 中配置 DNS:
    {
     "dns": ["8.8.8.8", "8.8.4.4"]
    }

结论

对于 Windows Server 2019,强烈建议使用 WSL 2 + Docker Desktop 方案。它不仅配置简单,而且能完美解决 Linux 容器在内核层面的兼容性问题,同时保持了良好的性能和易用性。除非有特殊的合规要求禁止使用 WSL,否则无需考虑传统的 Hyper-V Linux 容器模式。

未经允许不得转载:云知识CLOUD » 在windows server 2019上部署docker容器,使用docker运行linux服务?