下面是默认的 docker 文件
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app #<------------------------------------------
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["ExampleApp.csproj", "."]
RUN dotnet restore "./ExampleApp.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "./ExampleApp.csproj" -c $BUILD_CONFIGURATION -o /app/build # <----the build folder is not being used?
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./ExampleApp.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app # <------------------------------duplicated instruction?
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ExampleApp.dll"]
那
WORKDIR /app
不是重复指令吗?我们可以在最后阶段删除WORKDIR /app
吗?与/app/build
中的“build”文件夹相同,“build”文件夹没有被使用,那么为什么它在那里?
我也不明白为什么我们一开始就需要基础阶段,我们可以删除第一个基础阶段然后做吗:
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["ExampleApp.csproj", "."]
RUN dotnet restore "./ExampleApp.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "./ExampleApp.csproj" -c $BUILD_CONFIGURATION -o /app/build
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./ExampleApp.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=publish /app/publish .
EXPOSE 80
ENTRYPOINT ["dotnet", "ExampleApp.dll"]
基础阶段支持 VS 中的“快速模式”调试。该阶段不是“需要”的,但如果您在 VS 中进行调试并且希望该过程更快,则该阶段很有用。如果您确实删除了基本状态,您应该通过将其添加到项目文件中来关闭快速模式调试:
<PropertyGroup>
<ContainerDevelopmentMode>Regular</ContainerDevelopmentMode>
</PropertyGroup>