docker-image
docker-image 工具主要功用完结了, 运用docker内容寻址机制具体展现了镜像层与镜像相关的联系。
github库房地址:github.com/hltfaith/do…
技能栈
- go 1.20
- docker api
平台要求
功用
- 依据镜像称号: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层。
技能文章持续更新,请我们多多关注呀~~
搜索微信公众号,关注我【 帽儿山的枪手 】