如何确定一个docker镜像,到底有几层?

如何确定一个docker镜像,到底有几层

 

看到这个问题,你是不是觉得太弱智了,查看docker镜像有几层,太简单了。

 

直接docker history查看不就得了,显示几行就是几层。你确定你说的对吗

 

看完这个文章,你或许会认识到,其实你错了。

 

为了完成这个例子,我们做以下的实验:

 

首先,清空本地环境的所有的镜像

 

然后,下载一个ubuntu的镜像

 

 

[root@centos7 overlay2]# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
d19f32bd9e41: Pull complete 
Digest: sha256:34fea4f31bf187bc915536831fd0afc9d214755bf700b5cdb1336c82516d154e
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

 

 

如果我们从pull的过程来看,应该是只有一层。

 

但是,通过docker history命令看下:

[root@centos7 overlay2]# docker history ubuntu:latest
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
df5de72bdb3b   13 days ago   /bin/sh -c #(nop)  CMD ["bash"]                 0B        
<missing>      13 days ago   /bin/sh -c #(nop) ADD file:396eeb65c8d737180…   77.8MB 

 

发现是2行,那到底是一层,还是两层呢?

 

为了弄清楚这个问题,咱们往根上扒,镜像层在主机文件系统上是以目录存在的,我们看下目录:

 

[root@centos7 l]# cd /var/lib/docker/overlay2/
[root@centos7 overlay2]# ls
335aec3532f647ff437a218ba273f1aefd75a5bd99e36c1d64de75a15d6f1a61  backingFsBlockDev  l
[root@centos7 overlay2]# 

 

 

通过上面的图,我们看到,其实只有1层,l(小写的L)是目录的软链接

 

[root@centos7 overlay2]# ls -l l
total 0
lrwxrwxrwx. 1 root root 72 Aug 15 02:28 NK4TJSR3C4QKL4N4AQLKMSM6KG -> ../335aec3532f647ff437a218ba273f1aefd75a5bd99e36c1d64de75a15d6f1a61/diff
[root@centos7 overlay2]# 

 

 

OK,到了这里,是不是你的过去的思维被颠覆了呢?不过,没关系······

 

我们在调整下,你的docker history 命令就得到正确的答案了,那就是,docker history命令执行时,只看SIZE 大于0的行

 

 

那么,得到的结果,也是只有1行了。

 

怎么样?收获如何······

 

 


一份免费报告
揭示怎样仅仅通过阅读文章,就能每天赚到5000元现金!
该报告100%免费
所有你需要做的是,添加下面的微信,备注"免费报告"

image

posted @ 2022-08-15 14:42  Zhai_David  阅读(1804)  评论(0编辑  收藏  举报