docker系列—聊一聊存儲驅動VFS

VFS

vfs是接口的“原生”的實現,完全沒有使用聯合文件系統或者寫時複製技術

對於vfs要創建新層,需要對上一層進行“深度複製”。與其他存儲驅動程序相比,這會導致性能降低和磁盤上更多的空間使用。但是,它是健壯,穩定的,並且可以在每種環境中使用。

但並不建議在實際或者生產環境使用,但是對於需要進行簡單驗證的場景,或者需要測試Docker引擎的其他部件的場景,是很有價值的。對於在Docker中運行Docker的場景也很有用,要知道graphdriver嵌套起來,可能會讓你丈二和尚摸不着頭腦。

順便一提:Docker引擎開發者用來構建Docker自己所使用的Dockerfile,也是採用vfs來作爲裏邊Docker的graphdriver。

使用vfs存儲驅動程序配置Docker

  1. 停止Docker

    systemctl stop docker
    
  2. 編輯/etc/docker/daemon.json。如果尚不存在,請創建它。假設文件爲空,請添加以下內容。

    {
      "storage-driver": "vfs"
    }
    

    如果要設置控制VFS存儲驅動程序可以使用的最大大小size,請在storage-opts密鑰上設置選項。僅在Docker 17.12及更高版本中支持配額。

    {
      "storage-driver": "vfs",
      "storage-opts": ["size=256M"]
    }
    

    如果daemon.json文件包含格式錯誤的JSON,則Docker無法啓動。

  3. 啓動Docker。

    systemctl start docker
    
  4. 驗證守護程序正在使用vfs存儲驅動程序。使用docker info命令並查找,注意修改存儲方式後,之前的image將不可用。
    在這裏插入圖片描述
    Docker現在正在使用vfs存儲驅動程序。Docker自動創建了/var/lib/docker/vfs/目錄,其中包含運行容器所使用的所有層。

vfs存儲驅動程序如何工作

VFS不是一個聯合文件系統。相反,每個鏡像層和可寫容器層在Docker主機上表示爲/var/lib/docker/中的子目錄。union mount提供所有層的統一視圖。目錄名並不直接對應於層本身的id。

VFS不支持寫時複製(COW),因此每次創建新層時,它都是其父層的深層副本。這些層都位於下 /var/lib/docker/vfs/dir/。

鏡像和容器在磁盤上的構造

下面是pull了一個omcat鏡像
在這裏插入圖片描述
在這裏插入圖片描述
du -sh 查看佔用磁盤的大小,這也是使用vfs存儲驅動程序的缺點之一 。下圖是overlay2存儲驅動下的tomcat,對比結果可想而知
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章