【4858.com】Docker的贮存驱动,Docker存款和储蓄驱动之OverlayFS简单介绍

By admin in 4858.com on 2019年4月16日

Docker存款和储蓄驱动

Docker存款和储蓄驱动

简介

  OverlayFS是1种和AUFS很接近的文件系统,与AUFS相比,OverlayFS有以下特点:
   一) 更轻松地陈设;
   二) 从叁.18发端,就进来了Linux内核主线;
   三) 可能更加快壹些。
  由此,OverlayFS在Docker社区关注度升高飞快,被很两个人觉着是AUFS的承接人。就好像宣称的一致,OverlayFS还很年轻。所以,在变化环境使用它时,依旧须求更为警惕。
  Docker的overlay存款和储蓄驱动利用了众多OverlayFS个性来创设和管理镜像与容器的磁盘结构。
  自从Docker一.1二起,Docker也帮衬overlay2储存驱动,相比较于overlay来讲,overlay二在inode优化上更是便捷。但overlay②驱动只包容Linux
kernel4.0以上的版本。
  注意:自从OverlayFS参预kernel主线后,它在kernel模块中的名称就被从overlayfs改为overlay了。不过为了在本文中分别,我们利用OverlayFS代表任何文件系统,而overlay/overlay贰代表Docker的储存驱动。

简介

  OverlayFS是一种和AUFS很接近的文件系统,与AUFS相比较,OverlayFS有以下特征:
   一) 更简便易行地布署;
   2) 从3.1捌初叶,就进去了Linux内核主线;
   三) 恐怕越来越快一些。
  因而,OverlayFS在Docker社区关切度升高火速,被过四人觉着是AUFS的继承者。就像宣称的均等,OverlayFS还很年轻。所以,在变化环境使用它时,依然要求进一步小心。
  Docker的overlay存款和储蓄驱动利用了繁多OverlayFS本性来营造和管理镜像与容器的磁盘结构。
  自从Docker壹.1贰起,Docker也扶助overlay2储存驱动,比较于overlay来说,overlay二在inode优化上越来越快捷。但overlay二驱动只包容Linux
kernel4.0上述的本子。
  注意:自从OverlayFS加入kernel主线后,它在kernel模块中的名称就被从overlayfs改为overlay了。可是为了在本文中区分,大家选择OverlayFS代表整个文件系统,而overlay/overlay二表示Docker的储存驱动。

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

Docker近期支撑的greph driver蕴涵:

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

至于各存款和储蓄驱的详细介绍参照Docker七种存款和储蓄驱动原理及使用场景和性质测试对照

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

Docker如今支撑的greph driver包含:

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

关于各存款和储蓄驱的详实介绍参照Docker三种存款和储蓄驱动原理及选择场景和性质测试对照

overlay和overlay2

overlay和overlay2

2. Docker overlayfs driver

2. Docker overlayfs driver

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

  OverlayFS使用多少个目录,把贰个目录置放于另三个以上,并且对外提供单个统壹的观点。那五个目录日常被称作层,那么些分层的技巧被称作union
mount。术语上,下层的目录叫做lowerdir,上层的叫做upperdir。对外展现的合并视图称作merged。
  下图显示了Docker镜像和Docker容器是如何分层的。镜像层便是lowerdir,容器层是upperdir。揭发在外的集合视图正是所谓的merged。
  4858.com 1
  注意镜像层和容器层是何许处理一样的文本的:容器层(upperdir)的公文是显性的,会隐藏镜像层(lowerdir)同样文件的存在。容器映射(merged)展现出统壹的视图。
  overlay驱动只好工作在两层以上。也正是说多层镜像不能够用多层OverlayFS达成。代替的,每种镜像层在/var/lib/docker/overlay中用本人的目录来贯彻,使用硬链接那种有效运用空间的点子,来引用底层分享的多少。注意:Docker一.十从此,镜像层ID和/var/lib/docker中的目录名不再一壹对应。
  创立二个器皿,overlay驱动联合镜像层和2个新目录给容器。镜像顶层是overlay中的只读lowerdir,容器的新目录是可写的upperdir。

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

  OverlayFS使用八个目录,把3个索引置放于另叁个以上,并且对外提供单个统1的思想。这多少个目录平常被称作层,那几个分层的能力被称作union
mount。术语上,下层的目录叫做lowerdir,上层的叫做upperdir。对外显示的统一视图称作merged。
  下图显示了Docker镜像和Docker容器是哪些分层的。镜像层便是lowerdir,容器层是upperdir。揭露在外的集合视图就是所谓的merged。
  4858.com 2
  注意镜像层和容器层是何许处理同样的文件的:容器层(upperdir)的文件是显性的,会隐藏镜像层(lowerdir)同样文件的存在。容器映射(merged)展现出统1的视图。
  overlay驱动只能职业在两层以上。也正是说多层镜像不能够用多层OverlayFS实现。取代的,各样镜像层在/var/lib/docker/overlay中用自身的目录来促成,使用硬链接那种有效运用空间的秘诀,来引用底层分享的多少。注意:Docker一.10自此,镜像层ID和/var/lib/docker中的目录名不再1一对应。
  创制2个器皿,overlay驱动联合镜像层和四个新目录给容器。镜像顶层是overlay中的只读lowerdir,容器的新目录是可写的upperdir。

1) 介绍

docker使用overlaysf的介绍如下:

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

如下图:
4858.com 3

1) 介绍

docker使用overlaysf的介绍如下:

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

【4858.com】Docker的贮存驱动,Docker存款和储蓄驱动之OverlayFS简单介绍。如下图:
4858.com 4

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了多个目录包蕴了多少个镜像层,每一层在/var/lib/docker/overlay/下都有谈得来的目录。如故重新提醒下,如你所见,Docker一.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)

overlay中镜像和容器的磁盘结构

  上边包车型大巴docker pull命令展示了Docker host下载3个由伍层组成的镜像。

$ 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个镜像层,每1层在/var/lib/docker/overlay/下都有温馨的目录。照旧再次提示下,如您所见,Docker一.拾过后,镜像层和目录名不再对应。

$ 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)

贰)容器内文件的读写优先级情状

贰)容器内文件的读写优先级情形

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

  overlay驱动只工作在3个lower
OverlayFS层之上,因而需求硬链接来达成多层镜像,但overlay二驱动原生地帮助多层lower
OverlayFS镜像(最多12八层)。
  由此overlay2驱动在合层相关的下令(如build和commit)中提供了越来越好的习性,与overlay驱动比较,消耗了越来越少的inode。

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

  overlay驱动只职业在2个lower
OverlayFS层之上,因而要求硬链接来实现多层镜像,但overlay二驱动原生地协助多层lower
OverlayFS镜像(最多12八层)。
  由此overlay二驱动在合层相关的指令(如build和commit)中提供了越来越好的本性,与overlay驱动比较,消耗了更加少的inode。

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

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

  docker pull
ubuntu下载了带有五层的镜像,能够看到在/var/lib/docker/overlay第22中学,有多少个目录。

$ 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)

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

  docker pull
ubuntu下载了含有5层的镜像,能够看到在/var/lib/docker/overlay第22中学,有5个目录。

$ 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

  第1底层中,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进行写,拷贝只会在率先次展开时发生。
II. write file
  • upperdir存在,直接在upperdir写;
  • upperdir不存在,overlay发起copy_up操作,从lowerdir拷贝文件到upperdir举行写,拷贝只会在首先次张开时产生。

容器使用overlay读写

  有三种情景,容器会透过overlay只读访问文件。
    容器层不存在的文书。借使容器只读展开四个文件,但该容器不在容器层(upperdir),将在从镜像层(lowerdir)中读取。那会挑起异常的小的特性损耗。
    只设有于容器层的文书。若是容器只读权限张开多少个文件,并且容器只存在于容器层(upperdir)而不是镜像层(lowerdir),那么直接从镜像层读取文件,无额外质量损耗。
    文本同时设有于容器层和镜像层。那么会读取容器层的公文,因为容器层(upperdir)隐藏了镜像层(lowerdir)的同名文件。因而,也并未有额外的习性损耗。
  有以下场景容器修改文件。
    第1遍写二个文件。容器第一回写二个曾经存在的文件,容器层不设有这几个文件。overlay/overlay2驱动实行copy-up操作,将文件从镜像层拷贝到容器层。然后容器修改容器层新拷贝的文件。
    但是,OverlayFS职业在文件品级而不是块等第。也正是说全体的OverlayFS的copy-up操作都会拷贝整个文件,即便文件尤其大但却只修改了一小部分,那在容器写品质上装有明显的熏陶。但是,有七个地点值得注意:
     ▷
copy-up操作只发生在率先次写文件时。后续的对同多少个文本的写操作都以直接针对拷贝到容器层的格外新文件。
     ▷
OverlayFS只职业在两层中。那比AUFS要在多层镜像中寻觅时质量要好。
    除去文件和目录。删除文件时,容器会在镜像层创立3个whiteout文件,而镜像层的公文并从未删除。可是,whiteout文件会隐藏它。
    容器中除去一个索引,容器层会创设一个不透止汗录。那和whiteout文件隐藏镜像层的文本类似。
    重命名目录。只有在源路线和指标路线都在顶层容器层时,才同意实践rename操作。不然,会再次来到EXDEV。
    因而,你的行使供给能够处理EXDEV,并且回滚操作,实施代替的“拷贝和删除”战略。

容器使用overlay读写

  有三种情景,容器会透过overlay只读访问文件。
    容器层不设有的文本。假使容器只读张开三个文书,但该容器不在容器层(upperdir),将要从镜像层(lowerdir)中读取。那会滋生不大的性质损耗。
    只设有于容器层的公文。借使容器只读权限展开3个文本,并且容器只存在于容器层(upperdir)而不是镜像层(lowerdir),那么直接从镜像层读取文件,无额外品质损耗。
    文件同时设有于容器层和镜像层。那么会读取容器层的公文,因为容器层(upperdir)隐藏了镜像层(lowerdir)的同名文件。因而,也从没额外的习性损耗。
  有以下场景容器修改文件。
    先是次写二个文书。容器第三次写八个业已存在的文书,容器层不设有这几个文件。overlay/overlay2驱动执行copy-up操作,将文件从镜像层拷贝到容器层。然后容器修改容器层新拷贝的文件。
    然则,OverlayFS工作在文件等第而不是块品级。也正是说全体的OverlayFS的copy-up操作都会拷贝整个文件,即便文件丰富大但却只修改了一小部分,那在容器写质量上装有显明的熏陶。然而,有五个地点值得注意:
     ▷
copy-up操作只发生在第三回写文件时。后续的对同二个文件的写操作都以直接指向拷贝到容器层的那贰个新文件。
     ▷
OverlayFS只职业在两层中。那比AUFS要在多层镜像中寻找时品质要好。
    删去文件和目录。删除文件时,容器会在镜像层创设二个whiteout文件,而镜像层的文书并未去除。不过,whiteout文件会隐藏它。
    容器中删去2个目录,容器层会创制一个不透清热录。那和whiteout文件隐藏镜像层的文件类似。
    重命名目录。只有在源路线和指标路线都在顶层容器层时,才允许施行rename操作。不然,会再次回到EXDEV。
    由此,你的选取须要能够处理EXDEV,并且回滚操作,实施代表的“拷贝和删除”战略。

III. deleting files and directories
  • 去除文件时,upperdir会创设三个witheout文件,会隐藏lowerdir的文书(非删除);
  • 剔除目录时,upperdir会创造一个opaque diectory,隐藏lowerdir的目录;
III. deleting files and directories
  • 删去文件时,upperdir会创制三个witheout文件,会隐藏lowerdir的文件(非删除);
  • 除去目录时,upperdir会创建八个opaque diectory,隐藏lowerdir的目录;

在Docker中布署overlay/overlay二存款和储蓄驱动

  为了给Docker配置overlay存款和储蓄驱动,你的Docker host必须运维在Linux
kernel3.1八版本之上,而且加载了overlay内核驱动。对于overlay2驱动,kernel版本必须在4.0或上述。OverlayFS可以运作在大好些个Linux文件系统之上。可是,未来最提议在生产条件中使用ext肆。
  下边包车型地铁手续讲述了怎样在Docker host中布局使用OverlayFS。
  注意:在上马计划以前,若是你已经在行使Docker
daemon,并且有部分想保留的镜像,简易你push它们到Docker hub中。
    一) 假使Docker daemon正在运作,须求先甘休其运营。

$ systemctl stop docker.service

    二) 检查kernel版本,确认overlay的内核模块是不是加载。

$ uname -r

4.4.0-64-generic

$ lsmod | grep overlay

overlay

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

    三) 使用overlay/overlay二存储驱动来运营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"

    肆) 检查daemon是不是早已使用了overlay/overlay二存储驱动。

$ docker info

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

    注意输出结果彰显后端文件系统使用的是extfs。固然协理四种文件系统,不过生产环境中依然提议使用extfs(特别ext四)。

在Docker中配备overlay/overlay二存款和储蓄驱动

  为了给Docker配置overlay存款和储蓄驱动,你的Docker host必须运营在Linux
kernel三.1八版本之上,而且加载了overlay内核驱动。对于overlay二驱动,kernel版本必须在肆.0或以上。OverlayFS能够运作在大繁多Linux文件系统之上。然则,未来最提出在生产环境中使用ext四。
  上面包车型客车步骤讲述了哪些在Docker host中配置利用OverlayFS。
  注意:在上马布局以前,假若您曾经在行使Docker
daemon,并且有一部分想保留的镜像,简易你push它们到Docker hub中。
    1) 倘使Docker daemon正在周转,须求先停止其运营。

$ systemctl stop docker.service

    二) 检查kernel版本,确认overlay的内核模块是或不是加载。

$ uname -r

4.4.0-64-generic

$ lsmod | grep overlay

overlay

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

    三) 使用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/overlay二存款和储蓄驱动。

$ docker info

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

    注意输出结果显示后端文件系统使用的是extfs。尽管匡助三种文件系统,不过生产环境中只怕建议使用extfs(越发ext肆)。

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

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
  • 下载3个镜像:

$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驱动越来越快1些,大约料定比aufs和devicemapper更快,在少数意况下,恐怕比btrfs也越来越快。纵然如此,在行使overlay/overlay二存储驱动时,照旧要求小心以下部分地点:

  •   Page
    Caching,页缓存。OverlayFS协理页缓存共享,也正是说如若多少个容器访问同1个文本,能够共享二个或多少个页缓存选项。那使得overlay/overlay二驱动高效地利用了内部存款和储蓄器,是PaaS平台照旧其余高密度场景的叁个很好地选项。
  •   copy_up。和AuFS同样,在容器第壹遍修改文件时,OverlayFS都亟待推行copy-up操作,那会给写操作带来一些推迟——越发这么些要拷贝的文书十分大时。不过,1旦文件已经奉行了这些进化拷贝的操作后,全部继续对这一个文件的操作都只针对那份容器层的新拷贝而已。
    OverlayFS的copy_up操作比AuFS的copy_up操作要快。因为AUFS辅助比OverlayFS援救越来越多的层数,倘若急需在多层查找文件时,就大概引致相比大的推迟。
  •   Inode
    limits。使用overlay存款和储蓄驱动只怕引致过多的inode消耗,尤其是Docker
    host上镜头像和容器的数据拉长时。大批量的镜像,只怕繁多器皿启动与停止,,会快捷消耗掉该Docker
    host上的inode。overlay2存款和储蓄驱动不设有这一个难题。
      不幸的是,只幸而文件系统创制时钦定inode的个数。因而,能够设想将/var/lib/docker放在1个独门的设施文件系统中,恐怕在创设文件系统时内定inode个数。
    4858.com,  以下一些方式能够提供OverlayFS的品质。
  •   使用Solid State Devices(SSD)。
  •   使用数据卷。数据卷能进步越来越好的属性,因为其绕过存款和储蓄驱动,不会滋生超配、copy-on-write可能会产生的隐患。

    OverlayFS兼容性

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

  • open(二)。OverlayFS协助吃POSIX标准的3个子集。以copy-up操作为例,参加你的施用调用了fd一=open(“foo”,
    O_RDONLY) 和 fd2=open(“foo”,
    O_凯雷德DWLX570),你的使用期望fd一和fd二指向同叁个文书,可是,因为copy-up操作,会促成指向区别的文本。

  • rename(贰),那么些和日前提到AuFS1致。

    小结

      overlay/overlay2存款和储蓄驱动已经济体改成了Docker存款和储蓄驱动的首荐,并且质量优于AuFS和devicemapper。可是,他们也拉动了部分与其余文件系统的不包容性,如对open和rename操作的支撑。其它,overlay与overlay二相比,overlay贰协理了多层镜像,优化了inode使用。可是,使用那二种驱动时,需求专注你的Docker
    host的kernel版本。

OverlayFS和Docker性能

  ①般的话,overlay/overlay2驱动更加快1些,大致料定比aufs和devicemapper更快,在有些意况下,恐怕比btrfs也越来越快。就算如此,在使用overlay/overlay2存款和储蓄驱动时,依然须要留意以下1些下面:

  •   Page
    Caching,页缓存。OverlayFS帮忙页缓存共享,也正是说若是多个容器访问同二个文书,可以共享三个或四个页缓存选项。那使得overlay/overlay贰驱动高效地应用了内部存储器,是PaaS平台还是其余高密度场景的叁个很好地选项。
  •   copy_up。和AuFS同样,在容器第三次修改文件时,OverlayFS都急需实行copy-up操作,那会给写操作带来1些延迟——特别这一个要拷贝的文件非常大时。然而,壹旦文件已经推行了那个进化拷贝的操作后,全部继续对那几个文件的操作都只针对那份容器层的新拷贝而已。
    OverlayFS的copy_up操作比AuFS的copy_up操作要快。因为AUFS协助比OverlayFS援救更加多的层数,即便供给在多层查找文件时,就大概引致相比较大的推移。
  •   Inode
    limits。使用overlay存款和储蓄驱动大概引致过多的inode消耗,特别是Docker
    host上镜头像和容器的数额增加时。大批量的镜像,恐怕繁多容器启动和停止,,会急忙消耗掉该Docker
    host上的inode。overlay二存款和储蓄驱动不存在这几个标题。
      不幸的是,只可以在文件系统创建时内定inode的个数。由此,能够思量将/var/lib/docker放在3个独门的设备文件系统中,大概在创设文件系统时钦赐inode个数。
      以下部分艺术能够提供OverlayFS的质量。
  •   使用Solid State Devices(SSD)。
  •   使用数据卷。数据卷能提升更加好的属性,因为其绕过存款和储蓄驱动,不会引起超配、copy-on-write恐怕会招致的隐患。

    ### OverlayFS兼容性

      有以下两点OverlayFS和其余文件系统不太合营:

  • open(贰)。OverlayFS援助吃POSIX标准的一个子集。以copy-up操作为例,参预你的施用调用了fd1=open(“foo”,
    O_RDONLY) 和 fd2=open(“foo”,
    O_LX570DWTiggo),你的应用期望fd1和fd二指向同3个文书,可是,因为copy-up操作,会变成指向差别的公文。

  • rename(2),那几个和前边提到AuFS一致。

    小结

      overlay/overlay二存款和储蓄驱动已经化为了Docker存款和储蓄驱动的首荐,并且质量优于AuFS和devicemapper。但是,他们也带动了有的与别的文件系统的不兼容性,如对open和rename操作的帮助。别的,overlay与overlay贰相比较,overlay贰扶助了多层镜像,优化了inode使用。然则,使用那二种驱动时,须求留意你的Docker
    host的kernel版本。

更加多Docker相关教程见以下内容

Docker安装应用(CentOS
6.5_x64)
http://www.linuxidc.com/Linux/2014-07/104595.htm

Ubuntu 14.04安装Docker 
http://www.linuxidc.com/linux/2014-08/105656.htm

Ubuntu使用VNC运维基于Docker的桌面系统 
http://www.linuxidc.com/Linux/2015-08/121170.htm

Ali云CentOS 陆.伍 模板上安装 Docker
http://www.linuxidc.com/Linux/2014-11/109107.htm

Ubuntu 15.04下安装Docker 
http://www.linuxidc.com/Linux/2015-07/120444.htm

在Ubuntu Trusty 14.04 (LTS) (64-bit)安装Docker
http://www.linuxidc.com/Linux/2014-10/108184.htm

在 Ubuntu 一5.0四 上什么样设置Docker及主旨用法
http://www.linuxidc.com/Linux/2015-09/122885.htm

Ubuntu 1六.0四上Docker使用手记
http://www.linuxidc.com/Linux/2016-12/138490.htm

Docker
的详细介绍
:请点那里
Docker
的下载地址
:请点那里

正文永世更新链接地址:http://www.linuxidc.com/Linux/2017-03/141579.htm

4858.com 5

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有