记录 docker 中通过 dockerfile 制作镜像的一个坑
有时候感觉通过 dockerfile 制作出来的镜像大小有点超出预期
仔细研究发现,应该是在制作过程中,通过 ADD 或 COPY 命令加入了临时文件
但是因为镜像分层的特性,即便在后续命令删除这些文件,只是会在后续命令层中删除
在前一层中这些文件依然存在,也就导致最终镜像体积仍然是包含了这些临时文件
目前似乎没有什么特别好的解决方法,在这个问题下,基本上讨论了所有可能的解决方法:
https://github.com/moby/moby/issues/12169
https://stackoverflow.com/questions/26306059/docker-in-dockerfile-copy-files-temporarily-but-not-for-final-image
下面大概列下目前我觉得比较方便的两种方法:
方法1:临时文件通过链接下载到容器内,不使用 ADD 或 COPY 命令
然后使用 RUN 命令执行组合:下载&操作&清理,这样就不会产生一个带临时文件的镜像层了
如:
RUN curl http://foo.com/package.tar.bz2 \ | tar -xjC /tmp/package \ && make -C /tmp/package
参考:https://www.ctl.io/developers/blog/post/dockerfile-add-vs-copy/
方法2:临时文件在容器外处理好后,再通过 ADD 或 COPY 命令将文件放置在镜像中
这样等于就不在容器中产生临时文件,但是缺点就是整个处理过程不能通过 dockerfile 进行呈现了
输了你,赢了世界又如何...

浙公网安备 33010602011771号