1. 程式人生 > >【Docker 基礎知識】儲存驅動overlay和overlay2

【Docker 基礎知識】儲存驅動overlay和overlay2

OverlayFS是一個類似於AUFS 的現代聯合檔案系統,更快實現簡單。 

OverlayFS是核心提供的檔案系統,overlay和overlay2是docker的儲存驅動

設定儲存驅動方法

{
  "storage-driver": "overlay",
  "storage-opts": [
    "xxxxxxxx"
  ]
}

1 overlay介紹

1.1 overlay原理

OverlayFS將單個Linux主機上的兩個目錄合併成一個目錄。這些目錄被稱為層,統一過程被稱為聯合掛載。OverlayFS底層目錄稱為lowerdir, 高層目錄稱為upperdir。合併統一檢視稱為merged。

下圖分層圖,映象層是lowdir,容器層是upperdir,統一的檢視層是merged層


當映象層和容器層都有相同的檔案,使用容器層的檔案,overlay驅動使用兩層,這就意味著,如果是多層的映象就無法使用了,替代的方案是: 
映象層都在/var/lib/docker/overlay目錄下,通過硬連結的方式把下部的層關聯起來 
Docker1.10之後,映象層ID和/var/lib/docker中的目錄名不再一一對應。

  • lower-id是容器映象頂層的ID,Ove​​rlayFS lowerdir
  • upper包含與OverlayFS相對應的容器的讀寫層的內容upperdir。
  • merged目錄是lowerdir聯合裝載upperdir,包含正在執行的容器內的檔案系統的檢視。
  • work目錄是OverlayFS內部的。

通過mount檢視overlay檔案的掛載

[[email protected] fe4f8889e63ead3876bf0436d27af5ab3b122fa5891e3b8c88bf8927582d7cf2-init]# ls

lower-id  merged  upper  work

1.2檔案操作

  • 如果檔案在容器層不存在,則從lowdir中讀取
  • 只在容器層存在,則直接從容器中讀取改檔案
  • 檔案存在容器和映象層,容器層upperdir會覆蓋映象層lowdir中的檔案

修改

  • 首次寫入: 在upperdir中不存在,overlay和overlay2執行copy_up操作,把檔案從lowdir拷貝到upperdir,由於overlayfs是檔案級別的(即使檔案只有很少的一點修改,也會產生的copy_up的行為)


    copy_up操作只發生在檔案首次寫入,以後都是隻修改副本 
    overlayfs只適用兩層,因此效能很好,查詢搜尋都更快

  • 刪除檔案和目錄: 當檔案在容器被刪除時,在容器層(upperdir)建立whiteout檔案,映象層的檔案是不會被刪除的,因為他們是隻讀的,但without檔案 會阻止他們展現,當目錄在容器內被刪除時,在容器層(upperdir)一個不透明的目錄,這個和上面whiteout原理一樣,阻止使用者繼續訪問,即便映象層仍然存在

重新命名

這個系統呼叫只在源和目標都在頂層,否則會報 error (“cross-device link not permitted”)

效能問題

* 頁快取:overlayfs支援頁快取共享,也就是說如果多個容器訪問同一個檔案,可以共享同一個頁快取。這使得overlay/overlay2驅動高效地利用了記憶體 
* copy_up:aufs和overlayfs,由於第一次寫入都會導致copy_up,尤其是大檔案,會導致寫延遲,以後的寫入不會有問題。由於overlayfs層級 比aufs的多,所以ovelayfs的拷貝高於aufs 
* inode限制:使用overlay儲存驅動可能導致inode過度消耗,特別是當容器和映象很多的情況下,所以建議使用overlay2.

2 overlay2介紹

overlay2支援128層,對docker build和docker commit更好的效能支援 

相關推薦

Docker 基礎知識儲存驅動overlayoverlay2

OverlayFS是一個類似於AUFS 的現代聯合檔案系統,更快實現簡單。 OverlayFS是核心提供的檔案系統,overlay和overlay2是docker的儲存驅動設定儲存驅動方法{ "storage-driver": "overlay", "storage-

docker基礎知識docker坑問題彙總

1. Got starting container process caused "process_linux.go:301: running exec setns process for init caused \"exit status 40\"": unknown. from t

docker基礎知識docker學習知識

2. docker的基本概念和基本元件(Docker daemon, Docker client, registry映象庫, image映象,container容器),<img src="https://pic3.zhimg.com/v2-cf1ebe9e0012639

01月29日Python3 基礎知識

python01月29日【Python3 基礎知識】 5.4 參數匿名函數字典排序 5.5 生成式和生成器 5.6 裝飾器的作用 5.4 參數匿名函數字典排序 # *元組;**字典 def add(*args): total = 0 for i in args: t

01月24日Python3 基礎知識

python01月24日【Python3 基礎知識】 3.4 統計字符串 3.5 乘法口訣 3.4 統計字符串 # 統計字符串給類型符號個數 s = n = f = 0 st = input("隨意輸入字符:") for i in st: if i.isalpha(): s

01月22日Python3 基礎知識

python01月22日【Python3 基礎知識】 2.4 計算器 2.5 tuple操作 2.6 dict 2.7 其他常用操作 2.4 計算器 def add(string): total = 0 numbers = [] numbers += string.spl

01月19日Python3 基礎知識

python2.1 數據類型 2.2 字符串 2.3 list操作 2.1 數據類型 # Ptyhon運算符 ‘‘‘ 數字運算符: + - * / % 關系運算符: a == b a>b a<b a!=b >= <= 賦值運算符: a = b += -= *=

01月26日Python3 基礎知識

python01月26日【Python3 基礎知識】 5.1 九宮格 5.2 函數入門 5.3 判斷某天為某年的第幾天 5.1 九宮格 import random x = 0 l = [1,2,3,4,5,6,7,8,9] print("*************") while len(l) !

01月23日Python3 基礎知識

python01月23日【Python3 基礎知識】 3.1 if/while/for 3.2 解決數學難題 3.3 Python實例 3.1 if/while/for ‘‘‘ # if 判斷條件: 執行語句 elif 判斷條件: 執行語句 else: 執行語句 # whi

01月25日Python3 基礎知識

python01月25日【Python3 基礎知識】 4.1 讀寫文件 4.2 文件方法 4.3 python2的亂碼問題 4.4 python對passwd文件進行排序 4.1 讀寫文件 訪問 模式 說 明 r 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。

01月18日Python3 基礎知識

python1.1 Python的安裝1.2 pycharm安裝1.3 pycharm快捷鍵1.4 pycharm其他設置 1.1 Python的安裝 Python的重要性 python 流行程度 近幾年內已經擠進前五名,慢慢已經成為一個開發者或運維必須掌握的一門語言 隨著現在運維自動化,雲計算,虛擬化,機

Python基礎知識基本數據類型:數字、字符串、列表、元組、字典、集合

tuple 位置 環境 htm 邏輯 python3 修改 yield 啟動 1.查看Python版本 python -V 2.Windows系統下使用命令行設置環境變量:path=%path%;D:\Python 3.幾個重要的Python環境變量 PYTHONPA

LTE基礎知識SGLTE, SVLTE, CSFB, VoLTE

本文轉載自:https://blog.csdn.net/henryghx/article/details/18416405 4G網路下實現語音通話功能的技術共有三種——VoLTE、SGLTE(GSM /LTE同步併發)和CSFB(電路域回落)。簡單來說,VoLTE就是語音資料都在4G通道內完成;SGLTE是

電腦基礎知識http協議狀態碼記錄

HTTP狀態碼(HTTP Status Code) 一些常見的狀態碼為: 200 - 伺服器成功返回網頁 404 - 請求的網頁不存在 503 - 服務不可用 所有狀態解釋:點選檢視 1xx(臨時響應) 表示臨時響應並需要請求者繼續執行操作的狀態程式碼。 程式碼

docker基礎:Aufs儲存驅動設定

本文用於記錄ubuntu 17.10下docker 17.12.1-ce版本下overlay2的設定到aufs的方法。在Ubuntu 16.04以及更新的版本中,Linux核心引入了OverlayFS的支援,而且Docker CE也開始使用overlay2作為預設的儲存驅動,

Unity基礎知識c#程式碼向(持續更新)

1.協同函式 是什麼? 它是一種類似Update的更新方案,可以被掛起,它不是執行緒,也不是非同步,它是在主執行緒中執行,並且可以被新增和移除。 能做什麼? (1)延時執行程式碼。 (2)等待某個操作再執行。 2.值和引用型別的區別 共同點:都是在託管堆上。 不同點:值型

Java基礎知識IO流 詳解

1.概念 (1)io流用來處理裝置之間的資料傳輸; (2)Java對資料的操作的操作是通過流的方式; (3)Java用於操作流的物件都在IO包; (4)io流按操作資料分為兩種:位元組流和字元流; (5)io流按流向分為:輸入流、輸出流 Java流類

LTE基礎知識SGLTE, SVLTE, CSFB, VoLTE

4G網路下實現語音通話功能的技術共有三種——VoLTE、SGLTE(GSM /LTE同步併發)和CSFB(電路域回落)。簡單來說,VoLTE就是語音資料都在4G通道內完成;SGLTE是語音走2G通道、資料走4G通道;CSFB是指手機平時在4G通道中待機,當需要撥打或接聽電話

Android基礎知識使用HttpHttpClient上傳檔案

public class UploadThread extends Thread{ private String fileName; private String url; public UploadThread(String fileName,String url){ this.fileName

Android基礎知識使用ViewFlipper實現頁面左右滑動

說到android的左右滑動效果我們可以說是在每個應用上面都可以看到這樣的效果,不管是微博,還是QQ等。實現左右滑動的方式很多,有ViewPaer(不過這個和需要android-support-v4.jar的支援),自定義實現Viewgroup,gallery等都可以達到這