Docker storage driver overlayFS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker storage driver overlayFS相关的知识,希望对你有一定的参考价值。

参考技术A overlayFS是一个类似AUFS的联合挂载文件系统,与AUFS的实现类似但是比AUFS的存储速度更快。docker基于OverlayFS提供两种存储驱动: overlay和更加新的稳定的overlay2.推荐使用overlay2,因为overlay2更加高效。

1. 停止Docker 服务

2. 备份docker存储的文件

3. 如果要使用与/var/lib/ 所使用的备份文件系统不同的文件系统,需要格式化该文件系统并且将其挂载到/var/lib/docker目录上,为使其可以永久化,要将其mount到/etc/fstab上。

4.编辑/etc/docker/daemon.json文件,如果此文件不存在,则创建daemon.json 文件并且添加如下配置项

一定确保daemon.json 文件的格式正确性,否则docker将无法启动。

5. 启动docker服务。

6. 验证docker使用overlay2存储驱动,查看Storage Driver 和Backing filesystem配置项

overlayFS在单个Linux主机上有两个layer,呈现给用户的是一个单独的目录,这些目录就是layers,统一的过程就是联合挂载。OverlayFS将底层目录称为lowerdir,上层目录称为upperdir,统一挂载目录称为merged。
overlay2驱动本身支持128多个lower overlay FS 层,这为docker build docker commit 涉及docker层的操作提供了更好的支持和性能,并在支持文件系统上消耗更少的inode。镜像和容器在磁盘上的存储
我们通过执行docker pull ubuntu来具体看一下镜像和容器在磁盘上是如何储的,通过pull 的过程我们可以看到,此镜像具有四层,可以在/var/lib/docker/overlay2目录下查看到对应的四层镜像目录但是他们的ID不是对应的,

l 目录是一个符号链接,它包含了短的层标识符,这些标识符可用于避免在mount命令的参数上达到页面大小限制。

看一下各层都包含哪些内容

最底一层06bdc78880只包含link 和diff,link中包含短标识符的名称,diff中包含层的具体的内容。

从倒数第二层开始以及以上层都包含lower目录表示这一层的父级,最底层没有父级,还包含一个diff目录里面存储了本层的具体内容,还会有一个merged目录,包含父级和diff层的内容,还有一个work目录,用于copy-on-write。

从lower层的内容我们可以推导出镜像的层级关系

当我们基于ubuntu镜像创建一个容器时,再来看/var/lib/docker/overlay2/目录,可以看到新创建了两个目录,这两个目录分别是容器层和容器的初始层

其中b7a6d7a5a21869b197f62cd087610185174ec5feae900c53b0f88c3c213d166b 是容器的读写层,b7a6d7a5a21869b197f62cd087610185174ec5feae900c53b0f88c3c213d166b-init是初始化容器的层。
b7a6d7a5a21869b197f62cd087610185174ec5feae900c53b0f88c3c213d166b中创建了一个新的merged目录,此目录包含整个镜像的所有的层的内容,init目录下diff目录中包含/dev /etc 可见这是单独的镜像层。

再来查看系统中的mount 情况

可以看出,当我们基于ubuntu镜像创建容器时,storage driver 将lowerdir(镜像层)和upperdir(容器层diff目录)workerdir(容器层work目录)mount到容器层的merged目录下,由merged目录提供统一的容器入口层。

有三种读文件的场景
1. 这个文件在容器层中不存在:即要读的文件在upperdir中不存在,则将会从lowerdir中读取对应的文件。这机会不会产生性能开销。
2. 要读的文件在容器层中存在:即在upperdir中存在,在lowerdir中不存在,直接读取upperdir中要读的文件。
3. 在容器层和镜像层中都存在:读取容器层中的文件,镜像层的文件会被覆盖。

修改文件场景

以上是关于Docker storage driver overlayFS的主要内容,如果未能解决你的问题,请参考以下文章

CentOS7 设置docker 的Storage Driver为OverlayFS

Ubuntu 18.04 更新后 Docker 服务不再启动:dm_task_run failed / no such device storage-driver=overlay2

docker存储卷

docker存储卷

docker daemon.json 配置

Centos7.2安装docker17.03.1.ce版本