Dive 的主要功能:
- 分层分析:查看 Docker 镜像的每一层,了解每层的文件及其占用的空间。
- 空间利用率:计算镜像中有效空间的占比,给出效率评分。
- 浪费空间检测:识别重复文件、未使用的依赖或冗余数据。
- 手动优化建议:根据分析结果手动调整
Dockerfile
以优化镜像大小。
在RHEL/Centos系统上安装dive:
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.rpm
rpm -i dive_${DIVE_VERSION}_linux_amd64.rpm
检查dive版本号:
dive --version
通过以下命令来分析 Docker 镜像:
dive nginx:latest
或者通过Docker安装dive:
拉取镜像:
docker pull wagoodman/dive:latest
通过以下命令来分析 Docker 镜像:
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
wagoodman/dive:latest <image_name>
解释:
-v /var/run/docker.sock:/var/run/docker.sock
:这是为了让Dive
能够访问 Docker 守护进程,来读取和分析本地的 Docker 镜像。--rm
:在容器退出后自动删除容器。-it
:使容器运行在交互模式下,允许你与 Dive 进行交互。
Dive的使用 :
启动 dive
后,分为两部分:
-
左侧(层结构):展示 Docker 镜像的每一层,显示每一层的命令(如
COPY
、RUN
)和镜像层的大小。可以通过上下箭头在不同层之间切换。 -
右侧(文件系统内容):展示每一层中具体添加、修改或删除的文件和目录。你可以看到镜像每一层对文件系统的影响,以及文件变化和大小。
-
Layer Details:介绍了这一层的命令
-
Images Details:介绍镜像的名字、占用空间、镜像中未使用的文件和重复使用文件的大小、镜像使用效率(未使用的文件和重复使用文件的大小/镜像占用总空间)
快捷键:
Tab:左右切换视图
Ctrl+F:搜索指定文件
Ctrl+L:仅显示当前选中层的文件变更(新增、修改、删除)。
- 绿色:文件是新增的。
- 橙色:文件是被修改的。
Ctrl+A:显示所有层的聚合变化,展示镜像最终的文件系统状态。
右侧视图中的快捷键:
Space:折叠当前选中的目录,隐藏其下的文件和子目录,便于查看文件结构。
Ctrl+O:切换文件和目录的排序顺序。你可以在升序和降序之间切换
Ctrl+A:仅显示当前层中新增的文件。
Ctrl+R:仅显示当前层中被删除的文件。
Ctrl+M :仅显示当前层中被修改的文件。
Ctrl+U:仅显示当前层中未修改的文件。
Ctrl+B:显示文件和目录的属性(如文件权限、大小等)。
Ctrl+P:切换是否启用行换行显示(长文件名是否折行)。