为什么这个 ASP.NET Core Docker Image 包含这个“额外的”“FROM build AS publish”多阶段构建步骤?

时间:2021-05-05 15:01:54

标签: docker

我试图理解这个 Docker 文件中这一行的意义:

FROM build AS publish

如果我删除它,构建将失败并显示 => ERROR FROM docker.io/library/publish:latest,因此显然需要它,但我不明白为什么。

在我看来好像没有必要,因为 publish 是与 build 相同图像的别名。 WORKDIR 没有改变 - 那么这条线是什么,这是不可能的?抱歉,如果这不是一个明确的问题,其中一些概念对我来说是新的。

FROM mcr.microsoft.com/dotnet/aspnet:5.0.5-buster-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:5.0.202-buster-slim AS build
WORKDIR /src
COPY NuGet.Config /
COPY ["Something.Api.Common/Something.Api.Common.csproj", "Something.Api.Common/"]
COPY ["Something.Api.Core.WebApi/Something.Api.Core.WebApi.csproj", "Something.Api.Core.WebApi/"]
COPY ["Something.Api.Core.Domain/Something.Api.Core.Domain.csproj", "Something.Api.Core.Domain/"]
RUN dotnet restore "Something.Api.Core.WebApi/Something.Api.Core.WebApi.csproj"
COPY . .
WORKDIR "/src/Something.Api.Core.WebApi"
RUN dotnet build "Something.Api.Core.WebApi.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Something.Api.Core.WebApi.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

...

1 个答案:

答案 0 :(得分:0)

现在我自己回答这个问题。更改复制步骤允许我删除“额外”行。我不明白 --from 参数!

COPY --from=build /app/publish .
相关问题