Dockerfile
Rama develop · réplica de lectura del repositorio original.
# syntax=docker/dockerfile:1
# ----- build -----
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /source
# restore first so the layer is cached until a project file changes
COPY src/Taskist.sln ./
COPY src/Libraries/Taskist.Core/Taskist.Core.csproj Libraries/Taskist.Core/
COPY src/Libraries/Taskist.Data/Taskist.Data.csproj Libraries/Taskist.Data/
COPY src/Libraries/Taskist.Service/Taskist.Service.csproj Libraries/Taskist.Service/
COPY src/Presentation/Taskist.Web/Taskist.Web.csproj Presentation/Taskist.Web/
# restore the web project, not the solution: the solution also lists the test project, which is not copied here
RUN dotnet restore Presentation/Taskist.Web/Taskist.Web.csproj
COPY src/ ./
RUN dotnet publish Presentation/Taskist.Web/Taskist.Web.csproj \
-c Release \
-o /app \
--no-restore
# ----- runtime -----
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
WORKDIR /app
# curl backs the container health check
RUN apt-get update \
&& apt-get install -y --no-install-recommends curl \
&& rm -rf /var/lib/apt/lists/*
COPY --from=build /app ./
# data protection keys must outlive the container (attachments live in the database)
RUN mkdir -p /app/App_Data/DataProtectionKeys \
&& chown -R $APP_UID:$APP_UID /app/App_Data
# run as the non-root user provided by the base image
USER $APP_UID
ENV ASPNETCORE_ENVIRONMENT=Production \
ASPNETCORE_HTTP_PORTS=8080
EXPOSE 8080
ENTRYPOINT ["dotnet", "Taskist.Web.dll"]