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
技术栈
平台要求
功能
- 根据镜像名称:TAG, 显示实际镜像层内容
- 根据镜像名称:TAG, 找出镜像层信息, 包含镜像每层的位置 (docker history基础下扩展信息)
- 根据镜像层id, 找出所关联的镜像
- 根据指定文件, 找出对应镜像层信息、所关联的镜像
- 根据none标记的镜像, 显示当时层的镜像名称:TAG
功能1
- 显示字段:rootfs层ID、ChainID(镜像层关系ID)、CacheID(镜像层实际存储ID)、层内容(目录及文件名称)、层大小(字节)
- DIFF ID、CHAIN ID、CACHE ID、CONTENT、SIZE
使用说明:
以 alpine:3.8 镜像为例, 查看每层ID信息, 可以选择目标镜像id或者镜像名称+TAG作为参数, 使用 -i 参数传入。 -layer 参数代表查询镜像层信息的条件。- [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、创建时间、层说明、创建内容、层大小、层存储位置
- IMAGE、CREATED、LAYER、CREATED BY、SIZE、STORAGE
使用说明
以 alpine:3.8 镜像为例, 查看每层ID信息, 可以选择目标镜像id或者镜像名称+TAG作为参数, 使用 -i 参数传入。 -history 参数代表查询镜像层信息的条件。
下列 LAYER 字段中, image layer表示该层是实际存在的镜像层, empty layer表示该层是空层, 其内容存在镜像元数据中。- [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
- REPOSITORY、TAG、 IMAGE ID
使用说明
以 alpine:3.8 镜像为例, 可以选择目标镜像id或者镜像名称+TAG作为参数, 使用 -i 参数传入。 -relation 参数代表查询镜像层信息的条件。
比如 alpine:3.8 镜像中我想查找第一层 sha256:7bff100f35cb359a368537bb07829b055fe8e0b1cb01085a3a628ae9c187c7b8, 有多少镜像包含该层。(可通过下面方法查找)
如果不确定每层内容,则可以通过上述所说的命令 docker-image -layer -i alpine:3.8 将每层内容展示出来,然后选择要查询层精准查询。- [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、 文件绝对路径
- REPOSITORY、TAG、IMAGE ID、FILE PATH
使用说明
以 /root/kubeovn 文件为例。 -file 参数代表要查寻镜像文件的路径。
下列命令执行后,会显示包含 /root/kubeovn 文件的所有镜像列表。- [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名称, 以及相同的镜像层数。- [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层。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |