Dockerfile 1.38 KB
# 使用官方.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