# 使用官方.NET 6运行时作为基础镜像 FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base WORKDIR /app # 安装必要的系统依赖 RUN apt-get update && apt-get install -y \ curl \ && rm -rf /var/lib/apt/lists/* # 创建必要的目录 RUN mkdir -p /app/logs /app/output /app/backup # 使用官方.NET 6 SDK作为构建镜像 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src # 复制项目文件 COPY ["LqSalaryCalculationService.csproj", "./"] RUN dotnet restore "LqSalaryCalculationService.csproj" # 复制所有源代码 COPY . . # 构建应用程序 RUN dotnet build "LqSalaryCalculationService.csproj" -c Release -o /app/build # 发布应用程序 FROM build AS publish RUN dotnet publish "LqSalaryCalculationService.csproj" -c Release -o /app/publish \ --self-contained true \ --runtime linux-x64 # 最终运行镜像 FROM base AS final WORKDIR /app # 复制发布的应用程序 COPY --from=publish /app/publish . # 设置环境变量 ENV ASPNETCORE_ENVIRONMENT=Production ENV DOTNET_RUNNING_IN_CONTAINER=true # 创建非root用户 RUN groupadd -r appuser && useradd -r -g appuser appuser RUN chown -R appuser:appuser /app USER appuser # 设置入口点 ENTRYPOINT ["dotnet", "LqSalaryCalculationService.dll"] # 健康检查 HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD curl -f http://localhost:8080/health || exit 1