我有一个大文件夹(2GB),其中包含我将在Docker镜像内编译的源代码。编译后的程序要小得多(大约120MB),因为我想保持我的图像小,我试图阻止明显运行COPY
命令,因为它会创建一个新层。但是,似乎并不是一种同时拥有COPY
+ RUN
命令的方法。
有没有办法将COPY
内容添加到Docker镜像中,然后将其从历史记录中删除或阻止它创建图层?
答案 0 :(得分:1)
遗憾的是,这不包含在Dockerfile语法中(我自己喜欢这个功能)。有两种解决方法:
将文件托管在某处,并使用wget命令将其拉为RUN
行的一部分。这是丑陋的,不能让其他人建立你的形象。
使用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 .