1
Orenoid 10 小时 47 分钟前
大概率是因为删除构建工具和临时文件这一层,这样是无效的,它只是在这一层把文件标记为删除,要真正删除必须在同一层用 && 执行
|
2
nagisaushio 10 小时 40 分钟前 via Android
建议二阶段构建,只拷贝编译完的东西过来
|
3
sagaxu 10 小时 33 分钟前
docker 的存储是分层的,你每一个 RUN 之后的文件系统都会保留快照,即使最后一个 RUN 是 rm -fr /,中间每一层也都会存储下来占用空间。
1. 最快的解决方法是把 RUN 全部合并到一个,用&&连接起来。除此之外,以前可以 squash 后来废弃了,现在一般用 multi-stage ,把最终系统复制到一个干净的基准线,中间的 history 就丢弃了,有点儿像 git merge --squash 。 2. 如果不怕踩坑,也可以试试 podman ,它提供--squash-all 选项构建干净系统。 3. 最后可以试试 docker export 导出合并后的文件系统,基于这个再重新构建,设置好环境变量。 |
4
ETiV 10 小时 18 分钟前 via iPhone
你要想镜像小就 multi-stage ,在最后一步把需要的东西 copy 出来,中间有多个 RUN 也无妨,还会最大化利用到缓存
不过纯静态 build 一个可执行程序的话,我一般都单独用它,不会再给它放进 docker image 里… |
5
Ipsum 10 小时 1 分钟前
兄弟,你把编译环境一起打包了?应该编译和 bin 分开,编译好了直接 copy 到运行环境中
|
6
Tiller 9 小时 5 分钟前
你运行之后,进去看一下哪些文件比较大就知道了。
我之前试过一个镜像 1g 多。我都震惊了 慢慢排查,发现怎么随着版本更新,越来越大了呢? 从半年前的 200m 渐渐变成 1g 多。 我对前端的打包流程也不懂,就请教了大佬。他们最后发现,CI/CD 流程出问题了。。。每次打包的临时文件全都放进去了。 最后每次构建之前删掉临时文件就恢复正常了。 |
7
povsister 8 小时 48 分钟前
不用 multi stage 就是一个 run 一层,你数一下你有多少个 run 吧
|
8
wnpllrzodiac 7 小时 48 分钟前 via Android
apt 缓存清一下。分 stage,build 后把二进制拷贝到发布 image 最干净
|