如何将大文件复制到Docker镜像而不保存历史记录

时间:2017-02-10 02:55:29

标签: docker

我有一个大文件夹(2GB),其中包含我将在Docker镜像内编译的源代码。编译后的程序要小得多(大约120MB),因为我想保持我的图像小,我试图阻止明显运行COPY命令,因为它会创建一个新层。但是,似乎并不是一种同时拥有COPY + RUN命令的方法。

有没有办法将COPY内容添加到Docker镜像中,然后将其从历史记录中删除或阻止它创建图层?

2 个答案:

答案 0 :(得分:1)

遗憾的是,这不包含在Dockerfile语法中(我自己喜欢这个功能)。有两种解决方法:

  1. 将文件托管在某处,并使用wget命令将其拉为RUN行的一部分。这是丑陋的,不能让其他人建立你的形象。

  2. 使用just released in 1.13.0的当前实验性docker build --squash选项。您需要在启用实验选项的情况下将dockerd更新为启动。

答案 1 :(得分:0)

如果您运行的是docker 17.05或更高版本,则还可以使用multi-stage builds。大致来说,您的Dockerfile可能类似于:

FROM build-dependencies as build
COPY src src
RUN src/build.sh

FROM run-dependencies
COPY --from=build src/build .
相关问题