Files
EmailBill/Dockerfile
孙诚 4526cc6396
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 8s
Docker Build & Deploy / Deploy to Production (push) Successful in 7s
first commot
2025-12-25 11:20:56 +08:00

67 lines
1.5 KiB
Docker

# 多阶段构建 Dockerfile
# 第一阶段:构建前端
FROM node:20-alpine AS frontend-build
WORKDIR /app/frontend
# 复制前端项目文件
COPY Web/package.json Web/pnpm-lock.yaml ./
RUN npm install -g pnpm && pnpm install
# 复制前端源代码并构建
COPY Web/ ./
RUN pnpm run build
# 第二阶段:构建后端
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS backend-build
WORKDIR /app
# 复制解决方案文件和项目文件
COPY *.sln ./
COPY Directory.Build.props ./
COPY Directory.Packages.props ./
COPY nuget.config ./
COPY Common/*.csproj ./Common/
COPY Entity/*.csproj ./Entity/
COPY Repository/*.csproj ./Repository/
COPY Service/*.csproj ./Service/
COPY WebApi/*.csproj ./WebApi/
# 还原依赖
RUN dotnet restore
# 复制所有源代码
COPY Common/ ./Common/
COPY Entity/ ./Entity/
COPY Repository/ ./Repository/
COPY Service/ ./Service/
COPY WebApi/ ./WebApi/
# 构建并发布
RUN dotnet publish WebApi/WebApi.csproj -c Release -o /app/publish
# 将前端构建产物复制到后端的 wwwroot 目录
COPY --from=frontend-build /app/frontend/dist /app/publish/wwwroot
# 第三阶段:运行时镜像
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
WORKDIR /app
# 复制发布的应用
COPY --from=backend-build /app/publish ./
# 创建数据库目录
RUN mkdir -p /app/database
# 暴露端口
EXPOSE 8080
# 设置环境变量
ENV ASPNETCORE_URLS=http://+:8080
ENV ASPNETCORE_ENVIRONMENT=Production
# 启动应用
ENTRYPOINT ["dotnet", "WebApi.dll"]