# 后端:.NET 10,在镜像内编译(宿主机无需安装 SDK) # 构建:在仓库根目录执行 # docker build -f docker/Dockerfile.api -t aidop-api:latest . # # ★ 优化要点:先拷项目文件做 restore,再拷源码做 publish。 # 这样只改 .cs 时 restore 层走缓存,构建从 ~8min 降到 ~1min。 FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build WORKDIR /src/server # ── 第一步:只拷 sln + 所有 csproj → restore(此层只在依赖变更时失效) ── COPY server/Admin.NET.sln ./ COPY server/Admin.NET.Core/Admin.NET.Core.csproj Admin.NET.Core/ COPY server/Admin.NET.Application/Admin.NET.Application.csproj Admin.NET.Application/ COPY server/Admin.NET.Web.Core/Admin.NET.Web.Core.csproj Admin.NET.Web.Core/ COPY server/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj Admin.NET.Web.Entry/ COPY server/Admin.NET.Test/Admin.NET.Test.csproj Admin.NET.Test/ COPY server/Plugins/Admin.NET.Plugin.AiDOP/Admin.NET.Plugin.AiDOP.csproj Plugins/Admin.NET.Plugin.AiDOP/ COPY server/Plugins/Admin.NET.Plugin.AiDOP.Tests/Admin.NET.Plugin.AiDOP.Tests.csproj Plugins/Admin.NET.Plugin.AiDOP.Tests/ COPY server/Plugins/Admin.NET.Plugin.ApprovalFlow/Admin.NET.Plugin.ApprovalFlow.csproj Plugins/Admin.NET.Plugin.ApprovalFlow/ COPY server/Plugins/Admin.NET.Plugin.DingTalk/Admin.NET.Plugin.DingTalk.csproj Plugins/Admin.NET.Plugin.DingTalk/ COPY server/Plugins/Admin.NET.Plugin.GoView/Admin.NET.Plugin.GoView.csproj Plugins/Admin.NET.Plugin.GoView/ COPY server/Plugins/Admin.NET.Plugin.K3Cloud/Admin.NET.Plugin.K3Cloud.csproj Plugins/Admin.NET.Plugin.K3Cloud/ COPY server/Plugins/Admin.NET.Plugin.ReZero/Admin.NET.Plugin.ReZero.csproj Plugins/Admin.NET.Plugin.ReZero/ COPY server/Plugins/Admin.NET.Plugin.WorkWeixin/Admin.NET.Plugin.WorkWeixin.csproj Plugins/Admin.NET.Plugin.WorkWeixin/ RUN dotnet restore Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj # ── 第二步:拷全部源码 → publish(只有这层在改 .cs 时重建) ── COPY server/ . RUN dotnet publish Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj \ -c Release -f net10.0 \ -o /app/publish \ --no-restore # ── 运行阶段 ── FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final WORKDIR /app ENV LANG=zh-Hans.UTF-8 \ DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false \ TZ=Asia/Shanghai \ ASPNETCORE_URLS=http://0.0.0.0:5005 RUN apt-get update \ && apt-get install -y --no-install-recommends tzdata \ && rm -rf /var/lib/apt/lists/* COPY --from=build /app/publish . EXPOSE 5005 ENTRYPOINT ["dotnet", "Admin.NET.Web.Entry.dll"]