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
功能
- 根据镜像名称: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、相同层数
REPOSITORYTAG 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层。
docker-image 工具展示更详细镜像层内容的更多相关文章
- Docker学习总结(二)—— 镜像,容器
1.Docker镜像 1.1相关概念:registry :用于保存Docker镜像,包括镜像层次结构和镜像元数据,类似于git仓库之类的实体. repository:某个Docker镜像所有迭代版本 ...
- Dive查看docker镜像层信息
1.主要采用docker运行dive的方式,不然宿主机还要安装go那些挺麻烦的.具体用法可查看官方: https://github.com/wagoodman/dive 2.拉取dive镜像 dock ...
- Docker 镜像 层结构理解
镜像到底是什么.镜像的层结构又是什么 通过docker history命令进行分析,镜像是一种其他镜像+文件+命令的组合. 这些镜像的加载.文件导入创建.命令是存在顺序关系的,所以也引出了层的概念. ...
- Docker系统四:Dcoker的镜像管理
1. Dcoker镜像初识 $ docker images -a //查看当前所有镜像 REPOSITORY TAG IMAGE ID CREATED SIZE cptactionhank/atlas ...
- docker学习笔记(3)- 镜像
简介 在docker学习笔记(1)- 架构概述一节中可以看到镜像是docker三大组件之一,可以将Docker镜像类比为虚拟机的模版. 镜像由多个层组成,每层叠加之后从外部看就像一个独立的对象,镜像的 ...
- Docker管理工具 - Swarm部署记录
之前介绍了Docker集群管理工具-Kubernetes部署记录,下面介绍另一个管理工具Swarm的用法,Swarm是Docker原生的集群管理软件,与Kubernetes比起来比较简单. Swarm ...
- docker系列(二):镜像
1 引言 将docker与汽车生产线类比,如果说docker引擎是汽车生产车间,那么容器就是最终的产品——汽车,而本节要介绍的镜像就如同汽车设计图纸,其重要性不言而喻——只有有了设计图(镜像),才能生 ...
- docker可视化工具Portainer部署与汉化
为了更好的观察Docker运行状态,我们采用Portainer工具进行可视化,下面是部署过程总结: 环境: Liunx:CentOS Linux release 7.6.1810 (Core) Doc ...
- 3、docker常用命令:help、镜像命令、容器命令
1.帮助命令 1.docker version 2.docker info 3.重点掌握:docker --help 2.镜像命令 1.docker,镜像,容器关系 2.docker images ( ...
- 面试官:你说你精通 Docker,那你来详细说说 Dockerfile 吧
接上一篇:30分钟快速上手Docker,看这篇就对了! 一. 带着问题学Dockerfile 1.疑问 我们都知道从远程仓库可以pull一个tomcat等镜像下来,然后docker run启动容器,然 ...
随机推荐
- AI 狂飙时代,开源项目的新机遇?
我每天都会刷 GitHub 热榜,围观全球开发者们都在捣鼓啥新鲜的玩意儿.我真切地感受到 AI 的浪潮汹涌而至,它正以一种摧枯拉朽(这个词可能有点猛,但感觉就是这么快!)的速度,改变着软件开发行业,同 ...
- springboot 事件监听@EventListener注解用法
前言 关于@EventListener注解,百度了一下,网上的教程很多都是继承这个,实现那个的,其实根本用不着这么麻烦,所以就写了此文,如文章所讲有误,还请谅解 更多详细用法请百度一下~ 作用 关于事 ...
- java练习题之String字符串
1 编写程序将"jdk" 全部变成大写 并输出到屏幕 截取"DK"并输出到屏幕 1 package com.lv.study.am.first; 2 3 pu ...
- Typora优化教程:如何使用回车键来实现「换行」而非「分段」(类似Obsidian)
Typora优化教程:如何使用回车键来实现「换行」而非「分段」(类似Obsidian) 前言: 首先 在Typora中的默认设置中 按一下 回车键 会实现「分段」操作(中间空一行) 按一下 Shift ...
- Java线程池详解:高效并发编程的核心利器
Java线程池详解:高效并发编程的核心利器 在高并发的Java应用中,频繁创建和销毁线程是非常消耗系统资源的操作.线程池作为Java并发编程的核心组件,不仅能够复用线程.降低系统开销,还能有效控制并发 ...
- 数栈技术分享:一文带你了解Flink jm、tm启动过程和资源分配
一.JM启动过程 1.从日志角度分析启动流程 1)client生成jobGraph 详情请参考:https://www.bilibili.com/video/BV13K4y1P7ri 2)Yarn R ...
- 第2周2_神经网络基础之Python与向量化
神经网络基础之Python与向量化¶ 1. 向量化¶ ① 深度学习算法中,数据量很大,在程序中应该尽量减少使用loop循环语句,而可以使用向量运算来提高程序运行速度. ② 向量化(Vectorizat ...
- C#常规操作
线程池:ThreadPool.SetMaxThreads(辅助线程数,活跃线程数) ThreadPool.SetMinThreads(最小空闲辅助线程,最小空闲线程) ********* 检查是否按下 ...
- Elastic学习之旅 (10) Logstash数据采集
大家好,我是Edison. 上一篇:结构化搜索 Logstash是啥? Logstash是一款优秀的开源ETL工具/数据搜集处理引擎,可以对采集到的数据做一系列的加工和处理,目前已支持200+插件具有 ...
- 2023 syzx 春季训练 1
得找个时间把 zr 题补补.. A 考虑 \(f_{i}\) 只能拆为 \(f_{i-1}+f_{i-2}\),考虑拆 \(f_{i-1}=f_{i-2}+f_{i-3}\) 时,这条 \(f_{i- ...