Docker 镜像分析之 dive

dive 简介

diev:用于探索 docker 镜像层内容以及发现减小 docker 镜像大小的方法工具。

docker 命令分析镜像

  • docker inspect 查看镜像的 Metadata 信息,例如:

    $ docker inspect node:alpine
    
    "RootFS": {
        "Type": "layers",
        "Layers": [
            "sha256:77cae8ab23bf486355d1b3191259705374f4a11d483b24964d2f729dd8c076a0",
            "sha256:4322be3f308a4efbda17d7a42ab6e48f96cfbbf5e5b2d19b4208fc9d2690efa2",
            "sha256:15b7d94033f50c7416a9b85101bc0deced5b55bfa0e34b60a605bf7d5d95d602",
            "sha256:20d6ac69de87335a4bde7e05a80703347b5c902c40a9b92f40cdb37cf048f4d7"
        ]
    },
    "Metadata": {
        "LastTagTime": "0001-01-01T00:00:00Z"
    }
    
  • docker history 查看镜像构建层命令

    # 可以通过添加 --no-trunc 参数显示每层详细构建命令
    $ docker history node:alpine
    
    IMAGE               CREATED             CREATED BY                                      SIZE                  COMMENT
    fac3d6a8e034        8 days ago          /bin/sh -c #(nop)  CMD ["node"]                 0B
    <missing>           8 days ago          /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B
    <missing>           8 days ago          /bin/sh -c #(nop) COPY file:238737301d473041…   116B
    <missing>           8 days ago          /bin/sh -c apk add --no-cache --virtual .bui…   5.35MB
    <missing>           8 days ago          /bin/sh -c #(nop)  ENV YARN_VERSION=1.19.1      0B
    <missing>           8 days ago          /bin/sh -c addgroup -g 1000 node     && addu…   95MB
    <missing>           8 days ago          /bin/sh -c #(nop)  ENV NODE_VERSION=13.2.0      0B
    <missing>           6 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B
    <missing>           6 weeks ago         /bin/sh -c #(nop) ADD file:fe1f09249227e2da2…   5.55MB
    
  • 虽然docker提供 docker inspectdocker history 两个命令查询镜像构建历史信息,但是这些信息对我们去分析一个镜像的具体每一层的组成来说还是不太够,不够清晰明了。下面通过 dive 工具来分析详细的每层信息。

dive 结果展示

dive 基本功能

  • 按层显示Docker镜像内容:在左侧选择一个图层时,将显示该图层的内容以及右侧的所有先前图层。此外,您还可以使用箭头键全面浏览文件树。

  • 指出每一层的变化:文件树中指示已更改,修改,添加或删除的文件。可以对其进行调整以显示特定层的更改,或显示直到该层的汇总更改

  • 估计“图像效率”:左下方的窗格显示基本图层信息和实验指标,该指标将猜测图像所包含的浪费空间。这可能是由于跨层复制文件,跨层移动文件或没有完全删除文件。提供百分比“得分”和总浪费文件空间。

  • 快速的构建/分析周期:您可以构建一个Docker镜像并使用以下命令立即进行分析:dive build -t some-tag .。您只需要用docker build 相同的 dive build 命令替换命令即可。

支持多个镜像源和容器引擎

使用该 --source 选项,您可以选择从何处获取容器图像:

dive <your-image> --source <source>

or

dive <source>://<your-image>

source 选项支持:

  • docker:Docker引擎(默认选项)
  • docker-archive:来自磁盘的 Docker Tar 存档
  • podman:Podman引擎(仅Linux)

安装

Ubuntu/Debian

$ wget https://github.com/wagoodman/dive/releases/download/v0.9.1/dive_0.9.1_linux_amd64.deb
$ sudo apt install ./dive_0.9.1_linux_amd64.deb

RHEL/Centos

$ curl -OL https://github.com/wagoodman/dive/releases/download/v0.9.1/dive_0.9.1_linux_amd64.rpm
$ sudo rpm -i dive_0.9.1_linux_amd64.rpm

Mac

$ brew install dive

Docker 运行

# 使用该镜像运行一个临时的容器,加上我们需要分析的镜像
$ docker run --rm -it \
    -v /var/run/docker.sock:/var/run/docker.sock \
    wagoodman/dive:latest <dive arguments...>

按键绑定

按键绑定描述
Ctrl + C退出
Tab在层和文件树视图之间切换
Ctrl + F筛选
PageUp向上滚动页面
PageDown向下滚动页面
Ctrl + A镜像视图:查看聚合图像修改
Ctrl + L镜像视图:查看当前图层修改
Space文件树视图:折叠/取消折叠目录
Ctrl + Space文件树视图:折叠/展开所有目录
Ctrl + A文件树视图:显示/隐藏添加的文件
Ctrl + R文件树视图:显示/隐藏已删除的文件
Ctrl + M文件树视图:显示/隐藏修改的文件
Ctrl + U文件树视图:显示/隐藏未修改的文件
Ctrl + B文件树视图:显示/隐藏文件属性
PageUpFiletree视图:向上滚动页面
PageDownFiletree视图:向下滚动页面

项目地址

  • https://github.com/wagoodman/dive

参考链接

  • https://github.com/wagoodman/dive/blob/master/README.md

您的关注是小站的动力


欢迎大家关注交流,定期分享自动化运维、DevOps、Kubernetes、Service Mesh和Cloud Native

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker 镜像的大小对于部署和传输来说都是非常重要的。较小的镜像可以更快地传输和部署,因此减小 Docker 镜像的大小是非常有必要的。以下是一些减小 Docker 镜像大小的方法: 1.使用多阶段构建:多阶段构建是一种将多个 Dockerfile 指令组合在一起的方法,以便在单个 Dockerfile 中构建多个镜像层。这可以减少镜像的大小,因为每个阶段只包含构建所需的文件和依赖项。 2.使用 .dockerignore 文件:.dockerignore 文件类似于 .gitignore 文件,可以指定哪些文件和目录不应包含在构建上下文中。这可以减少构建上下文的大小,从而减小镜像的大小。 3.精简镜像:在构建镜像时,只包含应用程序所需的文件和依赖项。例如,使用 Alpine Linux 作为基础镜像可以减小镜像的大小,因为 Alpine Linux 是一个非常小的 Linux 发行版。 4.删除不需要的文件和依赖项:在构建镜像时,确保删除不需要的文件和依赖项。例如,在安装软件包后,运行 apt-get clean 命令可以删除不需要的软件包和缓存文件。 5.压缩镜像:使用 Docker 的内置压缩功能可以减小镜像的大小。例如,使用 docker save 命令将镜像保存为 tar 文件时,可以使用 -gzip 选项启用压缩。 6.使用 Docker 镜像优化工具:如引用所述,有许多 Docker 镜像优化工具可以帮助你减小 Docker 镜像的大小,例如 Dive。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值