使用多阶段构建,FROM选择sdk和runtime镜像,WORKDIR设/app,先COPY项目文件恢复依赖,再复制源码,RUN发布应用,EXPOSE声明端口,ENTRYPOINT启动程序,最终减小镜像体积。

在 Dockerfile 中构建 .NET 应用,关键在于合理使用多阶段构建和相关指令来实现镜像的高效、安全与可维护。以下是构建 .NET 应用时最核心的几条指令及其作用。
1. FROM:指定基础镜像
选择合适的 .NET 基础镜像是第一步。通常使用官方 Microsoft 提供的 SDK 镜像进行构建,运行时使用更轻量的 runtime 镜像。
示例:-
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build—— 构建阶段使用 SDK 镜像 -
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime—— 运行阶段使用 runtime 镜像
2. WORKDIR:设置工作目录
为容器内操作定义一个默认的工作路径,避免路径混乱。
示例:-
WORKDIR /app—— 在容器中创建并进入 /app 目录
3. COPY:复制本地文件到镜像
将项目文件(如 .csproj 和源码)复制到容器中,用于还原依赖和编译。
常见做法:-
COPY *.csproj ./—— 先复制项目文件以利用缓存优化构建速度 -
COPY . ./—— 复制所有源码文件
4. RUN:执行命令
在镜像构建过程中运行命令,比如恢复 NuGet 包、发布应用等。
典型用法:-
RUN dotnet restore—— 恢复项目依赖 -
RUN dotnet publish -c Release -o out—— 发布应用到 out 目录
5. EXPOSE:声明服务端口
说明容器运行时监听的端口,虽非强制但有助于文档化和运行时配置。
本文档主要讲述的是Flash Builder操作指南;Flash Builder将构成应用程序的资源(文件夹和文件)组合到一个容器中,我们将其称为项目。项目包含一组属性,这些属性控制应用程序的构建方式、构建的应用程序所在的位置、调试的处理方式以及该项目于工作空间中其他项目的关系。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
-
EXPOSE 80或EXPOSE 443
6. ENTRYPOINT 与 CMD:启动应用
定义容器启动时运行的命令。推荐使用 ENTRYPOINT 执行最终的应用入口。
示例:-
ENTRYPOINT ["dotnet", "MyApp.dll"]—— 启动 .NET 程序集
若使用 CMD,可作为参数补充,但多数情况下直接用 ENTRYPOINT 更明确。
7. 多阶段构建:减少最终镜像体积
通过多个 FROM 阶段分离构建环境与运行环境,只将发布后的文件复制到最小镜像中。
结构示意:- 第一阶段(build):还原、编译、发布
- 第二阶段(final):仅复制发布文件,设置启动命令
这样能显著减小镜像大小,提升安全性与部署效率。
基本上就这些。掌握这几个指令,就能写出高效、标准的 .NET 应用 Dockerfile。关键是分阶段、合理复制文件、选择合适的基础镜像,并正确启动应用。不复杂但容易忽略细节。









