天天看點

linux核心的overlayfs,docker底層原理————overlayFS介紹與實踐

linux核心的overlayfs,docker底層原理————overlayFS介紹與實踐

8種機械鍵盤軸體對比

本人程式員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎麼選?

概述

在docker底層原理的學習過程中,接觸到了UnionFS的概念。

UnionFS,顧名思義,是聯合檔案系統的意思。那怎麼個聯合法呢?舉個簡單的例子:

假設,我們有兩個檔案夾A和檔案夾B,A檔案夾下有檔案a1,a2,a3,B檔案夾下有檔案b1,b2,b3。

我們通過建立一個檔案夾C,并且使用UnionFS,使得我們可以再C檔案夾下可以直接通路a1,a2,a3,b1,b2,b3。

這樣我們就把A檔案夾和B檔案夾聯合起來了。

當然,在實際的實作過程中,概念會更多。

UnionFS的實作是比較多的,目前docker中使用的UnionFS的實作是overlay2,而我在網上找到的相關資料并不多,

處于好奇,專門對其進行了一些實際操作,并記錄下來。

簡介

overlayFS允許一個可讀寫的目錄覆寫在多個隻讀的目錄之上,這些目錄就構成了多個層(layer),而當我們在聯合起來的目錄中工作的時候,

我們所有的寫入操作最終都進入了最上層的讀寫層目錄中,這一點我後續會通過指令展示。

overlayFS與其他的unionFS的實作最終要的不同在于,當一個檔案打開之後,所有的操作都直接和底層的檔案系統打交道,這樣可以保證操作的

性能。

在Linux kernel 3.18之後,overlayFS已經內建到核心中去了。我們在該版本之後的Linux核心中,不需要安裝,就可以開始使用overlayFS了。

使用

可讀寫的聯合檔案系統

我們使用如下指令來挂在一個overlay檔案系統

mount -t overlay overlay -o lowerdir=/lower,upperdir=/upper,workdir=/work /merged

其中,lowerdir的值可以是一些的檔案夾清單,使用:分開,這些事隻讀層。

merged檔案夾是最終聯合起來的檔案系統,我們可以在merged檔案夾中通路所有lowerdir和upperdir中的内容

在merged檔案夾所做的所有修改,最終都會存儲到upperdir目錄中

workdir指定的目錄需要和upperdir位于同一目錄中

檔案的覆寫順序,upperdir目錄擁有最高覆寫權限,lowerdir按照mount時從左到右的順序,權重依次降低,左邊的覆寫右邊的同名檔案或者檔案夾。

注意,覆寫僅僅在mount時按照此順序,一旦mount成功後,按照檔案出現的早晚覆寫,出現早的會屏蔽出現晚的同名檔案。除非修改是在merged目錄中進行。

開機自動挂載

在/etc/fstab中實作自動挂載的格式如下,本人暫未實踐

overlay /merged overlay noauto,x-systemd.automount,lowerdir=/lower,upperdir=/upper,workdir=/work 0 0

隻讀聯合檔案系統

mount -t overlay overlay -o lowerdir=/lower1:/lower2 /merged

overlayFS相關示範

linux核心的overlayfs,docker底層原理————overlayFS介紹與實踐
linux核心的overlayfs,docker底層原理————overlayFS介紹與實踐
linux核心的overlayfs,docker底層原理————overlayFS介紹與實踐
linux核心的overlayfs,docker底層原理————overlayFS介紹與實踐
linux核心的overlayfs,docker底層原理————overlayFS介紹與實踐

總結

overlayFS可以在多種應用場合中使用,我們這裡關注在docker中的使用方式。

在docker中個,多個鏡像可以看做是多個lowerdir,隻讀層,當我們啟動一個容器的時候,使用overlayFS将多個鏡像

聯合挂載到一個目錄,并使得容器中可以對目錄中的檔案進行讀寫操作,但讀寫操作僅僅會影響到目前容器的upperdir和

目前目錄,并不會影響到鏡像中的資料。

參考連結