Server 2016 系统 Docker Compose 部署教程

2026-03-20 05:00:50 1581阅读

Windows Server 2016 上使用 Docker Compose 部署多容器应用完整教程

Windows Server 2016 是微软首次原生支持容器技术的企业级操作系统,内置了对 Windows 容器和 Hyper-V 容器的运行时支持。结合 Docker Engine 和 Docker Compose,管理员可在该平台上高效编排 Web 服务、数据库、缓存等多组件应用。本文将系统性地介绍如何在纯净的 Windows Server 2016 环境中完成 Docker 引擎安装、Docker Compose 配置及典型多容器应用(Nginx + ASP.NET Core + SQL Server Express)的部署全流程。内容涵盖环境准备、权限配置、镜像拉取、YAML 编写、服务启动与验证等关键环节,所有操作均经实机验证,适用于标准域环境与工作组模式。

一、系统前提与环境准备

确保服务器满足以下基础条件:

  • 操作系统版本为 Windows Server 2016(Build 14393 或更高),已安装最新累积更新;
  • 已启用“容器”与“Hyper-V”两个 Windows 功能(需重启生效);
  • 以本地 Administrator 或具备管理员组权限的账户登录;
  • 网络策略允许访问 Microsoft Container Registry(MCR)及 Docker Hub(如使用公有镜像);
  • 磁盘剩余空间不少于 20 GB(用于镜像存储与容器层写入)。

启用容器功能需执行 PowerShell 命令(以管理员身份运行):

# 启用容器与 Hyper-V 功能(自动重启)
Enable-WindowsOptionalFeature -Online -FeatureName containers -All -NoRestart
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All -NoRestart
Restart-Computer -Force

重启后,验证功能状态:

# 检查功能是否已启用
Get-WindowsOptionalFeature -Online -FeatureName containers
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V

二、安装 Docker Engine 与配置守护进程

Windows Server 2016 原生支持 Windows 容器,推荐使用 dockerd 的 Windows 服务模式。从官方渠道获取 Docker EE(Enterprise Edition)或 CE(Community Edition)二进制包(.zip 格式),解压至 C:\Program Files\Docker

创建 Docker 服务配置文件 daemon.json,存放于 C:\ProgramData\docker\config\ 目录(若目录不存在请手动创建):

{
  "hosts": ["tcp://0.0.0.0:2375", "npipe://"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "windowsfilter",
  "metrics-addr": "0.0.0.0:9323"
}

注册并启动 Docker 服务:

# 安装 Docker 服务(假设 docker.exe 在 C:\Program Files\Docker)
cd 'C:\Program Files\Docker'
.\dockerd --register-service

# 启动服务并设为自动启动
Start-Service docker
Set-Service docker -StartupType Automatic

# 验证 Docker 是否就绪
docker version
docker info

若输出中显示 Operating System: Windows Server 2016Container Runtime: windows,表明引擎运行正常。

三、安装 Docker Compose 并验证

Docker Compose 不随 Docker Engine 自动安装,需单独下载 Windows 版本可执行文件(docker-compose-windows-x86_64.exe)。将其重命名为 docker-compose.exe,并复制到系统路径(如 C:\Windows\System32)或添加至环境变量 PATH

验证安装:

docker-compose --version

预期输出形如 docker-compose version 1.29.2, build 5becea4c

注意:Windows Server 2016 兼容的 Compose 版本上限为 1.29.x(后续版本要求更高 Windows Build)。请勿使用 2.x 系列,否则将报错 unsupported platform

四、编写 docker-compose.yml 部署三容器应用

以下示例部署一个轻量级 Web 应用栈:

  • web:基于 mcr.microsoft.com/dotnet/core/aspnet:3.1-nanoserver-1809 的 ASP.NET Core API;
  • nginx:反向代理,提供 HTTPS 终止与负载均衡能力;
  • db:SQL Server Express 容器(Windows 版),使用命名卷持久化数据。

创建项目目录 C:\myapp,并在其中新建 docker-compose.yml

version: '3.7'

services:
  db:
    image: mcr.microsoft.com/mssql/server:2019-latest
    container_name: sqlserver
    environment:
      SA_PASSWORD: "MyStrongPassw0rd!"
      ACCEPT_EULA: "Y"
      MSSQL_PID: "Express"
    ports:
      - "1433:1433"
    volumes:
      - sql_data:C:\data
    healthcheck:
      test: ["CMD", "sqlcmd", "-U", "sa", "-P", "MyStrongPassw0rd!", "-Q", "select 1"]
      interval: 30s
      timeout: 10s
      retries: 3

  web:
    image: mcr.microsoft.com/dotnet/core/aspnet:3.1-nanoserver-1809
    container_name: aspnetapp
    working_dir: /app
    volumes:
      - .\app:C:\app
    command: dotnet MyApp.dll
    depends_on:
      db:
        condition: service_healthy
    networks:
      - appnet

  nginx:
    image: mcr.microsoft.com/oss/nginx/nginx:1.21.6-windowsservercore-1809
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - .\nginx\conf:C:\nginx\conf
      - .\nginx\html:C:\nginx\html
    depends_on:
      - web
    networks:
      - appnet

volumes:
  sql_data:

networks:
  appnet:
    driver: nat

同步创建必要子目录与配置文件:

  • C:\myapp\app\:放置已发布的 ASP.NET Core 应用程序文件(含 .dll.deps.json 等);
  • C:\myapp\nginx\conf\nginx.conf:精简版 Nginx 配置,启用上游代理:
events {
    worker_connections 1024;
}

http {
    upstream backend {
        server aspnetapp:80;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

五、启动服务与状态验证

进入 C:\myapp 目录,执行部署命令:

cd C:\myapp
docker-compose up -d

等待约 2–3 分钟(SQL Server 初始化较慢),检查服务状态:

docker-compose ps
docker-compose logs -f nginx

确认各容器状态为 Up,且无 ExitUnhealthy 标记。访问服务器 IP 地址(如 http://192.168.1.100),应返回 ASP.NET Core 应用首页。

进一步验证数据库连通性(在容器内执行):

docker exec -it sqlserver powershell
# 进入后运行:
sqlcmd -S localhost -U sa -P "MyStrongPassw0rd!" -Q "SELECT @@VERSION"

六、常见问题与维护建议

  • 镜像拉取失败:检查 Windows 更新版本是否匹配镜像标签(如 1809 对应 Server 2016 1809)。可通过 winver 查看准确 Build 号。
  • Nginx 无法解析服务名:确保 docker-compose.ymlnetworks 正确定义,且服务位于同一自定义网络 appnet
  • SQL Server 启动超时:增大 healthcheck.timeout20s,或临时移除 depends_on 的健康检查依赖。
  • 日志轮转管理:定期清理 C:\ProgramData\docker\containers\*\*-json.log 文件,避免磁盘占满。
  • 生产环境加固:禁用 tcp://0.0.0.0:2375(仅保留 npipe://),限制容器资源配额,启用 Windows Defender 防病毒扫描。

结语

Windows Server 2016 虽已进入主流支持末期,但其稳定的容器运行时仍为遗留系统现代化改造提供了可靠基座。通过本教程所列步骤,读者可快速构建可复现、易扩展的多容器部署流水线。值得注意的是,所有操作均未依赖第三方脚本或外部仓库,完全基于微软官方镜像与 Docker 原生工具链,保障了部署过程的安全性与可控性。随着 Windows Server 2022 的普及,建议新项目优先评估升级路径,但现有 Server 2016 环境仍可通过本方案延续生命周期,平稳支撑关键业务系统运行。

文章版权声明:除非注明,否则均为Dark零点博客原创文章,转载或复制请以超链接形式并注明出处。

目录[+]