代码之家  ›  专栏  ›  技术社区  ›  Parzh from Ukraine

在Dockerfile中,如果阶段“b”被定义为“from a as b”,我是否必须将文件从阶段“a”复制到阶段“b”?

  •  0
  • Parzh from Ukraine  · 技术社区  · 3 年前

    我使用带有stage的多stage Dockerfile build 和 start ,如:

    FROM <whatever> as build
    
    WORKDIR /app
    
    COPY ./a.file ./
    COPY ./b.file ./
    
    RUN <build command>
    
    FROM build as start
    
    WORKDIR /app
    
    COPY --from=build /app/a.file ./
    COPY --from=build /app/b.file ./
    
    CMD <start command>
    

    我想知道,在 开始 舞台上,我必须做什么 COPY --from=build <...files> 再一次

    换句话说 开始 的重用文件系统 建筑 ?如果是,那么我不需要再次复制文件(因为 开始 已被复制到 建筑 )。这是正确的吗?

    1 回复  |  直到 3 年前
        1
  •  2
  •   Hans Kilian    3 年前

    不,你没有。在Dockerfile中 FROM 语句根本没有任何作用,因为 start 舞台从继续 build 阶段所以你可以去掉第二个 来自 声明和您的最终图像将与以前相同。

    人们使用多阶段Dockerfiles的原因通常是在第一阶段使用包含构建环境的映像来构建应用程序。然后,在构建完成后,启动一个新的运行时映像,并复制构建的应用程序。

    这样,您的最终图像就不包含完整的构建环境,而是创建了一个较小的最终图像。