如何确定一个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%免费
所有你需要做的是,添加下面的微信,备注"免费报告"