docker-image 工具展示更详细镜像层内容

docker-image

docker-image 工具主要功能实现了, 利用docker内容寻址机制详细展示了镜像层与镜像关联的关系。

github仓库:https://github.com/hltfaith/docker-image.git

docker-image命令下载:https://github.com/hltfaith/docker-image/releases/download/V1.0/docker-image-x86

技术栈

  • go 1.20
  • docker api

平台要求

  • 支持 Linux
  • 支持 Docker

功能

  1. 根据镜像名称:TAG, 显示实际镜像层内容
  2. 根据镜像名称:TAG, 找出镜像层信息, 包含镜像每层的位置 (docker history基础下扩展信息)
  3. 根据镜像层id, 找出所关联的镜像
  4. 根据指定文件, 找出对应镜像层信息、所关联的镜像
  5. 根据none标记的镜像, 显示当时层的镜像名称:TAG

功能1

  • 显示字段:rootfs层ID、ChainID(镜像层关系ID)、CacheID(镜像层实际存储ID)、层内容(目录及文件名称)、层大小(字节)
  • DIFF IDCHAIN IDCACHE IDCONTENTSIZE

使用说明:

alpine:3.8 镜像为例, 查看每层ID信息, 可以选择目标镜像id或者镜像名称+TAG作为参数, 使用 -i 参数传入。 -layer 参数代表查询镜像层信息的条件。

shell 复制代码
[root@k8s-host tech]# docker images | grep alpine
alpine                                                        3.8                  fa6812d57925   3 years ago     10.8MB
[root@k8s-host tech]# docker-image -layer -i fa6812d57925
DIFF ID        CHAIN ID       CACHE ID       CONTENT                                                                SIZE
7bff100f35cb   7bff100f35cb   7dc60c05f96f   bin dev etc home lib media mnt proc root run sbin srv sys tmp usr var  4413428
84a65a147d75   670cf5d7999b   816ac27b7bb2   etc                                                                    45
e5809cb1ff6c   63e66366a021   9631d08316ab   bin etc lib usr var                                                    8080438
4fa24654e62b   a48a619f208a   788061441f9a   etc                                                                    554
4d579754a235   b3f6367e3c5f   223ed5cf241d   etc                                                                    14
1a57f5c23770   41b37a437bbc   78abc1680b5b   lib64 root                                                             106
[root@k8s-host tech]# docker-image -layer -i alpine:3.8
DIFF ID        CHAIN ID       CACHE ID       CONTENT                                                                SIZE
7bff100f35cb   7bff100f35cb   7dc60c05f96f   bin dev etc home lib media mnt proc root run sbin srv sys tmp usr var  4413428
84a65a147d75   670cf5d7999b   816ac27b7bb2   etc                                                                    45
e5809cb1ff6c   63e66366a021   9631d08316ab   bin etc lib usr var                                                    8080438
4fa24654e62b   a48a619f208a   788061441f9a   etc                                                                    554
4d579754a235   b3f6367e3c5f   223ed5cf241d   etc                                                                    14
1a57f5c23770   41b37a437bbc   78abc1680b5b   lib64 root                                                             106

功能2

  • 显示字段:镜像ID、创建时间、层说明、创建内容、层大小、层存储位置
  • IMAGECREATEDLAYERCREATED BYSIZESTORAGE

使用说明

alpine:3.8 镜像为例, 查看每层ID信息, 可以选择目标镜像id或者镜像名称+TAG作为参数, 使用 -i 参数传入。 -history 参数代表查询镜像层信息的条件。

下列 LAYER 字段中, image layer表示该层是实际存在的镜像层, empty layer表示该层是空层, 其内容存在镜像元数据中。

shell 复制代码
[root@k8s-host tech]# docker-image -history -i alpine:3.8
IMAGE        CREATED        LAYER        CREATED BY                                                                                        SIZE       STORAGE
<missing>    5 years ago    image layer  /bin/sh -c #(nop) ADD file:2ff00caea4e83dfade726ca47e3c795a1e9acb8ac24e392785c474ecf9a621f2 in /  4.41MB     /var/lib/docker/overlay2/d4630e7c61b8798a5b43371782c5968710d8731162d3f656b5fba3dfb5b99382
<missing>    5 years ago    empty layer  /bin/sh -c #(nop)  CMD ["/bin/sh"]                                                                0B         
<missing>    5 years ago    empty layer  /bin/sh -c #(nop)  LABEL maintainer=john@johng.cn                                                 0B         
<missing>    5 years ago    image layer  /bin/sh -c echo http://mirrors.ustc.edu.cn/alpine/v3.8/main/ > /etc/apk/repositories              45B        /var/lib/docker/overlay2/833276a88d2af2da2f8e6518c6d116661b144527e06ea42f09ebb61086303bb9
<missing>    5 years ago    image layer  /bin/sh -c apk update && apk add tzdata ca-certificates bash                                      6.41MB     /var/lib/docker/overlay2/4bb5ce798ef15cb9f0e79a8973ac890445036922f55b513012121307b81c5760
<missing>    5 years ago    image layer  /bin/sh -c rm -rf /etc/localtime && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime           554B       /var/lib/docker/overlay2/0e77602ec4d48bec9fbf6868b720afd3cc7715419cfacde8d7a3ad56bb792c64
<missing>    5 years ago    image layer  /bin/sh -c echo "Asia/Shanghai" > /etc/timezone                                                   14B        /var/lib/docker/overlay2/d630e7639279cae771c911ede067536861540891745febda49adb3615aadb254
fa6812d57925 3 years ago    image layer  bash                                                                                              106B       /var/lib/docker/overlay2/7efbc30ca8e2de51deea072c01a912573ee840656e03e7d889436eddc37230f5

功能3

  • 显示字段:镜像名称、镜像TAG、镜像ID
  • REPOSITORYTAGIMAGE ID

使用说明

alpine:3.8 镜像为例, 可以选择目标镜像id或者镜像名称+TAG作为参数, 使用 -i 参数传入。 -relation 参数代表查询镜像层信息的条件。

比如 alpine:3.8 镜像中我想查找第一层 sha256:7bff100f35cb359a368537bb07829b055fe8e0b1cb01085a3a628ae9c187c7b8, 有多少镜像包含该层。(可通过下面方法查找)

如果不确定每层内容,则可以通过上述所说的命令 docker-image -layer -i alpine:3.8 将每层内容展示出来,然后选择要查询层精准查询。

shell 复制代码
[root@k8s-host tech]# docker inspect alpine:3.8 | grep -A 10 RootFS
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:7bff100f35cb359a368537bb07829b055fe8e0b1cb01085a3a628ae9c187c7b8",
                "sha256:84a65a147d7559334f795cf993c17adbb6badc3b76b4d1f0207284f10ade088b",
                "sha256:e5809cb1ff6c5910d7acfb7645a4e24f19c060837eda3917306ff9f13ce48b1f",
                "sha256:4fa24654e62b1d588f09250f9574c1abd08841a4b8adaadc81252bc24070e13c",
                "sha256:4d579754a235c7b7f381d5a4f80d7dbca80b814a055370aeeb4029387a0bb4f3",
                "sha256:1a57f5c23770f026edc5e442612b9375511303d20735c5f29a30432e2c894bdd"
            ]
        },
[root@k8s-host tech]# docker-image -relation -i sha256:7bff100f35cb359a368537bb07829b055fe8e0b1cb01085a3a628ae9c187c7b8
REPOSITORY     TAG    IMAGE ID
<none>         <none> 3966e280acf1
<none>         <none> 8e2d0ac4c24d
alpine         3.8    fa6812d57925
<none>         <none> 489904ae9181
<none>         <none> 12c0ef5087ab
<none>         <none> 4313dcfd1cc3
<none>         <none> 5825aec53c78
<none>         <none> 6f5718f73ddf
<none>         <none> 1c7eb887367c
<none>         <none> 65af335b0601
<none>         <none> 1470dce55da8
<none>         <none> cfe1a67058b2
<none>         <none> 1f4b5e0ee5da
<none>         <none> a0ce760ea9d2
<none>         <none> c205b68b6060
<none>         <none> fb45c9954572
<none>         <none> f6917a3a6176
<none>         <none> ac65580e3e32
<none>         <none> 84fc08c0690b

功能4

在实际排查问题时,列如想根据指定的文件或编译好的二进制文件,查找docker文件系统中是否有包含此文件的镜像,可以使用本方法查找。

  • 显示字段:镜像名称、镜像TAG、镜像ID、 文件绝对路径
  • REPOSITORYTAGIMAGE IDFILE PATH

使用说明

/root/kubeovn 文件为例。 -file 参数代表要查寻镜像文件的路径。

下列命令执行后,会显示包含 /root/kubeovn 文件的所有镜像列表。

shell 复制代码
[root@k8s-host tech]# docker-image -file /root/kubeovn
REPOSITORY       TAG      IMAGE ID     FILE PATH
kubeovn/kube-ovn <none>   56a8e33acc82 /var/lib/docker/overlay2/6112d663d1015139ac54efeab5e049c04176b6718261f709fea6d4ab7351c93e/diff/etc/logrotate.d/kubeovn
kubeovn/kube-ovn v1.11.13 178cdf5cbdea /var/lib/docker/overlay2/f2c33f01a98322a7b218173e241d7ef9d6abd324e19b37e85694e4464170c10f/diff/etc/logrotate.d/kubeovn

功能5

在实际排查问题时,环境中会存在很多none标记的镜像,docker镜像名称在变为none标记时,表示最新镜像层已被覆盖镜像TAG被重写。本工具会比较none镜像层数最贴近的 "镜像名称:TAG"

  • 显示字段:镜像名称、镜像TAG、镜像id、相同层数
  • REPOSITORY TAG IMAGE ID ROOTFS LAYERS

使用说明

首先可以先查询 none 标记的镜像,在根据其镜像ID,使用下列命令查找。 命令执行完成后会显示none标记在覆盖前的镜像:TAG名称, 以及相同的镜像层数。

shell 复制代码
[root@k8s-host tech]# docker images | grep none
<none>                                                                                  <none>              3966e280acf1   2 months ago    84.1MB
[root@k8s-host tech]# docker-image -none -i 3966e280acf1
REPOSITORY   TAG   IMAGE ID     ROOTFS LAYERS
win/sidecar  v1.0  61a92a0b7cb3 8

注:可以看到 ROOTFS LAYERS 字段相同层数为8层。

相关推荐
learning-striving2 小时前
华为云欧拉操作系统的服务器实例中手工部署 Docker
linux·运维·服务器·docker·容器·华为云
修己xj11 小时前
别再让Docker占满你的硬盘!一篇搞定docker system所有命令
docker
布吉岛的石头13 小时前
Docker Compose编排实战:多容器应用从开发到生产
运维·docker·容器
SPC的存折18 小时前
20、K8S-Pod驱逐
java·docker·kubernetes
皓月盈江21 小时前
Linux Ubuntu系统如何编辑Docker容器内的文件
linux·ubuntu·docker·容器·靶场·vulhub·编辑docker内文件
魔极客21 小时前
1panel面板安装ollama的详细过程
docker·1panel·ollama
椰汁菠萝1 天前
[特殊字符] Nginx UI:Docker 部署与完全使用指南
nginx·ui·docker
csdn小瓯1 天前
CI/CD流水线搭建:GitHub Actions + Docker + Railway自动化部署实战
ci/cd·docker·github
代码讲故事1 天前
mac电脑上docker突然无法运行,不停的出现弹框,“com.docker.vmnetd”将对你的电脑造成伤害。附国内不同芯片高速下载地址,下载直接运行。
macos·docker·容器·arm·mac·intel·下载
皓月盈江1 天前
Linux Ubuntu系统使用Docker搭建vulhub靶场环境
linux·ubuntu·docker·tomcat·vulhub·漏洞靶场