# Build stage / Giai đoạn build FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build WORKDIR /src # EN: Copy project files for layer caching # VI: Sao chép các file project để tận dụng layer caching COPY ["src/MktZaloService.API/MktZaloService.API.csproj", "src/MktZaloService.API/"] COPY ["src/MktZaloService.Domain/MktZaloService.Domain.csproj", "src/MktZaloService.Domain/"] COPY ["src/MktZaloService.Infrastructure/MktZaloService.Infrastructure.csproj", "src/MktZaloService.Infrastructure/"] COPY ["Directory.Build.props", "./"] # EN: Restore dependencies # VI: Khôi phục dependencies RUN dotnet restore "src/MktZaloService.API/MktZaloService.API.csproj" # EN: Copy all source code # VI: Sao chép toàn bộ source code COPY src/ ./src/ # EN: Build the application # VI: Build ứng dụng WORKDIR "/src/src/MktZaloService.API" RUN dotnet build "MktZaloService.API.csproj" -c Release -o /app/build # Publish stage / Giai đoạn publish FROM build AS publish RUN dotnet publish "MktZaloService.API.csproj" -c Release -o /app/publish /p:UseAppHost=false # Runtime stage / Giai đoạn runtime FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final WORKDIR /app # EN: Install curl for health check + create non-root user # VI: Cài curl cho health check + tạo user non-root RUN apt-get update && apt-get install -y --no-install-recommends curl && rm -rf /var/lib/apt/lists/* && \ groupadd -g 1001 dotnetuser && \ useradd -u 1001 -g dotnetuser -s /bin/sh dotnetuser # EN: Copy published application # VI: Sao chép ứng dụng đã publish COPY --from=publish /app/publish . # EN: Change ownership to non-root user # VI: Thay đổi quyền sở hữu sang user non-root RUN chown -R dotnetuser:dotnetuser /app # EN: Switch to non-root user # VI: Chuyển sang user non-root USER dotnetuser # EN: Expose port # VI: Mở cổng EXPOSE 8080 # EN: Set environment variables # VI: Thiết lập biến môi trường ENV ASPNETCORE_URLS=http://+:8080 ENV ASPNETCORE_ENVIRONMENT=Production # EN: Health check # VI: Kiểm tra health HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \ CMD curl -f http://localhost:8080/health/live || exit 1 # EN: Start the application # VI: Khởi động ứng dụng ENTRYPOINT ["dotnet", "MktZaloService.API.dll"] # Build trigger 1775832654