Diving 优化容器镜像大小

新业务采用容器化部署已经是大家的常态,不管我们是 Docker 还是 K8s ,但容器镜像的大小也是一个要注意的点。这里我们将记录使用 Rust 版的 Diving 如何查看容器镜像的结构,为优化方向提供数据支撑。

在测试服务器上安装 Diving ,如果你使用国外镜像源,那记得用国外的服务器, hub.docker.com 很低概率可以正常访问。

1
2
3
$ curl -Ls https://github.com/vicanso/diving-rs/releases/download/v0.5.6/diving-linux-x86 -o /usr/local/bin/diving
$ chmod +x /usr/local/bin/diving
$ diving --mode web --listen 0.0.0.0:7001

通过浏览器访问 http://${IP}:7001 ,不使用命令行是为了方便查看镜像的结构。

这里以 ghcr.io/hongfs/env:wrk 为例,查看其镜像结构。

可以看见,镜像未解压是 366 MB ,解压后是 837 MB

我们可以切换层,设置筛选的文件大小,来看看哪里的文件比较大。

另外下滑你还可以看见 浪费的空间概要 修改或新增的大文件

目前我们汇总一下,一个是 /code/wrk/obj/openssl-1.1.1i/test 看起来是测试文件,居然 363 MB,另外是我们 git clone 时遗留的 .git 文件夹,这个对我们也没啥用。

我们试一下在 Dockerfile 里面删除这两个文件夹,看看镜像大小是否有变化。

等待镜像构建完成,我们重新点击页面上方的 开始分析 按钮,过一会就可以看见页面有变化了。

保险起见,我们在服务器验证镜像能不能正常运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ docker run --rm -it --pull always ghcr.io/hongfs/env:wrk -t1 -c1 -d10s https://www.hongfs.cn/
wrk: Pulling from hongfs/env
eef5fd0674ec: Already exists
b6bc4c79ec62: Downloading [==================================> ] 108.1MB/157.2MB
Running 10s test @ https://www.hongfs.cn/
1 threads and 1 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 7.09ms 19.46ms 198.10ms 96.91%
Req/Sec 247.01 51.53 272.00 93.59%
1931 requests in 10.01s, 35.44MB read
Socket errors: connect 0, read 0, write 0, timeout 1
Requests/sec: 192.94
Transfer/sec: 3.54MB

好了,是可以正常使用的,经过优化后,现在镜像的大小只有之前的一半。

往上