记录 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 进行呈现了

posted @   不是豆豆  阅读(95)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
友情链接:迷途


点击右上角即可分享
微信分享提示