This commit is contained in:
zhangzhe 2026-02-04 18:47:37 +08:00
parent 1edbe04a71
commit 9d6d1f0af0
2 changed files with 79 additions and 44 deletions

View File

@ -1,8 +1,53 @@
# 请参阅 https://aka.ms/customizecontainer 以了解如何自定义调试容器,以及 Visual Studio 如何使用此 Dockerfile 生成映像以更快地进行调试。
# 学业邑规划 - 后台管理系统 Docker 构建文件
# 包含前端构建和后端构建两个阶段
# 此阶段用于在快速模式(默认为调试配置)下从 VS 运行时
FROM mcr.microsoft.com/dotnet/aspnet:10.0-noble AS base
# Install SkiaSharp native dependencies
# ==================== 阶段1: 构建前端 ====================
FROM node:20-alpine AS frontend-build
WORKDIR /app/admin-web
# 复制前端项目文件
COPY src/MiAssessment.Admin/admin-web/package*.json ./
# 安装依赖
RUN npm ci --registry=https://registry.npmmirror.com
# 复制前端源码
COPY src/MiAssessment.Admin/admin-web/ ./
# 构建前端
RUN npm run build
# ==================== 阶段2: 构建后端 ====================
FROM mcr.microsoft.com/dotnet/sdk:10.0-noble AS backend-build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
# 复制项目文件
COPY src/MiAssessment.Admin/MiAssessment.Admin.csproj src/MiAssessment.Admin/
COPY src/MiAssessment.Admin.Business/MiAssessment.Admin.Business.csproj src/MiAssessment.Admin.Business/
COPY src/MiAssessment.Model/MiAssessment.Model.csproj src/MiAssessment.Model/
COPY src/MiAssessment.Core/MiAssessment.Core.csproj src/MiAssessment.Core/
COPY src/MiAssessment.Infrastructure/MiAssessment.Infrastructure.csproj src/MiAssessment.Infrastructure/
# 还原依赖
RUN dotnet restore src/MiAssessment.Admin/MiAssessment.Admin.csproj
# 复制所有源码
COPY src/ src/
# 构建后端
WORKDIR /src/src/MiAssessment.Admin
RUN dotnet build MiAssessment.Admin.csproj -c $BUILD_CONFIGURATION -o /app/build
# ==================== 阶段3: 发布后端 ====================
FROM backend-build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish MiAssessment.Admin.csproj -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
# ==================== 阶段4: 最终运行镜像 ====================
FROM mcr.microsoft.com/dotnet/aspnet:10.0-noble AS final
# 安装 SkiaSharp 原生依赖(用于验证码生成等图形处理)
RUN apt-get update && apt-get install -y \
libfontconfig1 \
libfreetype6 \
@ -12,33 +57,16 @@ RUN apt-get update && apt-get install -y \
libc6-dev \
libgdiplus \
&& rm -rf /var/lib/apt/lists/*
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081
# 此阶段用于生成服务项目
FROM mcr.microsoft.com/dotnet/sdk:10.0-noble AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["src/HoneyBox.Admin/HoneyBox.Admin.csproj", "src/HoneyBox.Admin/"]
COPY ["src/HoneyBox.Admin.Business/HoneyBox.Admin.Business.csproj", "src/HoneyBox.Admin.Business/"]
COPY ["src/HoneyBox.Model/HoneyBox.Model.csproj", "src/HoneyBox.Model/"]
COPY ["src/HoneyBox.Core/HoneyBox.Core.csproj", "src/HoneyBox.Core/"]
COPY ["src/HoneyBox.Infrastructure/HoneyBox.Infrastructure.csproj", "src/HoneyBox.Infrastructure/"]
RUN dotnet restore "./src/HoneyBox.Admin/HoneyBox.Admin.csproj"
COPY . .
WORKDIR "/src/src/HoneyBox.Admin"
RUN dotnet build "./HoneyBox.Admin.csproj" -c $BUILD_CONFIGURATION -o /app/build
# 此阶段用于发布要复制到最终阶段的服务项目
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./HoneyBox.Admin.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
# 此阶段在生产中使用,或在常规模式下从 VS 运行时使用(在不使用调试配置时为默认值)
FROM base AS final
WORKDIR /app
# 复制后端发布文件
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "HoneyBox.Admin.dll"]
# 复制前端构建产物到 wwwroot
COPY --from=frontend-build /app/admin-web/dist ./wwwroot
ENTRYPOINT ["dotnet", "MiAssessment.Admin.dll"]

View File

@ -1,32 +1,39 @@
# 请参阅 https://aka.ms/customizecontainer 以了解如何自定义调试容器,以及 Visual Studio 如何使用此 Dockerfile 生成映像以更快地进行调试。
# 学业邑规划 - 小程序 API 服务 Docker 构建文件
# 此阶段用于在快速模式(默认为调试配置)下从 VS 运行时
# ==================== 阶段1: 基础运行环境 ====================
FROM mcr.microsoft.com/dotnet/aspnet:10.0-noble AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
# 此阶段用于生成服务项目
# ==================== 阶段2: 构建后端 ====================
FROM mcr.microsoft.com/dotnet/sdk:10.0-noble AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["src/HoneyBox.Api/HoneyBox.Api.csproj", "src/HoneyBox.Api/"]
COPY ["src/HoneyBox.Model/HoneyBox.Model.csproj", "src/HoneyBox.Model/"]
COPY ["src/HoneyBox.Core/HoneyBox.Core.csproj", "src/HoneyBox.Core/"]
COPY ["src/HoneyBox.Infrastructure/HoneyBox.Infrastructure.csproj", "src/HoneyBox.Infrastructure/"]
RUN dotnet restore "./src/HoneyBox.Api/HoneyBox.Api.csproj"
COPY . .
WORKDIR "/src/src/HoneyBox.Api"
RUN dotnet build "./HoneyBox.Api.csproj" -c $BUILD_CONFIGURATION -o /app/build
# 此阶段用于发布要复制到最终阶段的服务项目
# 复制项目文件
COPY src/MiAssessment.Api/MiAssessment.Api.csproj src/MiAssessment.Api/
COPY src/MiAssessment.Model/MiAssessment.Model.csproj src/MiAssessment.Model/
COPY src/MiAssessment.Core/MiAssessment.Core.csproj src/MiAssessment.Core/
COPY src/MiAssessment.Infrastructure/MiAssessment.Infrastructure.csproj src/MiAssessment.Infrastructure/
# 还原依赖
RUN dotnet restore src/MiAssessment.Api/MiAssessment.Api.csproj
# 复制所有源码
COPY src/ src/
# 构建后端
WORKDIR /src/src/MiAssessment.Api
RUN dotnet build MiAssessment.Api.csproj -c $BUILD_CONFIGURATION -o /app/build
# ==================== 阶段3: 发布 ====================
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./HoneyBox.Api.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
RUN dotnet publish MiAssessment.Api.csproj -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
# 此阶段在生产中使用,或在常规模式下从 VS 运行时使用(在不使用调试配置时为默认值)
# ==================== 阶段4: 最终运行镜像 ====================
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "HoneyBox.Api.dll"]
ENTRYPOINT ["dotnet", "MiAssessment.Api.dll"]