记录 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 进行呈现了
输了你,赢了世界又如何...
分类:
Docker
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!