Dockerfile构建从最终映像中删除源代码

舒巴姆帕吉

我是Docker的新手。我想通过使用make命令构建c ++库来构建docker映像。我在Dockerfile中执行此操作的方式是

  • 从主机复制源代码
  • 安装所需的软件包
  • 运行make
  • 将库(.so)复制到映像内的其他文件夹中
  • 删除源代码

Dockerfile代码如下所示。

我面临的问题是,即使删除了源代码,最终的图像大小仍然很大。

由于Dockerfile的每一行都创建一个不同的层,因此有一种方法可以使用curl或wget下载源代码,然后再在同一层中删除源代码。但是我不喜欢这个解决方案。

FROM alpine

RUN apk update && apk add <required_packages>

COPY source_code /tmp/source_code

RUN make -C /tmp/source_code && \
        mkdir /libraries/
        cp /tmp/lib/* /libraries/
        rm -rf /tmp/*

我只想最小化最终图像大小。是我这样做的正确方法,还是有更好的方法?请帮忙。

编码站

您可以进行多阶段构建,然后将工件复制到前一张图像上的新图像上。还安装所有必需的运行时依赖项(如果有)。

FROM alpine AS builder

RUN apk add --no-cache <build_dependencies>

COPY source_code /tmp/source_code

RUN make -C /tmp/source_code && \
        mkdir /libraries/
        cp /tmp/lib/* /libraries/
        rm -rf /tmp/*

FROM alpine

RUN apk add --no-cache <runtime_dependencies>

COPY --from=builder /libraries/ /libraries/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章