Server 2016 系统 Docker Compose 部署教程
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 2016 且 Container 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,且无 Exit 或 Unhealthy 标记。访问服务器 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.yml中networks正确定义,且服务位于同一自定义网络appnet。 - SQL Server 启动超时:增大
healthcheck.timeout至20s,或临时移除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 环境仍可通过本方案延续生命周期,平稳支撑关键业务系统运行。

