图层视图是 Dive 用户界面的核心组件,它以结构化、交互式的方式显示 Docker/OCI 镜像的图层。它允许用户浏览、选择和分析容器镜像的每个图层,提供有关镜像构建方式的见解,并帮助识别优化机会。
有关显示图层内容的辅助文件树视图的信息,请参阅 文件树视图。
图层视图出现在 Dive 终端用户界面的左侧,并按从下到上的顺序显示容器镜像的每个图层,这与 Dockerfile 中图层的构建方式(从基础层到最终层)相对应。
来源: README.md55-57
图层视图可视化了 Layer 结构,该结构代表了一个 Docker 镜像图层,包含其元数据和关联的文件树。
图层视图中的每层显示两个主要信息
例如,一个图层可能显示为
1.2MB FROM ubuntu:20.04
图层视图以格式化字符串形式呈现每层的大小和命令。图层的完整 ID 通常会使用 ShortId() 方法缩短为前 15 个字符以供显示。
| 元素 | 描述 | 示例 |
|---|---|---|
| 大小 | 可读的图层大小 | 1.2MB |
| 命令 | Dockerfile 指令 | RUN apt-get update |
| 选择 | 高亮的活动图层 | ► 4.5MB RUN npm install |
第一个图层(索引 0)通常显示为“FROM”指令,显示基础镜像,而后续图层则显示其各自的命令。对于多行命令(如 heredocs),换行符会被替换为一个特殊字符 (↵),以确保图层在单行上显示。
来源: dive/image/layer.go37-52 dive/image/docker/layer.go17-30
图层数据通过不同容器引擎(Docker、Podman 等)的适配器从容器镜像中提取。例如,Docker 引擎适配器将原始 Docker 图层信息转换为 Dive 使用的通用 Layer 结构。
来源: dive/image/docker/layer.go10-30
用户可以使用键盘快捷键在图层视图中导航图层
| 按键绑定 | 描述 |
|---|---|
| 上/K | 向上移动一个图层 |
| 下/J | 向下移动一个图层 |
| Ctrl+A | 显示直到选定图层的汇总更改 |
| Ctrl+L | 仅显示选定图层中的更改 |
| Tab键 | 在图层视图和文件树视图之间切换焦点 |
当选择一个图层时,文件树视图(右侧窗格)将更新以显示
来源: README.md256-274
图层视图和文件树视图是紧密耦合的组件
FileTree 对象的引用,该对象代表了该图层的层次结构文件系统。来源: README.md55-60 dive/image/layer.go16-24
图层视图的行为可以通过 Dive 的配置文件进行自定义
此配置决定了默认视图模式 - 在选择图层时是仅显示图层特定的更改还是汇总的更改。
来源: README.md338-340
图层视图依赖于几个关键组件
图层模型:在 dive/image/layer.go 中定义了图层视图使用的 `Layer` 数据结构和字符串表示方法。
适配器模式:特定于容器引擎的适配器(如 Docker 适配器)将平台特定的图层信息转换为 Dive 的通用图层模型。
UI 控制器:管理用户交互、图层选择和视图更新。
图层结构体的 String() 方法尤为重要,因为它会格式化图层信息以供图层视图显示。
图层视图为探索容器镜像提供了关键的导航界面。它按顺序显示图层,允许用户选择图层进行详细检查,并控制如何在文件树视图中呈现更改。通过键盘快捷键和配置选项,用户可以自定义其分析体验,以更好地理解镜像构成并识别优化机会。