簡介

  OverlayFS是一種和AUFS很類似的文件系統(tǒng),與AUFS相比,OverlayFS有以下特性:
   1) 更簡單地設(shè)計;
   2) 從3.18開始,就進入了Linux內(nèi)核主線;
   3) 可能更快一些。
  因此,OverlayFS在Docker社區(qū)關(guān)注度提高很快,被很多人認為是AUFS的繼承者。就像宣稱的一樣,OverlayFS還很年輕。所以,在生成環(huán)境使用它時,還是需要更加當心。
  Docker的overlay存儲驅(qū)動利用了很多OverlayFS特性來構(gòu)建和管理鏡像與容器的磁盤結(jié)構(gòu)。
  自從Docker1.12起,Docker也支持overlay2存儲驅(qū)動,相比于overlay來說,overlay2在inode優(yōu)化上更加高效。但overlay2驅(qū)動只兼容Linux kernel4.0以上的版本。
  注意:自從OverlayFS加入kernel主線后,它在kernel模塊中的名稱就被從overlayfs改為overlay了。但是為了在本文中區(qū)別,我們使用OverlayFS代表整個文件系統(tǒng),而overlay/overlay2表示Docker的存儲驅(qū)動。

overlay和overlay2

OverlayFS(overlay)的鏡像分層與共享

  OverlayFS使用兩個目錄,把一個目錄置放于另一個之上,并且對外提供單個統(tǒng)一的視角。這兩個目錄通常被稱作層,這個分層的技術(shù)被稱作union mount。術(shù)語上,下層的目錄叫做lowerdir,上層的叫做upperdir。對外展示的統(tǒng)一視圖稱作merged。
  下圖展示了Docker鏡像和Docker容器是如何分層的。鏡像層就是lowerdir,容器層是upperdir。暴露在外的統(tǒng)一視圖就是所謂的merged。
  
  注意鏡像層和容器層是如何處理相同的文件的:容器層(upperdir)的文件是顯性的,會隱藏鏡像層(lowerdir)相同文件的存在。容器映射(merged)顯示出統(tǒng)一的視圖