1. 程式人生 > 其它 >docker儲存驅動詳解 OverlayFS

docker儲存驅動詳解 OverlayFS

docker支援的儲存驅動

Linux distribution Recommended storage drivers Alternative drivers
Docker Engine - Community on Ubuntu overlay2 or aufs (for Ubuntu 14.04 running on kernel 3.13) overlay¹, devicemapper², zfs, vfs
Docker Engine - Community on Debian overlay2 (Debian Stretch), aufs or devicemapper (older versions) overlay¹, vfs
Docker Engine - Community on CentOS overlay2 overlay¹, devicemapper², zfs, vfs
Docker Engine - Community on Fedora overlay2 overlay¹, devicemapper², zfs, vfs

overlay2已經是主流了

OverlayFS是現代聯合檔案系統與AUFS類似,不過更快並且實現更簡單,Docker提供了兩種OverlayFS驅動:overlay overlay2
overlay2對Inode的利用率更高,但是要求核心在4.0以上

配置儲存驅動

/etc/docker/daemon.json
{
  "storage-driver": "overlay2"
}
//verify
docker info

overlay2原理

OverlayFS疊加兩種目錄(lowerdir upperdir),展示為一個目錄,這些目錄叫做層,並提供一個統一的掛載點。合併的檢視通過merged目錄暴露出來。
overlay2最低支援128個lower層。

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目錄包含縮短的符號連結layer,主要是為了不超過mount引數長度。

$ 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 layer有個link檔案,內容為上面縮短的符號連結,diff目錄包含layer的內容

$ 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的layer和更高的layer,包含一個lower檔案,內容為他的lower layer,diff目錄包含他特有的內容,merge目錄包含
所有lower layer和自己的內容,work目錄是OverlayFs內部使用的

hide01 hide02