docker 镜像和容器的关系
mount-overlay
ovarlay2 是现在docker默认的存储驱动。
此时的主机没有启动任何的容器,使用 mount 命令可以看到 overlay 什么也没有。
[root@server ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@server ~]# mount | grep overlay
此时开启一个容器,再用 mount | grep overlay 查看。
[root@server ~]# docker run -d httpd
02eb36863db9964b460d161343be33f851310a1ab7bcfe5962ebe3a49b55fa47
[root@server ~]# mount | grep overlay
overlay on /var/lib/docker/overlay2/af71aef75d40fcb1f5e42fdaa01033c52088a45e4b518d367488e04319bae7b1/merged type overlay (rw,relatime,seclabel,lowerdir=/var/lib/docker/overlay2/l/ESSRITHND6Z76EFSM5B66QRVUP:/var/lib/docker/overlay2/l/XPIMK42NWN2LFOHZY56DK53TTI:/var/lib/docker/overlay2/l/GYB6K2OXOVSNKACUHFGXTUPVKM:/var/lib/docker/overlay2/l/6QBB6MY75U3U5UERKWUBOW6TUN:/var/lib/docker/overlay2/l/3UDLXQ5RQQLOXY5R3VWQGRP6G3:/var/lib/docker/overlay2/l/LMR5OGQPOUW5KW4X246JYRPHYJ:/var/lib/docker/overlay2/l/UJBD5JI2ITSGUAABDPIVBMNRQ5,upperdir=/var/lib/docker/overlay2/af71aef75d40fcb1f5e42fdaa01033c52088a45e4b518d367488e04319bae7b1/diff,workdir=/var/lib/docker/overlay2/af71aef75d40fcb1f5e42fdaa01033c52088a45e4b518d367488e04319bae7b1/work)
可以看到此时主机上有了一些挂载目录。
此时 overlay 挂载到了 /var/lib/docker/overlay2/bf85ee4a73d004677b06b70728ac766e8eba6203f8c84f1b13ae743e665d134e/merged 中,这是一个整合层,这个整合层就是容器运行的镜像,包含了3个dir,lowerdir、upperdir、workdir。
启动容器会 mount 一个 overlay 的联合文件系统到容器内。这个文件系统由三层组成:
merge:容器内作为同一视图联合挂载点的目录。lowerdir:只读层,即为镜像的镜像层。upperdir:读写层,该层是容器的读写层,对容器的读写操作将反映在读写层。workdir:overlayfs 的内部层,用于实现从只读层到读写层的 copy_up 操作。
需要着重介绍的是 lowerdir 镜像只读层。查看只读层的短ID
此时看一下具体有 mount 了多少目录。
ESSRITHND6Z76EFSM5B66QRVUP
XPIMK42NWN2LFOHZY56DK53TTI
GYB6K2OXOVSNKACUHFGXTUPVKM
6QBB6MY75U3U5UERKWUBOW6TUN
3UDLXQ5RQQLOXY5R3VWQGRP6G3
LMR5OGQPOUW5KW4X246JYRPHYJ
UJBD5JI2ITSGUAABDPIVBMNRQ5
这里面有7个目录,有些目录对应的就是镜像的6个分层,有的则是对应的是容器的初始化层。
在 /var/lib/docker/overlay2/l目录中可以查看这些文件的信息。
[root@server ~]# cd /var/lib/docker/overlay2/l/
[root@server l]# ll
--snipp--
lrwxrwxrwx. 1 root root 77 Sep 28 00:29 ESSRITHND6Z76EFSM5B66QRVUP
-> ../af71aef75d40fcb1f5e42fdaa01033c52088a45e4b518d367488e04319bae7b1-init/diff
可以看到这个 ESSRITHND6Z76EFSM5B66QRVUP 对应的是一个链接,这个连接对应的是一个关于 init 的所以这是一个容器的初始化层,这层是只读的。其他的几个则是分别映射到 diff 目录。
初始化层 init 该层内容是和容器配置相关的文件内容。

浙公网安备 33010602011771号