Dockerfile 中的 `AS base` 和 `AS build` 有什么区别?

10
我想了解以下两者之间的区别:
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-stretch-slim AS base

并且

FROM mcr.microsoft.com/dotnet/core/sdk:2.1-stretch AS build

你能解释一下AS baseAS build之间的区别吗?

以下是Visual Studio生成的默认Dockerfile:

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"]
1个回答

13
这只是构建阶段的名称,没有功能上的区别。阶段是从dockerfile中的FROM关键字开始,并在下一个FROM关键字之前结束的一部分。
在dockerfile的此阶段构建的镜像将以该名称后续访问。
例如,名称为foobar
FROM image AS foo
...
...

FROM foo AS bar
RUN touch /example
...
...

FROM foo
COPY --from=bar /example /var/example

通过在FROM指令中添加AS name,可以为新的构建阶段命名。该名称可用于随后的FROM和COPY --from=<name|index>指令,以引用在此阶段构建的镜像。

17.05版本新增了多阶段构建功能,更多信息请参见:https://docs.docker.com/develop/develop-images/multistage-build/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接