VFS
vfs是接口的“原生”的實現,完全沒有使用聯合文件系統或者寫時複製技術
。
對於vfs要創建新層,需要對上一層進行“深度複製”。與其他存儲驅動程序相比,這會導致性能降低和磁盤上更多的空間使用。但是,它是健壯,穩定的,並且可以在每種環境中使用。
但並不建議在實際或者生產環境使用,但是對於需要進行簡單驗證的場景,或者需要測試Docker引擎的其他部件的場景,是很有價值的。對於在Docker中運行Docker的場景也很有用,要知道graphdriver嵌套起來,可能會讓你丈二和尚摸不着頭腦。
順便一提:Docker引擎開發者用來構建Docker自己所使用的Dockerfile,也是採用vfs來作爲裏邊Docker的graphdriver。
使用vfs存儲驅動程序配置Docker
-
停止Docker
systemctl stop docker
-
編輯/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無法啓動。
-
啓動Docker。
systemctl start docker
-
驗證守護程序正在使用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,對比結果可想而知