为什么我们需要基础阶段来在 Dockerfile 中容器化 ASP.NET 应用程序

问题描述 投票:0回答:1

下面是默认的 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"]
.net docker dockerfile
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.