Optimized steps for Dockerfile's

This commit is contained in:
ruberoid 2025-10-16 23:04:28 +04:00
parent b8f0cc363b
commit ddea840f6e
2 changed files with 46 additions and 52 deletions

View File

@ -1,12 +1,12 @@
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app WORKDIR /app
RUN apt-get update && apt-get install -y ca-certificates && update-ca-certificates EXPOSE 80
RUN apt-get install -y curl && rm -rf /var/lib/apt/lists/* EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src WORKDIR /src
# Install and update CA certificates FIRST before any network operations # Install CA certificates for custom NuGet source
RUN apt-get update && \ RUN apt-get update && \
apt-get install -y --no-install-recommends ca-certificates && \ apt-get install -y --no-install-recommends ca-certificates && \
update-ca-certificates && \ update-ca-certificates && \
@ -14,33 +14,31 @@ RUN apt-get update && \
COPY . . COPY . .
# Create global NuGet.Config with package source mapping # Create NuGet.Config using cat with heredoc
RUN mkdir -p /root/.nuget/NuGet && \ RUN mkdir -p /root/.nuget/NuGet && \
echo '<?xml version="1.0" encoding="utf-8"?>' > /root/.nuget/NuGet/NuGet.Config && \ cat > /root/.nuget/NuGet/NuGet.Config <<'EOF'
echo '<configuration>' >> /root/.nuget/NuGet/NuGet.Config && \ <?xml version="1.0" encoding="utf-8"?>
echo ' <packageSources>' >> /root/.nuget/NuGet/NuGet.Config && \ <configuration>
echo ' <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />' >> /root/.nuget/NuGet/NuGet.Config && \ <packageSources>
echo ' <add key="musk.fun.nocr" value="https://gitea.musk.fun/api/packages/nocr/nuget/index.json" />' >> /root/.nuget/NuGet/NuGet.Config && \ <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
echo ' </packageSources>' >> /root/.nuget/NuGet/NuGet.Config && \ <add key="musk.fun.nocr" value="https://gitea.musk.fun/api/packages/nocr/nuget/index.json" />
echo ' <packageSourceMapping>' >> /root/.nuget/NuGet/NuGet.Config && \ </packageSources>
echo ' <packageSource key="musk.fun.nocr">' >> /root/.nuget/NuGet/NuGet.Config && \ <packageSourceMapping>
echo ' <package pattern="Nocr.*" />' >> /root/.nuget/NuGet/NuGet.Config && \ <packageSource key="musk.fun.nocr">
echo ' </packageSource>' >> /root/.nuget/NuGet/NuGet.Config && \ <package pattern="Nocr.*" />
echo ' <packageSource key="nuget.org">' >> /root/.nuget/NuGet/NuGet.Config && \ </packageSource>
echo ' <package pattern="*" />' >> /root/.nuget/NuGet/NuGet.Config && \ <packageSource key="nuget.org">
echo ' </packageSource>' >> /root/.nuget/NuGet/NuGet.Config && \ <package pattern="*" />
echo ' </packageSourceMapping>' >> /root/.nuget/NuGet/NuGet.Config && \ </packageSource>
echo '</configuration>' >> /root/.nuget/NuGet/NuGet.Config </packageSourceMapping>
</configuration>
EOF
# Restore with verbose logging # Publish directly (restore + build + publish in one step)
RUN dotnet restore "src/Nocr.Users.Host/Nocr.Users.Host.csproj" --verbosity normal
WORKDIR "/src/src/Nocr.Users.Host" WORKDIR "/src/src/Nocr.Users.Host"
RUN dotnet build "Nocr.Users.Host.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Nocr.Users.Host.csproj" -c Release -o /app/publish RUN dotnet publish "Nocr.Users.Host.csproj" -c Release -o /app/publish
FROM base AS final FROM base AS final
WORKDIR /app WORKDIR /app
COPY --from=publish /app/publish . COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "Nocr.Users.Host.dll"] ENTRYPOINT ["dotnet", "Nocr.Users.Host.dll"]

View File

@ -1,12 +1,10 @@
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
WORKDIR /app WORKDIR /app
RUN apt-get update && apt-get install -y ca-certificates && update-ca-certificates
RUN apt-get install -y curl && rm -rf /var/lib/apt/lists/*
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src WORKDIR /src
# Install and update CA certificates FIRST before any network operations # Install CA certificates for custom NuGet source
RUN apt-get update && \ RUN apt-get update && \
apt-get install -y --no-install-recommends ca-certificates && \ apt-get install -y --no-install-recommends ca-certificates && \
update-ca-certificates && \ update-ca-certificates && \
@ -14,33 +12,31 @@ RUN apt-get update && \
COPY . . COPY . .
# Create global NuGet.Config with package source mapping # Create NuGet.Config using cat with heredoc
RUN mkdir -p /root/.nuget/NuGet && \ RUN mkdir -p /root/.nuget/NuGet && \
echo '<?xml version="1.0" encoding="utf-8"?>' > /root/.nuget/NuGet/NuGet.Config && \ cat > /root/.nuget/NuGet/NuGet.Config <<'EOF'
echo '<configuration>' >> /root/.nuget/NuGet/NuGet.Config && \ <?xml version="1.0" encoding="utf-8"?>
echo ' <packageSources>' >> /root/.nuget/NuGet/NuGet.Config && \ <configuration>
echo ' <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />' >> /root/.nuget/NuGet/NuGet.Config && \ <packageSources>
echo ' <add key="musk.fun.nocr" value="https://gitea.musk.fun/api/packages/nocr/nuget/index.json" />' >> /root/.nuget/NuGet/NuGet.Config && \ <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
echo ' </packageSources>' >> /root/.nuget/NuGet/NuGet.Config && \ <add key="musk.fun.nocr" value="https://gitea.musk.fun/api/packages/nocr/nuget/index.json" />
echo ' <packageSourceMapping>' >> /root/.nuget/NuGet/NuGet.Config && \ </packageSources>
echo ' <packageSource key="musk.fun.nocr">' >> /root/.nuget/NuGet/NuGet.Config && \ <packageSourceMapping>
echo ' <package pattern="Nocr.*" />' >> /root/.nuget/NuGet/NuGet.Config && \ <packageSource key="musk.fun.nocr">
echo ' </packageSource>' >> /root/.nuget/NuGet/NuGet.Config && \ <package pattern="Nocr.*" />
echo ' <packageSource key="nuget.org">' >> /root/.nuget/NuGet/NuGet.Config && \ </packageSource>
echo ' <package pattern="*" />' >> /root/.nuget/NuGet/NuGet.Config && \ <packageSource key="nuget.org">
echo ' </packageSource>' >> /root/.nuget/NuGet/NuGet.Config && \ <package pattern="*" />
echo ' </packageSourceMapping>' >> /root/.nuget/NuGet/NuGet.Config && \ </packageSource>
echo '</configuration>' >> /root/.nuget/NuGet/NuGet.Config </packageSourceMapping>
</configuration>
EOF
# Restore with verbose logging # Publish directly (restore + build + publish in one step)
RUN dotnet restore "src/Nocr.Users.Migrator/Nocr.Users.Migrator.csproj" --verbosity normal
WORKDIR "/src/src/Nocr.Users.Migrator" WORKDIR "/src/src/Nocr.Users.Migrator"
RUN dotnet build "Nocr.Users.Migrator.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Nocr.Users.Migrator.csproj" -c Release -o /app/publish RUN dotnet publish "Nocr.Users.Migrator.csproj" -c Release -o /app/publish
FROM base AS final FROM base AS final
WORKDIR /app WORKDIR /app
COPY --from=publish /app/publish . COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "Nocr.Users.Migrator.dll"] ENTRYPOINT ["dotnet", "Nocr.Users.Migrator.dll"]