SuperAPI AI 工具集

dotnet-dockerfile

部署与运维

查看项目

更新于 10-15 23:33

技能介绍

用途:为 .NET 项目生成生产可用的多阶段 Dockerfile,适用于新建 Dockerfile、优化现有镜像、选择运行时镜像等场景。

主要能力:先确定 .NET 版本(8/9/10)与项目类型(ASP.NET Core Web、API、Worker、控制台),再选择标准、chiseled 或 Native AOT 优化方案。提供镜像选型参考,如 aspnet:10.0(约 92 MB)、aspnet:10.0-alpine(约 52 MB)、aspnet:10.0-noble-chiseled(约 53 MB)、aspnet:10.0-azurelinux3.0-distroless(约 55 MB)、runtime-deps:10.0-noble-chiseled(自包含约 22 MB、AOT 约 12 MB)。chiseled 镜像基于 Ubuntu,无 shell、无包管理器、默认非 root,推荐用于生产。

使用方式:标准模式先复制 .csproj 并 dotnet restore 以利用缓存,再复制源码并 dotnet publish -c Release -o /app/publish,运行阶段复制发布产物、USER app、EXPOSE 8080。多项目解决方案先复制 .sln 与各 .csproj 再还原。自包含部署加 --self-contained true -r linux-x64,使用 runtime-deps 镜像。Native AOT 使用 sdk:10.0-aot 构建,需在 .csproj 设置 <PublishAot>true</PublishAot>。.NET 10 支持无 Dockerfile 发布:dotnet publish --os linux --arch x64 /t:PublishContainer,可指定 ContainerRegistry、ContainerRepository,多架构用 -p ContainerRuntimeIdentifiers="linux-x64;linux-arm64"。可加 development 阶段用 dotnet watch run,构建命令 docker build --target development -t myapp:dev .。缓存优化用 RUN --mount=type=cache,target=/root/.nuget/packages dotnet restore。生产可用 SHA 摘要固定镜像,并需提供 .dockerignore 排除 bin、obj、.vs、node_modules 等。

限制:.NET 10 起 Ubuntu 为默认 Linux 发行版,不再提供 Debian 镜像;chiseled 无 shell,最终阶段只能用 exec 形式,不能用 && 链;Native AOT 不支持运行时反射,部分库不兼容;自包含需匹配运行时标识符。其他细节资料未提供。