理解Overlay2 Union Filesystem

Ubuntu基础镜像ubuntu:latest

以ubuntu为例:
我从dockerhub上pull这个容器到本地
docker pull ubuntu:latest
root@docker:~# docker image inspect ubuntu:latest

        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/ef811b8fd1c6e1642ffb572ae5971b971709c88a486c22ff4654e02233d2ad32/merged",
                "UpperDir": "/var/lib/docker/overlay2/ef811b8fd1c6e1642ffb572ae5971b971709c88a486c22ff4654e02233d2ad32/diff",
                "WorkDir": "/var/lib/docker/overlay2/ef811b8fd1c6e1642ffb572ae5971b971709c88a486c22ff4654e02233d2ad32/work"
            },
            "Name": "overlay2"
        },

一看有三个目录,其实三个目录都有共同的一个父目录:/var/lib/docker/overlay2/ef811b8fd1c6e1642ffb572ae5971b971709c88a486c22ff4654e02233d2ad32/
进入这个目录看看:

root@docker:~# cd /var/lib/docker/overlay2/ef811b8fd1c6e1642ffb572ae5971b971709c88a486c22ff4654e02233d2ad32/
root@docker:/var/lib/docker/overlay2/ef811b8fd1c6e1642ffb572ae5971b971709c88a486c22ff4654e02233d2ad32# ls -al
total 16
drwx--x---  3 root root 4096 Jan 27 06:38 .
drwx--x--- 42 root root 4096 Jan 27 06:38 ..
-rw-------  1 root root    0 Jan 27 06:38 committed
drwxr-xr-x 17 root root 4096 Jan 27 06:31 diff
-rw-r--r--  1 root root   26 Jan 27 06:31 link

里面包含一个文件diff,每一层的改变都放在diff中。这一层就是rootfs,每个linux系统都会包含这么一系列文件。这个是image是ubuntu的容器镜像,还没有运行起来,因此整个ubuntu的基础镜像只有一层,没有下层。

root@docker:/var/lib/docker/overlay2/ef811b8fd1c6e1642ffb572ae5971b971709c88a486c22ff4654e02233d2ad32# ls -al diff/
total 68
drwxr-xr-x 17 root root 4096 Jan 27 06:31 .
drwx--x---  3 root root 4096 Jan 27 06:38 ..
lrwxrwxrwx  1 root root    7 Oct  6 16:47 bin -> usr/bin
drwxr-xr-x  2 root root 4096 Apr 15  2020 boot
drwxr-xr-x  2 root root 4096 Oct  6 16:58 dev
drwxr-xr-x 30 root root 4096 Oct  6 16:58 etc
drwxr-xr-x  2 root root 4096 Apr 15  2020 home
lrwxrwxrwx  1 root root    7 Oct  6 16:47 lib -> usr/lib
lrwxrwxrwx  1 root root    9 Oct  6 16:47 lib32 -> usr/lib32
lrwxrwxrwx  1 root root    9 Oct  6 16:47 lib64 -> usr/lib64
lrwxrwxrwx  1 root root   10 Oct  6 16:47 libx32 -> usr/libx32
drwxr-xr-x  2 root root 4096 Oct  6 16:47 media
drwxr-xr-x  2 root root 4096 Oct  6 16:47 mnt
drwxr-xr-x  2 root root 4096 Oct  6 16:47 opt
drwxr-xr-x  2 root root 4096 Apr 15  2020 proc
drwx------  2 root root 4096 Oct  6 16:58 root
drwxr-xr-x  5 root root 4096 Oct  6 16:58 run
lrwxrwxrwx  1 root root    8 Oct  6 16:47 sbin -> usr/sbin
drwxr-xr-x  2 root root 4096 Oct  6 16:47 srv
drwxr-xr-x  2 root root 4096 Apr 15  2020 sys
drwxrwxrwt  2 root root 4096 Oct  6 16:58 tmp
drwxr-xr-x 13 root root 4096 Oct  6 16:47 usr
drwxr-xr-x 11 root root 4096 Oct  6 16:58 var
# 查看这个link
root@docker:/var/lib/docker/overlay2/ef811b8fd1c6e1642ffb572ae5971b971709c88a486c22ff4654e02233d2ad32# cat link
VY4F76SLTQSYWM3OM772363QDK

root@docker:/var/lib/docker/overlay2/ef811b8fd1c6e1642ffb572ae5971b971709c88a486c22ff4654e02233d2ad32# ls -al ../l/VY4F76SLTQSYWM3OM772363QDK
lrwxrwxrwx 1 root root 72 Jan 27 06:31 ../l/VY4F76SLTQSYWM3OM772363QDK -> ../ef811b8fd1c6e1642ffb572ae5971b971709c88a486c22ff4654e02233d2ad32/diff

发现这个link目录,只是用了一个短名字而已,依然指向了diff目录,用短名称为了防止mount时文件过长。

运行ubuntu:latest

root@docker:~# docker exec -it 6d1fa5d59f6e /bin/bash
root@6d1fa5d59f6e:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  wtao.txt
root@6d1fa5d59f6e:/# mount |grep overlay
overlay on / type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/6ZR2PMR3HSLWMCBFKPNZNXKOQP:/var/lib/docker/overlay2/l/VY4F76SLTQSYWM3OM772363QDK,upperdir=/var/lib/docker/overlay2/83c80d976b3c87eb9a025cd7454e218df180fba44e98d30e9b1cabba796beac3/diff,workdir=/var/lib/docker/overlay2/83c80d976b3c87eb9a025cd7454e218df180fba44e98d30e9b1cabba796beac3/work)

暂无评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注


虚拟化 | 云计算 | 机器学习 | 股市复盘
© 2024 涛哥,版权所有, 京ICP备20014492-2号