Docker存储驱动之OverlayFS简介,Docker的存储驱动

Docker存款和储蓄驱动

简介

  OverlayFS是后生可畏种和AUFS很周边的文件系统,与AUFS比较,OverlayFS有以下特征:
   1卡塔尔(英语:State of Qatar) 更简约地规划;
   2卡塔尔国 从3.18开首,就进入了Linux内核主线;
   3卡塔尔(قطر‎ 大概更加快一些。
  因而,OverlayFS在Docker社区关切度升高快速,被许几个人以为是AUFS的继承者。仿佛宣称的同生机勃勃,OverlayFS还很年轻。所以,在扭转情况使用它时,依旧要求越来越警觉。
  Docker的overlay存款和储蓄驱动利用了超级多OverlayFS天性来营造和管理镜像与容器的磁盘构造。
  自从Docker1.12起,Docker也支撑overlay2存款和储蓄驱动,相比较于overlay来讲,overlay2在inode优化上尤为便捷。但overlay2驱动只包容Linux kernel4.0之上的版本。
  注意:自从OverlayFS参加kernel主线后,它在kernel模块中的名称就被从overlayfs改为overlay了。可是为了在本文中区分,大家选拔OverlayFS代表全部文件系统,而overlay/overlay2表示Docker的蕴藏驱动。

1. Docker存款和储蓄驱动历史

Docker近来协理的greph driver包罗:

  • AUFS
  • device-mapper
  • btrfs
  • overlayfs(重点)

有关各存款和储蓄驱的详实介绍参照Docker各类存款和储蓄驱动原理及运用项景和总体性测量试验对照

overlay和overlay2

2. Docker overlayfs driver

OverlayFS(overlay)的镜像分层与分享

  OverlayFS使用八个目录,把四个目录存放于另多个上述,并且对外提供单个统风流倜傥的见解。那七个目录日常被称作层,那一个分层的手艺被称作union mount。术语上,下层的目录叫做lowerdir,上层的叫做upperdir。对外彰显的联结视图称作merged。
  下图显示了Docker镜像和Docker容器是何许分层的。镜像层便是lowerdir,容器层是upperdir。曝光在外的会面视图正是所谓的merged。
  图片 1
  注意镜像层和容器层是什么处理相似的文本的:容器层(upperdir)的公文是显性的,会掩盖镜像层(lowerdir)近似文件的留存。容器映射(merged)呈现出统生龙活虎的视图。
  overlay驱动只好职业在两层以上。也便是说多层镜像不能用多层OverlayFS达成。替代的,各个镜像层在/var/lib/docker/overlay中用本人的目录来促成,使用硬链接这种有效使用空间的法子,来援引底层分享的多少。注意:Docker1.10过后,镜像层ID和/var/lib/docker中的目录名不再生龙活虎风流倜傥对应。
  创制叁个容器,overlay驱动联合镜像层和多个新目录给容器。镜像顶层是overlay中的只读lowerdir,容器的新目录是可写的upperdir。

1) 介绍

docker使用overlaysf的牵线如下:

  • lowerdir指向image layer;
  • upperdir指向container layer;
  • merged整合lowerdir与upperdir提统统一视图给容器作为根文件系统

如下图:
图片 2

overlay中镜像和容器的磁盘布局

  上面包车型客车docker pull命令展现了Docker host下载二个由5层组成的镜像。

$ sudo docker pull ubuntu

Using default tag: latest
latest: Pulling from library/ubuntu

5ba4f30e5bea: Pull complete
9d7d19c9dc56: Pull complete
ac6ad7efd0f9: Pull complete
e7491a747824: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:46fb5d001b88ad904c5c732b086b596b92cfb4a4840a3abd0e35dbb6870585e4
Status: Downloaded newer image for ubuntu:latest

  上航海用体育场地的输出结果彰显pull了5个目录包蕴了5个镜像层,每大器晚成层在/var/lib/docker/overlay/下都有温馨的目录。还是再一次提醒下,如您所见,Docker1.10从今现在,镜像层和目录名不再对应。

$ ls -l /var/lib/docker/overlay/

total 20
drwx------ 3 root root 4096 Jun 20 16:11 38f3ed2eac129654acef11c32670b534670c3a06e483fce313d72e3e0a15baa8
drwx------ 3 root root 4096 Jun 20 16:11 55f1e14c361b90570df46371b20ce6d480c434981cbda5fd68c6ff61aa0a5358
drwx------ 3 root root 4096 Jun 20 16:11 824c8a961a4f5e8fe4f4243dab57c5be798e7fd195f6d88ab06aea92ba931654
drwx------ 3 root root 4096 Jun 20 16:11 ad0fe55125ebf599da124da175174a4b8c1878afe6907bf7c78570341f308461
drwx------ 3 root root 4096 Jun 20 16:11 edab9b5e5bf73f2997524eebeac1de4cf9c8b904fa8ad3ec43b3504196aa3801

  镜像层目录中,分享的数码应用的是硬链接,他们的inode号雷同。那样做有效地利用了磁盘。

$ ls -i /var/lib/docker/overlay/38f3ed2eac129654acef11c32670b534670c3a06e483fce313d72e3e0a15baa8/root/bin/ls

19793696 /var/lib/docker/overlay/38f3ed2eac129654acef11c32670b534670c3a06e483fce313d72e3e0a15baa8/root/bin/ls

$ ls -i /var/lib/docker/overlay/55f1e14c361b90570df46371b20ce6d480c434981cbda5fd68c6ff61aa0a5358/root/bin/ls

19793696 /var/lib/docker/overlay/55f1e14c361b90570df46371b20ce6d480c434981cbda5fd68c6ff61aa0a5358/root/bin/ls

  容器也在/var/lib/docker/overlay/下。使用ls -l命令查看容器目录,会意识以下文件和目录。

$ ls -l /var/lib/docker/overlay/<directory-of-running-container>

total 16
-rw-r--r-- 1 root root   64 Jun 20 16:39 lower-id
drwxr-xr-x 1 root root 4096 Jun 20 16:39 merged
drwxr-xr-x 4 root root 4096 Jun 20 16:39 upper
drwx------ 3 root root 4096 Jun 20 16:39 work

  那多少个文件系统对象都以OverlayFS的零件。lower-id文件满含了容器的镜像层最顶层的ID。

$ cat /var/lib/docker/overlay/ec444863a55a9f1ca2df72223d459c5d940a721b2288ff86a3f27be28b53be6c/lower-id

55f1e14c361b90570df46371b20ce6d480c434981cbda5fd68c6ff61aa0a5358

  upper目录是容器的可读写层。任何对容器的改观都写在这里个目录中。
  merged目录便是容器的mount point,这正是暴光的镜像(lowerdir)和容器(upperdir)的联合视图。任何对容器的改造也潜濡默化那几个目录。
  work目录是OverlayFS效率须要的,会被如copy_up之类的操作使用。
  能够因此mount命令来核查上边的陈诉是或不是科学。

$ mount | grep overlay

overlay on /var/lib/docker/overlay/ec444863a55a.../merged
type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay/55f1e14c361b.../root,
upperdir=/var/lib/docker/overlay/ec444863a55a.../upper,
workdir=/var/lib/docker/overlay/ec444863a55a.../work)

2)容器内文件的读写优先级景况

OverlayFS(overlay2)的镜像分层与分享

  overlay驱动只职业在叁个lower OverlayFS层之上,由此须求硬链接来实现多层镜像,但overlay2驱动原生地帮助多层lower OverlayFS镜像(最多128层)。
  因而overlay2驱动在合层相关的吩咐(如build和commit)中提供了越来越好的性质,与overlay驱动相比,消耗了越来越少的inode。

I. read file
  • upperdir存在,从container layer读取;
  • upperdir不存在,从lowerdir,即 image layer读取;

overlay第22中学镜像和容器的磁盘构造

  docker pull ubuntu下载了含蓄5层的镜像,能够看来在/var/lib/docker/overlay2中,有6个目录。

$ ls -l /var/lib/docker/overlay2

total 24
drwx------ 5 root root 4096 Jun 20 07:36 223c2864175491657d238e2664251df13b63adb8d050924fd1bfcdb278b866f7
drwx------ 3 root root 4096 Jun 20 07:36 3a36935c9df35472229c57f4a27105a136f5e4dbef0f87905b2e506e494e348b
drwx------ 5 root root 4096 Jun 20 07:36 4e9fa83caff3e8f4cc83693fa407a4a9fac9573deaf481506c102d484dd1e6a1
drwx------ 5 root root 4096 Jun 20 07:36 e8876a226237217ec61c4baf238a32992291d059fdac95ed6303bdff3f59cff5
drwx------ 5 root root 4096 Jun 20 07:36 eca1e4e1694283e001f200a667bb3cb40853cf2d1b12c29feda7422fed78afed
drwx------ 2 root root 4096 Jun 20 07:36 l

  l目录富含了重重软连接,使用短名称指向了任何层。短名称用于制止mount参数时完毕页面大小的限量。

$ ls -l /var/lib/docker/overlay2/l

total 20
lrwxrwxrwx 1 root root 72 Jun 20 07:36 6Y5IM2XC7TSNIJZZFLJCS6I4I4 -> ../3a36935c9df35472229c57f4a27105a136f5e4dbef0f87905b2e506e494e348b/diff
lrwxrwxrwx 1 root root 72 Jun 20 07:36 B3WWEFKBG3PLLV737KZFIASSW7 -> ../4e9fa83caff3e8f4cc83693fa407a4a9fac9573deaf481506c102d484dd1e6a1/diff
lrwxrwxrwx 1 root root 72 Jun 20 07:36 JEYMODZYFCZFYSDABYXD5MF6YO -> ../eca1e4e1694283e001f200a667bb3cb40853cf2d1b12c29feda7422fed78afed/diff
lrwxrwxrwx 1 root root 72 Jun 20 07:36 NFYKDW6APBCCUCTOUSYDH4DXAT -> ../223c2864175491657d238e2664251df13b63adb8d050924fd1bfcdb278b866f7/diff
lrwxrwxrwx 1 root root 72 Jun 20 07:36 UL2MW33MSE3Q5VYIKBRN4ZAGQP -> ../e8876a226237217ec61c4baf238a32992291d059fdac95ed6303bdff3f59cff5/diff

  在最低层中,有个link文件,包蕴了日前提到的那个层对应的短名称;还会有个diff目录,包涵了那一个镜像的内容。

$ ls /var/lib/docker/overlay2/3a36935c9df35472229c57f4a27105a136f5e4dbef0f87905b2e506e494e348b/

diff  link

$ cat /var/lib/docker/overlay2/3a36935c9df35472229c57f4a27105a136f5e4dbef0f87905b2e506e494e348b/link

6Y5IM2XC7TSNIJZZFLJCS6I4I4

$ ls  /var/lib/docker/overlay2/3a36935c9df35472229c57f4a27105a136f5e4dbef0f87905b2e506e494e348b/diff

bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

  第二平底中,lower文件提出了该层的组成。该目录还会有diff、merged和work目录。

$ ls /var/lib/docker/overlay2/223c2864175491657d238e2664251df13b63adb8d050924fd1bfcdb278b866f7

diff  link  lower  merged  work

$ cat /var/lib/docker/overlay2/223c2864175491657d238e2664251df13b63adb8d050924fd1bfcdb278b866f7/lower

l/6Y5IM2XC7TSNIJZZFLJCS6I4I4

$ ls /var/lib/docker/overlay2/223c2864175491657d238e2664251df13b63adb8d050924fd1bfcdb278b866f7/diff/

etc  sbin  usr  var

  运营容器包蕴的目录相像持有周边的文书和目录。注意在lower文件中,使用:符号来划分不相同的平底,并且逐条是从高层到底层。

$ ls -l /var/lib/docker/overlay/<directory-of-running-container>

$ cat /var/lib/docker/overlay/<directory-of-running-container>/lower

l/DJA75GUWHWG7EWICFYX54FIOVT:l/B3WWEFKBG3PLLV737KZFIASSW7:l/JEYMODZYFCZFYSDABYXD5MF6YO:l/UL2MW33MSE3Q5VYIKBRN4ZAGQP:l/NFYKDW6APBCCUCTOUSYDH4DXAT:l/6Y5IM2XC7TSNIJZZFLJCS6I4I4

  mount的结果如下:

$ mount | grep overlay

overlay on /var/lib/docker/overlay2/9186877cdf386d0a3b016149cf30c208f326dca307529e646afce5b3f83f5304/merged
type overlay (rw,relatime,
lowerdir=l/DJA75GUWHWG7EWICFYX54FIOVT:l/B3WWEFKBG3PLLV737KZFIASSW7:l/JEYMODZYFCZFYSDABYXD5MF6YO:l/UL2MW33MSE3Q5VYIKBRN4ZAGQP:l/NFYKDW6APBCCUCTOUSYDH4DXAT:l/6Y5IM2XC7TSNIJZZFLJCS6I4I4,
upperdir=9186877cdf386d0a3b016149cf30c208f326dca307529e646afce5b3f83f5304/diff,
workdir=9186877cdf386d0a3b016149cf30c208f326dca307529e646afce5b3f83f5304/work)
II. write file
  • upperdir存在,直接在upperdir写;
  • upperdir不存在,overlay发起copy_up操作,从lowerdir拷贝文件到upperdir实行写,拷贝只会在第贰回展开时发生。

容器使用overlay读写

  有两种情景,容器会经过overlay只读访问文件。
    容器层不设有的文书。假使容器只读打开四个文书,但该容器不在容器层(upperdir),将在从镜像层(lowerdir)中读取。那会挑起一点都不大的品质损耗。
    只设有于容器层的公文。若是容器只读权限展开二个文件,何况容器只存在于容器层(upperdir)实际不是镜像层(lowerdir),那么间接从镜像层读取文件,无额外品质损耗。
    文本同有时间设有于容器层和镜像层。那么会读取容器层的公文,因为容器层(upperdir)隐瞒了镜像层(lowerdir)的同名文件。由此,也向来不额外的个性损耗。
  有以下场景容器校正文件。
    先是次写四个文本。容器第三回写二个风华正茂度存在的文本,容器层官样文章此个文件。overlay/overlay2驱动实施copy-up操作,将文件从镜像层拷贝到容器层。然后容器修改容器层新拷贝的文本。
    不过,OverlayFS职业在文书等级实际不是块等第。也正是说全体的OverlayFS的copy-up操作都会拷贝整个文件,尽管文件极其大但却只修改了一小部分,这在容器写品质上具备分明的熏陶。不过,有四个方面值得注意:
     ▷ copy-up操作只发生在率先次写文件时。后续的对同三个文件的写操作都以一直指向拷贝到容器层的不行新文件。
     ▷ OverlayFS只职业在两层中。那比AUFS要在多层镜像中找找时质量要好。
    去除文件和目录。删除文件时,容器会在镜像层创设三个whiteout文件,而镜像层的文书并不曾删除。可是,whiteout文件会暗藏它。
    容器中剔除一个索引,容器层会创立叁个不透利水录。那和whiteout文件掩盖镜像层的公文相似。
    重命名目录。只有在源路线和目标路径都在顶层容器层时,才同意实践rename操作。不然,会重回EXDEV。
    因而,你的采纳须求能够处理EXDEV,而且回滚操作,实行代替的“拷贝和删除”战术。

III. deleting files and directories
  • 去除文件时,upperdir会创制贰个witheout文件,会隐瞒lowerdir的文件(非删除);
  • 除去目录时,upperdir会成立三个opaque diectory,隐讳lowerdir的目录;

在Docker中配备overlay/overlay2存储驱动

  为了给Docker配置overlay存款和储蓄驱动,你的Docker host必需运维在Linux kernel3.18版本之上,而且加载了overlay内核驱动。对于overlay2驱动,kernel版本必需在4.0或以上。OverlayFS能够运作在大好多Linux文件系统之上。可是,以后最建议在生育情状中使用ext4。
  下边包车型地铁步调陈述了哪些在Docker host中布置利用OverlayFS。
  注意:在上马布局在此之前,借使您以往在动用Docker daemon,何况有风华正茂部分想保留的镜像,简易你push它们到Docker hub中。
    1卡塔尔 如若Docker daemon正在运作,须求先甘休其运转。

$ systemctl stop docker.service

    2卡塔尔国 检查kernel版本,确认overlay的内核模块是还是不是加载。

$ uname -r

4.4.0-64-generic

$ lsmod | grep overlay

overlay

# 如果上面命令没有输出,说明驱动没有加载,可以如下操作
$ modprobe overlay

    3卡塔尔 使用overlay/overlay2存款和储蓄驱动来运行Docker daemon。

$ dockerd --storage-driver=overlay2 &

[1] 29403
root@ip-10-0-0-174:/home/ubuntu# INFO[0000] Listening for HTTP on unix (/var/run/docker.sock)
INFO[0000] Option DefaultDriver: bridge
INFO[0000] Option DefaultNetwork: bridge
<output truncated>

    别的,你还足以在Docker的配备文件中增添--storage-driver=overlay的标识到DOCKE传祺_OPTS中,那样就可以持久化配置,不再供给运维daemon时手动内定--storage-driver标识了。比如,能够将配置漫长化到计划文件/etc/default/docker中,将下边内容插手该公文中。

DOCKER_OPTS="--storage-driver=overlay2"

    4卡塔尔(قطر‎ 检查daemon是还是不是曾经选用了overlay/overlay2存款和储蓄驱动。

$ docker info

Containers: 0
Images: 0
Storage Driver: overlay2
Backing Filesystem: extfs
<output truncated>

    注意输出结果展现后端文件系统使用的是extfs。即便扶持多样文件系统,可是生产条件中要么提出使用extfs(尤其ext4)。

3). overlayfs driver实践

  • 指定overlay driver启动:
$dockerd --storage-driver=overlay
$docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 17.06.0-ce
Storage Driver: overlay
 Backing Filesystem: extfs
 Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: cfb82a876ecc11b5ca0977d1733adbe58599088a
runc version: 2d41c047c83e09a6d61d464906feb2a2f3c52aa4
init version: 949e6fa
  • 下载贰个镜像:
$docker pull centos:centos6
$docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              centos6             7ea307891843        4 weeks ago         194MB
  • 查看镜像的相应目录
$ls /var/lib/docker/overlay/
8c2dc4e8a8bb0bca70b6304984089f9f6fcf6e093ce9cf9818af3316ad7fb0d7
$ls /var/lib/docker/overlay/8c2dc4e8a8bb0bca70b6304984089f9f6fcf6e093ce9cf9818af3316ad7fb0d7/root/
bin  etc  home  lib  lib64  lost found  media  mnt  opt  root  sbin  selinux  srv  tmp  usr  var
  • 创造容器
$docker run -it centos:centos6 /bin/bash
#在host里查看
$ls /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/
lower-id  merged/   upper/    work/
cat /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/lower-id
8c2dc4e8a8bb0bca70b6304984089f9f6fcf6e093ce9cf9818af3316ad7fb0d7
$cat /proc/mounts
overlay /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/merged overlay rw,relatime,lowerdir=/var/lib/docker/overlay/8c2dc4e8a8bb0bca70b6304984089f9f6fcf6e093ce9cf9818af3316ad7fb0d7/root,upperdir=/var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/upper,workdir=/var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/work 0 0

能够见见,容器对应的目录有多个(merged, upper, work), work用于overlayfs达成copy_up操作, lower-id保存images ID。

  • 容器内创制文件
$echo "hello" > /root/f1.txt
$ls /root/
anaconda-ks.cfg  f1.txt  install.log  install.log.syslog

Host上overlay目录变化

$ls /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/merged/root/
anaconda-ks.cfg  f1.txt  install.log  install.log.syslog
$ls /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/upper/root/
f1.txt
$ls /var/lib/docker/overlay/8c2dc4e8a8bb0bca70b6304984089f9f6fcf6e093ce9cf9818af3316ad7fb0d7/root/root/
anaconda-ks.cfg  install.log  install.log.syslog
  • 容器内去除文件
$rm /root/install.log
$ls /root/

Host上overlay目录变化

$ls /var/lib/docker/overlay/8c2dc4e8a8bb0bca70b6304984089f9f6fcf6e093ce9cf9818af3316ad7fb0d7/root/root/
anaconda-ks.cfg  install.log  install.log.syslog

$ls /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/merged/root/
anaconda-ks.cfg  f1.txt  install.log.syslog

$ls /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/upper/root/* -l
-rw-r--r-- 1 root root    6 Sep  3 22:17 /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/upper/root/f1.txt
#发现upperdir多了一下instll.log文件
c--------- 1 root root 0, 0 Sep  3 22:24 /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/upper/root/install.log

$cat /var/lib/docker/overlay/12e6cab3449f07e2eeb8441ec366c214a9550130ea1367bd5e58b6375b00d9e8/lower-id
8c2dc4e8a8bb0bca70b6304984089f9f6fcf6e093ce9cf9818af3316ad7fb0d7

$ls /var/lib/docker/overlay/8c2dc4e8a8bb0bca70b6304984089f9f6fcf6e093ce9cf9818af3316ad7fb0d7/root/root/
anaconda-ks.cfg  install.log  install.log.syslog

OverlayFS和Docker性能

  平时的话,overlay/overlay2驱动更加快一些,大致肯定比aufs和devicemapper越来越快,在少数意况下,可能比btrfs也更加快。尽管如此,在动用overlay/overlay2存款和储蓄驱动时,依然须求专心以下部分方面:

  •   Page Caching,页缓存。OverlayFS支持页缓存分享,也正是说借使多少个容器访谈同一个文书,能够分享壹个或五个页缓存选项。那使得overlay/overlay2驱动高效地行使了内部存款和储蓄器,是PaaS平台依旧别的高密度场景的二个很好地选项。
  •   copy_up。和AuFS相同,在容器第一遍改良文件时,OverlayFS都亟待实践copy-up操作,那会给写操作带给一些延缓——尤其那个要拷贝的文本比不小时。可是,意气风发旦文件已经实践了那一个发展拷贝的操作后,全体继续对那个文件的操作都只针对那份容器层的新拷贝而已。
    OverlayFS的copy_up操作比AuFS的copy_up操作要快。因为AUFS扶植比OverlayFS扶助更加的多的层数,若是急需在多层查找文件时,就大概招致相当的大的推移。
  •   Inode limits。使用overlay存款和储蓄驱动大概引致过多的inode消耗,特别是Docker host上镜头像和容器的数量拉长时。多量的镜像,也许非常多容器启动与停止,,会超级快消耗掉该Docker host上的inode。overlay2存储驱动不设有这几个标题。
      不幸的是,只可以在文件系统创设时钦定inode的个数。因此,能够盘算将/var/lib/docker放在一个独立的配备文件系统中,大概在创建文件系统时钦点inode个数。
      以下部分办法能够提供OverlayFS的性质。
  •   使用Solid State Devices(SSD)。
  •   使用数据卷。数据卷能升高更加好的习性,因为其绕过存款和储蓄驱动,不会挑起超配、copy-on-write恐怕会以致的隐患。

    OverlayFS兼容性

      有以下两点OverlayFS和任何文件系统不太合作:

  • open(2卡塔尔。OverlayFS帮忙吃POSIX标准的二个子集。以copy-up操作为例,到场你的行使调用了fd1=open("foo", O_RDONLY) 和 fd2=open("foo", O_EvoqueDWENCORE卡塔尔(英语:State of Qatar),你的运用期望fd1和fd2指向同二个文本,可是,因为copy-up操作,会引致指向分歧的文件。

  • rename(2卡塔尔国,这些和前边提到AuFS后生可畏致。

    小结

      overlay/overlay2存款和储蓄驱动已经成为了Docker存款和储蓄驱动的首推,何况品质优于AuFS和devicemapper。但是,他们也带动了一些与任何文件系统的不宽容性,如对open和rename操作的支撑。别的,overlay与overlay2比较,overlay2帮助了多层镜像,优化了inode使用。不过,使用这三种驱动时,需求专一你的Docker host的kernel版本。

本文由星彩网app下载发布于计算机编程,转载请注明出处:Docker存储驱动之OverlayFS简介,Docker的存储驱动

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。