Dockerfile.api 2.7 KB

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