0

0

如何用 Docker 多阶段构建优化 .NET 镜像?

煙雲

煙雲

发布时间:2025-10-16 20:08:02

|

878人浏览过

|

来源于php中文网

原创

使用多阶段构建可减小.NET镜像体积:第一阶段用sdk镜像编译,第二阶段用aspnet运行时镜像,仅复制发布文件,避免携带源码和SDK,显著提升部署效率。

如何用 docker 多阶段构建优化 .net 镜像?

使用 Docker 多阶段构建可以显著减小 .NET 镜像体积,提升部署效率。关键在于分离编译环境和运行环境:在构建阶段使用包含 SDK 的镜像完成编译,运行阶段则使用轻量的运行时镜像。

选择合适的 .NET 基础镜像

构建镜像的第一步是合理选择基础镜像。.NET 官方提供了多种标签:

  • sdk:包含完整开发工具,适合构建阶段
  • aspnet:仅含运行时依赖,适合发布阶段
  • runtime:最精简的运行环境,适用于控制台应用

例如,.NET 8 中推荐使用 mcr.microsoft.com/dotnet/sdk:8.0mcr.microsoft.com/dotnet/aspnet:8.0

编写多阶段 Dockerfile

通过多个 FROM 指令划分构建流程。典型结构如下:

# 构建阶段
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY *.sln .
COPY src/MyApp/*.csproj ./src/MyApp/
RUN dotnet restore
COPY src/ ./src/
WORKDIR /src/MyApp
RUN dotnet publish -c Release -o /app/publish --no-restore

# 运行阶段
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]

这样最终镜像只包含编译后的文件和运行时依赖,避免携带 SDK 和源码。

Powtoon
Powtoon

AI创建令人惊叹的动画短片及简报

下载

进一步优化镜像大小

除了多阶段构建,还可通过以下方式压缩镜像:

  • 启用发布时剪裁(PublishTrimmed):移除未使用的程序集
  • 使用 ReadyToRun 编译:提升启动速度,但可能增加体积,需权衡
  • 合并 COPY 指令:减少镜像层数量
  • 设置目标框架为特定版本(如 net8.0),避免兼容性冗余

可在 publish 命令中添加参数:
-p:PublishTrimmed=true -p:PublishSingleFile=true

验证与部署

构建完成后,用 docker images 查看镜像大小。相比单阶段构建,多阶段通常能减少 200MB 以上体积。运行容器测试功能是否正常,并检查日志输出。

基本上就这些,合理利用多阶段构建,.NET 镜像可以做到又小又快。

相关专题

更多
k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

252

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

495

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

400

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

438

2024.04.08

vsd文件打开方法
vsd文件打开方法

vsd文件打开方法有使用Microsoft Visio软件、使用Microsoft Visio查看器、转换为其他格式等。想了解更多vsd文件相关内容,可以阅读本专题下面的文章。

484

2023.10.30

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

8

2026.01.22

html编辑相关教程合集
html编辑相关教程合集

本专题整合了html编辑相关教程合集,阅读专题下面的文章了解更多详细内容。

51

2026.01.21

三角洲入口地址合集
三角洲入口地址合集

本专题整合了三角洲入口地址合集,阅读专题下面的文章了解更多详细内容。

27

2026.01.21

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

354

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
光速学会docker容器
光速学会docker容器

共33课时 | 1.9万人学习

Docker 17 中文开发手册
Docker 17 中文开发手册

共0课时 | 0人学习

极客学院Docker视频教程
极客学院Docker视频教程

共33课时 | 17.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号