Dive
dive能够分析docker镜像分层内容以及发现缩小docker/OCI镜像大小的方法。
-
提高部署效率:能够秒级快速启动一个应用,而传统的方式分钟级别以上;
-
提高运行效率:相对物理机和虚拟化,容器具有更高的资源利用率;
-
提高可移植性:容器部署能够极大的屏蔽资源环境的差异化,可快速迁移;
-
降低管理成本:通过容器编排工具,进一步的管理容器,可以降低管理成本。(Kubernetes能带来更高管理便捷,但是也相应带来了很高的学习和维护成本)
项目地址
https://github.com/wagoodman/dive
功能特性
-
按层细分展示 docker 镜像内容
当选择左侧的图层时,右侧将显示该图层的内容以及所有先前图层的内容。此外,还可以使用箭头键全面浏览文件树。
-
详细展示 docker 镜像每一层的变化
已更改、修改、添加或删除的文件会在文件树中展示。可以对其进行调整以显示特定层的更改,或直至该层的最后更改。
-
估算镜像冗余度
左下窗格显示基本镜像图层信息和指标,该指标预估镜像包含浪费了多少空间。这可能是由于跨层复制文件、跨层移动文件或未完全删除文件造成的冗余。提供每一层浪费空间的百分比和总浪费文件空间。
-
在构建时快速分析
可以构建docker镜像时使用命令立即进行分析,只需要将docker build命令替换为相同的dive build 命令即可。
dive build -t some-tag .
-
持续集成集成
当使用设置环境变量CI=true时,dive UI 将被绕过,直接分析docker镜像,通过返回代码提示是通过/失败。目前,.dive-ci 可以将文件放在存储库的根目录中,或者可以使用选项覆盖 CI 配置路径--ci-config。目前支持三个指标:
rules:
# If the efficiency is measured below X%, mark as failed.
# Expressed as a ratio between 0-1.
lowestEfficiency: 0.95
# If the amount of wasted space is at least X or larger than X, mark as failed.
# Expressed in B, KB, MB, and GB.
highestWastedBytes: 20MB
# If the amount of wasted space makes up for X% or more of the image, mark as failed.
# Note: the base image layer is NOT included in the total image size.
# Expressed as a ratio between 0-1; fails if the threshold is met or crossed.
highestUserWastedPercent: 0.20
-
支持多种镜像源和容器引擎
使用--source选项,可以选择获取容器镜像:
dive <your-image> --source <source>
或者
dive <source>://<your-image>
其中source选项支持以下几种:
-
docker:docker引擎(默认选项)
-
docker-archive:磁盘上的 docker tar 包
-
podman:Podman 引擎(目前仅支持 Linux)
部署安装
dive提供了多种操作系统部署包,可以直接运行命令进行快速安装。
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
使用 snap:
sudo snap install docker
sudo snap install dive
sudo snap connect dive:docker-executables docker:docker-executables
sudo snap connect dive:docker-daemon docker:docker-daemon
RHEL/Centos
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
Mac
如果使用的是 Homebrew:
brew install dive
如果使用的是MacPorts:
sudo port install dive
Grype
grype支持通过一条命令针对容器镜像和文件系统进行漏洞扫描。
功能特性
支持以下主要操作系统软件包的漏洞:
-
Alpine
-
Amazon Linux
-
BusyBox
-
CentOS
-
CBL-Mariner
-
Debian
-
Distroless
-
Oracle Linux
-
Red Hat (RHEL)
-
Ubuntu
-
支持以下语言包漏洞:
-
Ruby (Gems)
-
Java (JAR, WAR, EAR, JPI, HPI)
-
JavaScript (NPM, Yarn)
-
Python (Egg, Wheel, Poetry, requirements.txt/setup.py files)
-
Dotnet (deps.json)
-
Golang (go.mod)
-
PHP (Composer)
-
Rust (Cargo)
-
-
支持 Docker、OCI 和Singularity镜像格式。
-
支持通过OpenVEX过滤和增强扫描结果。
快速安装
在下载界面,按照操作系统类型下载对应安装包:
https://github.com/anchore/grype/releases
以 Linux X86 系统为例
wget https://github.com/anchore/grype/releases/download/v0.74.7/grype_0.74.7_linux_amd64.rpm
rpm -ivh grype_0.74.7_linux_amd64.rpm
#出现以下信息,表名安装成功
[root@localhost ~]# rpm -ivh grype_0.74.7_linux_amd64.rpm
Verifying... ################################# [100%]
Preparing... ################################# [100%]
package grype-0:0.74.7-1.x86_64 is already installed
快速扫描镜像
grype <image>
全面扫描镜像
grype <image> --scope all-layers
扫描运行中的容器
docker run --rm \
--volume /var/run/docker.sock:/var/run/docker.sock \
--name Grype anchore/grype:latest \
$(ImageName):$(ImageTag)
扫描其他源的镜像
# scan a container image archive (from the result of `docker image save ...`, `podman save ...`, or `skopeo copy` commands)
grype path/to/image.tar
# scan a Singularity Image Format (SIF) container
grype path/to/image.sif
# scan a directory
grype dir:path/to/dir
结果格式
grype 扫描结果的输出格式也是可配置的:
grype <image> -o <format>
支持以下几种数据格式:
-
table:表格(默认);
-
cyclonedx:符合CycloneDX 1.4 规范的 XML 报告;
-
cyclonedx-json:符合CycloneDX 1.4规范的JSON报告;
-
json:默认JSON格式报告,具有更多的信息;
-
template:按照用户指定的模板输出格式。
最后
grype还支持其他功能,比如遇到严重漏洞自动退出通知、忽略已知漏洞、VEX支持等等。