求用Docker Buildkit缓存.NET 5 Nuget包的Dockerfile示例
适配BuildKit缓存的Vue + .NET 5 MVC混合应用Dockerfile示例
前置说明
- 需确保Docker已启用BuildKit功能:Linux/macOS下构建前执行
export DOCKER_BUILDKIT=1,Windows下可在Docker Desktop设置中开启「Use the new BuildKit backend」 - NuGet在Linux容器内的默认全局包缓存路径为
/root/.nuget/packages,通过--mount=type=cache挂载该路径即可实现跨构建的包复用 - 示例同时添加了npm缓存挂载,进一步缩短前端Webpack构建耗时
完整Dockerfile
# 1. 构建阶段:使用.NET 5 SDK镜像 FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build WORKDIR /src # 安装Node.js(版本可根据你的项目要求调整,以下为Node 16示例) RUN curl -fsSL https://deb.nodesource.com/setup_16.x | bash - \ && apt-get install -y nodejs # 先复制所有.csproj文件,利用Docker层缓存:只要项目依赖不变,这一步不会重复执行 COPY *.csproj ./ # 挂载NuGet缓存执行restore RUN --mount=type=cache,target=/root/.nuget/packages \ dotnet restore "YourProjectName.csproj" # 复制所有项目代码 COPY . . WORKDIR "/src/YourProjectName" # 挂载npm缓存安装前端依赖+执行Webpack打包 RUN --mount=type=cache,target=/root/.npm \ npm install \ && npm run build # 构建发布版本 RUN dotnet publish "YourProjectName.csproj" -c Release -o /app/publish /p:UseAppHost=false # 2. 最终运行阶段:使用轻量的.NET 5运行时镜像 FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 COPY --from=build /app/publish . ENTRYPOINT ["dotnet", "YourProjectName.dll"]
注意事项
- 把示例中的
YourProjectName替换为你实际的项目名称 - Node.js版本需要和你本地开发用的版本保持一致,避免前端构建报错
- 第一次构建时会生成缓存,后续只要
csproj或package.json没有改动,依赖安装步骤耗时可以从十几分钟缩短到几秒
内容的提问来源于stack exchange,提问作者SKK
相关产品推荐
相关产品推荐

