docker image分析利器之dive

2024-05-28 11:52
文章标签 分析 docker image 利器 dive

本文主要是介绍docker image分析利器之dive,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

dive是一个用于研究 Docker 镜像、层内容以及发现缩小 Docker/OCI 镜像大小方法的开源工具.

开源地址: dive github

为了有个直观的印象, 可以先看一下repo文档中的gif图:

在这里插入图片描述

安装

在Ubuntu/Debian系统下,可以使用deb包安装:

DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -OL https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.deb
sudo apt install ./dive_${DIVE_VERSION}_linux_amd64.deb

可能会遇到下载的问题,可以在repo的release中,找到适合当前os及arch的安装包,然后执行 sudo apt install.

其他系统的安装请参照仓库文档.

docker image方式

dive提供了docker镜像, 如果不想安装在本地,可以用docker的方式运行.

首先下载镜像:

docker pull wagoodman/dive

或者自行build,从官方repo clone代码到本地后,执行build命令:

docker build -t "your-image-tag" .

然后执行:

docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive <your-docker-image-tag>

注意这里的-v /var/run/docker.sock:/var/run/docker.sock是必须的.

或者为了方便,也可以创建一个alias:

alias dive="docker run -ti --rm  -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive"

运行镜像分析

我们用如下命令来分析一个镜像:

dive nginx:latest

在这里插入图片描述

可以得到如上图所示的输出.通过上下健移动,可以看到不同layer的信息,包括执行的command, 当前layer的文件系统信息, 文件的变化等…

官方文档中给出的功能列表包括:

显示 Docker 镜像分层内容

当您在左侧选择一个层时,您将在右侧看到该层及其之前所有层的内容。您还可以使用箭头键完全浏览文件树。

指示每个层中的变更

文件树中会标出哪些文件发生了变更、修改、添加或删除。这可以调整为显示特定层的变更,或累积到该层的变更。

估算"镜像效率"

左下窗格显示基本层信息和一个实验性指标,用于猜测您的镜像中包含多少浪费的空间。这可能是由于在层之间重复文件、移动文件或未完全删除文件造成的。它提供了百分比"得分"和总的浪费文件空间。

小结

dive是一个非常有用的小工具,可以帮助我们很直观的分析镜像,尤其是可以看到镜像中文件系统的变化; 另外镜像效率这个功能也很有用, 可以用于image的大小优化. 在打包一些LLM模型镜像时,由于大量的python三方包和推理加速中间件的安装,很容易造成镜像变得巨大无比,对镜像尺寸压缩优化就变得重要起来. 后续会继续分享如何优化docker image的大小,欢迎交流.

这篇关于docker image分析利器之dive的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010494

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

docker 重命名镜像的实现方法

《docker重命名镜像的实现方法》在Docker中无法直接重命名镜像,但可通过添加新标签、删除旧镜像后重新拉取/构建,或在DockerCompose中修改配置文件实现名称变更,感兴趣的可以了解一下... 目录使用标签(Tagging)删除旧的php镜像并重新拉取或构建使用docker Compose在Do

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red