Docker多阶段构建而没有从先前的映像复制吗?

时间:2019-10-05 18:53:07

标签: docker dockerfile

如果您不从先前构建的映像中复制任何文件,在Docker中使用多阶段构建是否有任何优势? 例如。

FROM some_base_image as base
#Some random commands
RUN mkdir /app
RUN mkdir /app2
RUN mkdir /app3
#ETC

#Second stage starts from first stage
FROM base

#Add some files to image
COPY  foo.txt /app

与非多阶段版本相比,这是否会产生较小的图像或提供其他优势?还是多阶段构建仅对准备一些文件然后将其复制到另一个基本映像有用?

1 个答案:

答案 0 :(得分:1)

  

或者多阶段构建仅对准备一些文件然后将其复制到另一个基本映像有用吗?

这是“ Df10”中讨论的主要用例

主要目标是通过将文件从一个映像复制到另一个映像来减少层数,而不包括生成所述文件所需的构建环境。

但是,另一个目标可能是重建整个Dockerfile,包括每个阶段。

那么您的建议(不复制)仍然适用。

  

您可以指定目标构建阶段。以下命令假定您正在使用以前的Dockerfile,但在名为builder的阶段停止:

$ docker build --target builder -t alexellis2/href-counter:latest .
     

一些可能非常强大的方案是:

     
      
  • 调试特定的构建阶段
  •   
  • 使用debug阶段并启用所有调试符号或工具,然后使用精益production阶段
  •   
  • 使用一个testing阶段,在该阶段中,您的应用将填充测试数据,但使用另一个使用真实数据的阶段为production进行构建
  •