背景
过去十多年,国内大部分企业的核心系统都跑在 Windows Server + IIS + .NET Framework 这套组合上。它稳定、成熟、文档齐全,但问题也很明显:
授权成本高(Windows Server + SQL Server 许可证不是小钱);平台绑定死(离开 Windows 就跑不动);部署靠手工(每次上线都要配 IIS、改权限、清缓存);无法直接迁移到 Linux 或国产系统。
随着国家“信创”政策推进,越来越多企业被要求逐步用 国产 Linux 系统(如统信 UOS、银河麒麟、中标麒麟) 替代 Windows,并支持 国产 CPU 架构(鲲鹏、龙芯、兆芯等)。
这不仅是合规要求,更是 IT 架构现代化的契机。而 ASP.NET Core 的跨平台特性,正好成为企业迁移的重要支撑——它让“一次编写,处处运行”从口号变成现实。
第一阶段:传统的 Windows + IIS 部署
部署模式
- 发布方式:Visual Studio 发布 → IIS 手动配置
特点
- 但环境依赖极强,不同服务器配置不一致 → “本地能跑,线上炸锅”
局限性
✅ 这种方式在单机时代尚可,但在多地部署或信创替代场景下几乎无法适应。
第二阶段:Windows Docker —— 容器化的第一步
ASP.NET Core 的跨平台设计,让容器化成为可能。
微软推出了 Windows 容器,让企业可以在不离开 Windows 的情况下,先体验容器化带来的好处。
示例 Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:6.0-nanoserver-ltsc2022
WORKDIR /app
COPY ./publish .
ENTRYPOINT ["dotnet", "YourApp.dll"]
运行命令
docker build -t imagesname:latest .

结果会提示成功信息:

docker run -d -p 8080:80 yourapp:latest
优势
- 实现环境一致性(“开发环境怎么配,生产环境就怎么跑”)
局限
- 镜像体积大(Windows 基础镜像动辄 1GB+)
- 性能开销高(Windows 容器比 Linux 容器慢)
- 生态相对薄弱(很多工具不支持 Windows 容器)
- Docker Windows 版本在一定条件下会收费
★💡 一句话总结:这是“安全区内的第一步”,让你熟悉容器,为下一步做准备。
第三阶段:Linux Docker —— 全面跨平台与国产化支持
进入这一阶段,企业逐步完成从 Windows 容器 → Linux 容器 的迁移,
部署环境从 IIS 彻底转向 Docker + ASP.NET Core 的跨平台运行。
构建标准 Linux 镜像(多阶段构建)
# 构建阶段
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app/publish
# 运行阶段(轻量镜像)
FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine
WORKDIR /app
COPY --from=build /app/publish .
EXPOSE 8080
ENTRYPOINT ["dotnet", "YourApp.dll"]
推荐环境
| |
|---|
| |
| Docker CE / Podman / iSula |
| |
| Kubernetes / K3s / Docker Compose |
优点
✅ 完全脱离 Windows
✅ 支持国产 CPU(ARM64、LoongArch)
✅ 镜像轻量(Alpine 基础镜像仅 5MB)
✅ DevOps 友好,CI/CD 一键发布
✅ 支持多地部署与快速恢复
第四阶段:云原生与多地部署
容器化完成后,企业可以进一步演进为 云原生架构:
- 接入 Prometheus + Grafana + Loki 实现监控日志
- 在国产云平台上运行(如麒麟云、移动云、华为云 Stack 等)
单机部署与镜像分发:国产环境下的实战方案
很多企业环境暂时无法连公网,也没有私有仓库,
此时“单机离线部署镜像”成为最关键的问题。
场景
- 两台机器之间无公网,只能通过 U盘 / 局域网共享传输。
✅ 方法一:使用 docker save / docker load
导出镜像:
docker save -o myapp.tar myapp:latest
拷贝镜像文件:
scp myapp.tar user@192.168.1.20:/home/user/
目标机导入:
docker load -i myapp.tar
查看结果:
docker images
✅ 方法二:批量导出多个镜像
docker save -o all-images.tar myapp:latest redis:7 nginx:1.25
docker load -i all-images.tar
✅ 方法三:导出压缩包(推荐)
docker save myapp:latest | gzip > myapp.tar.gz
gunzip -c myapp.tar.gz | docker load
✅ 方法四:临时搭建本地镜像仓库
当有多台设备时,建议搭建一个局域网私有仓库:
docker run -d -p 5000:5000 --name registry registry:2
推送镜像:
docker tag myapp:latest 192.168.1.100:5000/myapp:latest
docker push 192.168.1.100:5000/myapp:latest
其他机器拉取:
docker pull 192.168.1.100:5000/myapp:latest
⚠️ 若使用 HTTP 仓库,请配置:
// /etc/docker/daemon.json
{
"insecure-registries": ["192.168.1.100:5000"]
}
✅ 方法五:国产系统(UOS、麒麟)兼容命令
podman save -o myapp.tar myapp:latest
podman load -i myapp.tar
如需支持不同 CPU 架构:
docker buildx build --platform=linux/arm64,linux/amd64 -t myapp:latest .
七、迁移路线图与落地建议
实施建议
统一使用 .NET 8 / ASP.NET Core,优先容器化,再迁移到 Linux,自建或使用国产化镜像仓库,引入 CI/CD 实现持续交付,对多地单机节点用离线导入方案,建立配置中心与日志监控体系。
八、结语
从 Windows IIS 到 Linux Docker,
ASP.NET Core 的部署方式经历了从图形化手工到自动化容器化的深刻变革。
在信创和国产化的时代背景下,这不只是技术选择,更是企业 IT 架构重塑的必经之路。
该文章在 2025/11/12 8:45:33 编辑过