dockerfile 中的 AS 基础和 AS 构建有什么区别?

Fré*_*ect 5 image docker dockerfile

我想知道的区别FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-stretch-slim AS baseFROM mcr.microsoft.com/dotnet/core/sdk:2.1-stretch AS build。你能解释一下之间的区别AS baseAS build

这是dockerfileVisual Studio 生成的默认值:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-stretch-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:2.1-stretch AS build
WORKDIR /src
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
WORKDIR "/src/WebApplication1"
RUN dotnet build "WebApplication1.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]
Run Code Online (Sandbox Code Playgroud)

mic*_*sna 7

没有功能差异,它只是构建阶段的名称。在 dockerfile 的这个阶段构建的图像(阶段以FROM关键字开头并在下一个之前结束FROM)将在以后使用该名称访问。

可以选择通过将 AS 名称添加到 FROM 指令来为新构建阶段指定名称。该名称可用于后续的 FROM 和 COPY --from=<name|index> 指令以引用在此阶段构建的映像。

例如,姓名foobar

FROM image AS foo
...
...

FROM foo AS bar
...
...

FROM foo
COPY --from=bar
Run Code Online (Sandbox Code Playgroud)

它是在 17.05 中添加的,用于多阶段构建,更多相关信息:https : //docs.docker.com/develop/develop-images/multistage-build/