Dockerfile中build-env是什么?COPY . ./指令有什么作用?
Dockerfile 相关问题解答
关于build-env的含义
build-env是示例Dockerfile中定义的多阶段构建第一阶段的别名,定义位置在文件首行:
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env
这行里的AS build-env语法就是给当前基于.NET 6 SDK的构建阶段命名,和容器内的文件路径没有任何关系,你最开始误以为指代/build-env路径的理解是不对的。
Docker多阶段构建的逻辑是:可以在一个Dockerfile里定义多个互相独立的构建阶段,后续阶段可以通过--from=阶段名的语法,直接引用前面阶段生成的文件,不会把前面阶段用到的SDK、构建缓存、源码这类运行时不需要的冗余内容打包进最终镜像,能大幅缩小最终镜像的体积。
你对复制路径的推测是正确的:COPY --from=build-env /app/out .这行的目标路径.,指代当前阶段通过WORKDIR /app设置的工作目录,也就是容器内的/app路径。整行指令的作用是:把前一个build-env阶段里,执行dotnet publish生成的、存放在/app/out下的所有发布产物,复制到最终运行镜像的/app目录下。教程里提到的“发布文件夹”是对这个out目录的功能指代,不是指目录名是publish。
关于COPY . ./指令的作用
这行指令在第一个构建阶段内执行,作用是把本地宿主机上、Dockerfile所在目录下的所有项目文件(包括源码、.csproj项目配置文件等),复制到当前构建阶段容器的工作目录下(也就是这个阶段通过WORKDIR /app定义的容器内/app路径)。只有完成这步复制,后续的dotnet restore还原依赖、dotnet publish发布项目的命令才能正常在容器内执行。
内容的提问来源于stack exchange,提问作者Alexander Pope
相关产品推荐
相关产品推荐

