您的位置:首页 > 运维架构 > Docker

docker overlayFS 简介

2017-01-22 11:35 1021 查看

详细介绍请访问Docker官网

docker镜像驱动不止是overlayfs一种,还有aufs,device mapper方式,但原理基本一致,而且overlayfs是相对比较新的一种方式!

1.如何判断内核中加载了overlay

root@qa-control-pub-ci-build1:~# lsmod |grep over overlay 28140 0


如果没有加载的话,则使用如下命令加载
modprobe overlay


2.挂载overlayfs文件系统 创建几个文件夹如下所示

root@qa-control-pub-ci-build1:~/cxqdir# tree
.
├── low
│   └── 11.txt
├── merged
├── upper
│   └── 22.txt
└── work
└── work


用下面的命令挂载overlayfs文件系统,该命令将low和upper合并成一个merged 名称的overlayfs文件系统。

mount -t overlay overlay -olowerdir=./low,upperdir=./upper,workdir=./work ./merged


再查看目录结构

root@qa-control-pub-ci-build1:~/cxqdir# tree
.
├── low
│   └── 11.txt
├── merged
│   ├── 11.txt
│   └── 22.txt
├── upper
│   └── 22.txt
└── work
└── work

5 directories, 4 files


可以看到merged中展示的文件是low和upper里面的文件集合。

3.同名覆盖的测试 原始内容如下

root@qa-control-pub-ci-build1:~/cxqdir/merged# cat 11.txt
1111111111111111111111
root@qa-control-pub-ci-build1:~/cxqdir/merged# cat 22.txt
2222222


在merge目录中对11.txt内容进行修改,例如

root@qa-control-pub-ci-build1:~/cxqdir/merged# vim 11.txt
root@qa-control-pub-ci-build1:~/cxqdir/merged# cat 11.txt
333333333


分别查看low和upper目录下文件,发现low下面的同名文件内的内容没有变,而upper里面多了一个同名文件。

root@qa-control-pub-ci-build1:~/cxqdir/merged# cat ../low/11.txt
1111111111111111111111
root@qa-control-pub-ci-build1:~/cxqdir/merged# cat ../upper/11.txt
333333333


值得注意的是upper中新增的11.txt文件和merge中的文件node是一样的。

root@qa-control-pub-ci-build1:~/cxqdir/merged# ls -i ../upper/11.txt
350031 ../upper/11.txt
root@qa-control-pub-ci-build1:~/cxqdir/merged# ls -i 11.txt
350031 11.txt


但是跟底层low内的同名文件node不一样

root@qa-control-pub-ci-build1:~/cxqdir/merged# ls -i ../low/11.txt
350033 ../low/11.txt


4.删除文件的测试

在merge中将11.txt删除。

root@qa-control-pub-ci-build1:~/cxqdir/merged# rm 11.txt
root@qa-control-pub-ci-build1:~/cxqdir/merged# ls -l
total 4
-rw-r--r-- 1 root root 8 May  6 13:55 22.txt


查看low文件11.txt仍然是最一开始时的内容。

root@qa-control-pub-ci-build1:~/cxqdir/merged# cat ../low/11.txt
1111111111111111111111


查看upper目录中仍然有11.txt文件,但是变成一个大小为0,且没有任何人有权限的一个空文件。

root@qa-control-pub-ci-build1:~/cxqdir/merged# ls -l ../upper/11.txt
c--------- 1 root root 0, 0 May  6 14:08 ../upper/11.txt


overlayfs用这种删除标记的方式标识文件被删除,(如果upper中没有该文件的话,则底层low中的同名文件又恢复出来显示了,因此需要有这个空文件来标识删除,并且覆盖底层的文件)

root@qa-control-pub-ci-build1:~/cxqdir/merged# rm ../upper/11.txt    (不建议这么操作)
root@qa-control-pub-ci-build1:~/cxqdir/merged# ls
11.txt    22.txt
root@qa-control-pub-ci-build1:~/cxqdir/merged# cat 11.txt
1111111111111111111111


docker中overlayFS的应用

如果想在docker中使用overlay模式,则需要在/etc/default/docker配置如下 DOCKER_OPTS=“-s=overlay ” 查看docker目录下的overlay文件夹。 里面放置着多个image分层的uuid文件夹: 例如

root@qa-control-pub-ci-build1:/var/lib/docker/overlay/fe92ccc33d26116c6cf3d6e1fb5ccb18233ad7613e41d43176cb8214061cd598# tree
.....
├── spool │
├── mail -> ../mail
└── plymouth
└── tmp

1347 directories, 14849 files


这个标识这一个分层里面的所有内容,如何把多个分层联系起来呢,就要找到/etc/default/docker/graph下的同名文件夹中的json文件,里面有关于本层以及它的parent的描述:

3d6e1fb5ccb18233ad7613e41d43176cb8214061cd598# cat json |python -m json.tool
{
无关信息省略...
"created": "2015-12-30T08:22:50.386102166Z",
"docker_version": "1.9.1",
"id": "fe92ccc33d26116c6cf3d6e1fb5ccb18233ad7613e41d43176cb8214061cd598",
"os": "linux",
"parent": "7d1b79980f8821729e0dea5f640f508db09fd111ff128bf333b3eb900b5f2610"
}


这样连起来上下多层就可以构成一个完整的镜像,同时每一层又可以独立使用。 一组多层镜像的组织示意图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息