搜尋
首頁運維Dockerdocker儲存驅動程式有哪些

docker儲存驅動程式有哪些

Jan 12, 2022 pm 02:20 PM
docker

docker儲存驅動程式有:1、AUFS,是檔案層級的儲存驅動程式;2、Overlay,是一種Union FS;3、Device mapper,是映射框架機制;4、Btrfs,也是檔案級存儲驅動;5、ZFS,一種全新的檔案系統。

docker儲存驅動程式有哪些

本文操作環境:Windows7系統、Docker 20.10.11版本、Dell G3電腦。

docker儲存驅動程式有哪些?Docker的五種儲存驅動原理及其應用場景

一、原理說明

Docker最開始採用AUFS作為檔案系統,也得益於AUFS分層的概念,實作了多個Container可以共享同一個image。但由於AUFS未併入Linux內核,且只支援Ubuntu,考慮到相容性問題,在Docker 0.7版本中引入了儲存驅動, 目前,Docker支援AUFS、Btrfs、Device mapper、OverlayFS、ZFS 五種儲存驅動程式。就如Docker官網上說的,沒有單一的驅動適合所有的應用場景,要根據不同的場景選擇合適的儲存驅動,才能有效的提升Docker的效能。如何選擇適合的儲存驅動,要先了解儲存驅動原理才能更好的判斷,本文介紹Docker五種儲存驅動原理詳解及應用場景及IO效能測試的比較。在講原理前,先講一下寫時複製和寫時分配兩個技術。

1、寫時複製(CoW)

所有驅動程式都用到的技術-寫時複製(CoW)。 CoW就是copy-on-write,表示只在需要寫入時才去複製,這個是針對已有檔案的修改場景。例如基於一個image啟動多個Container,如果為每個Container都去分配一個image一樣的檔案系統,那麼將會佔用大量的磁碟空間。而CoW技術可以讓所有的容器共享image的檔案系統,所有資料都從image中讀取,只有當要對檔案進行寫入操作時,才從image裡把要寫的檔案複製到自己的檔案系統進行修改。所以無論有多少個容器共享同一個image,所做的寫入操作都是對從image複製到自己的文件系統中的複本上進行,並不會修改image的源文件,且多個容器操作同一個文件,會在每個容器的文件系統裡產生一個複本,每個容器修改的都是自己的複本,互相隔離,彼此不影響。使用CoW可以有效的提高磁碟的利用率。

2、用時分配(allocate-on-demand)

#用時分配是用在原本沒有這個檔案的場景,只有在要新寫入一個檔案時才分配空間,這樣可以提高儲存資源的使用率。例如啟動一個容器,不會為這個容器預先分配一些磁碟空間,而是當有新檔案寫入時,才按需分配新空間。

二、五種儲存驅動基本原則

1、AUFS

AUFS(AnotherUnionFS )是一種Union FS,是檔案層級的儲存驅動程式。 AUFS能透明覆蓋一或多個現有檔案系統的層狀檔案系統,把多層合併成檔案系統的單層表示。 簡單來說就是支援將不同目錄掛載到同一個虛擬檔案系統下的檔案系統。這種檔案系統可以一層一層疊加修改檔案。無論底下有多少層都是唯讀的,只有最上層的檔案系統是可寫的。當需要修改一個檔案時,AUFS會建立該檔案的副本,使用CoW將檔案從唯讀層複製到可寫層進行修改,結果也保存在可寫層。在Docker中,底下的唯讀層就是image,可寫層就是Container。結構如下圖所示:

2、Overlay

Overlay是Linux核心3.18後支援的,也是一種Union FS,和AUFS的多層不同的是Overlay只有兩層:一個upper檔案系統和一個lower檔案系統,分別代表Docker的映像層和容器層 #。當需要修改一個檔案時,使用CoW將檔案從唯讀的lower複製到可寫入的upper進行修改,結果也保存在upper層。在Docker中,底下的唯讀層就是image,可寫層就是Container。結構如下圖所示:

3、Device mapper

Device mapper是Linux核心2.6.9後支援的,提供的一種從邏輯設備到實體設備的映射框架機制,在該機制下,用戶可以很方便的根據自己的需要製定實現存儲資源的管理策略。前面講的AUFS和OverlayFS都是檔案級存儲,而Device mapper是區塊級存儲,所有的操作都是直接對區塊進行操作,而不是檔案。 Device mapper驅動程式會先在區塊設備上建立資源池,然後在資源池上建立一個有檔案系統的基本設備,所有鏡像都是這個基本設備的快照,而容器則是鏡像的快照。所以在容器裡看到檔案系統是資源池上基本設備的檔案系統的快照,並不有為容器分配空間。當要寫入一個新檔案時,在容器的鏡像內為其分配新的區塊並寫入數據,這個叫做#用時分配。當要修改已有檔案時,再使用CoW為容器快照指派區塊空間,將要修改的資料複製到在容器快照中新的區塊再進行修改。 Device mapper 驅動預設會建立一個100G的檔案包含鏡像和容器。每一個容器被限制在10G大小的捲內,可以自己配置調整。架構如下圖所示:

4、Btrfs

Btrfs稱為下一代寫入時複製檔案系統,併入Linux內核,也是檔案級儲存驅動,但可以像Device mapper一直接操作底層設備。 Btrfs把檔案系統的一部分配置為一個完整的子檔案系統,稱之為subvolume 。採用 subvolume,一個大的檔案系統可以被劃分為多個子檔案系統,這些子檔案系統共享底層的裝置空間,在需要磁碟空間時便從底層裝置中分配,類似應用程式呼叫 malloc()分配記憶體一樣。為了靈活利用裝置空間,Btrfs 將磁碟空間劃分為多個chunk 。每個chunk可以使用不同的磁碟空間分配策略。例如某些chunk只存放metadata,某些chunk只存放資料。這種模型有很多優點,例如Btrfs支援動態添加設備。使用者在系統中增加新的磁碟之後,可以使用Btrfs的指令將該裝置加入檔案系統。 Btrfs把一個大的檔案系統當成一個資源池,配置成多個完整的子檔案系統,還可以往資源池裡加新的子檔案系統,而基礎鏡像則是子檔案系統的快照,每個子鏡像和容器都有自己的快照,這些快照都是subvolume的快照。

當寫入一個新檔案時,在容器的快照裡為其分配一個新的資料塊,檔案寫在這個空間裡,這個叫用時分配。而當要修改已有文件時,使用CoW複製分配一個新的原始數據和快照,在這個新分配的空間變更數據,變結束再更新相關的數據結構指向新子文件系統和快照,原來的原始數據和快照沒有指標指向,被覆蓋。

5、ZFS

ZFS 檔案系統是一個革命性的全新的檔案系統,它從根本上改變了檔案系統的管理方式,ZFS 完全拋棄了“捲管理”,不再創建虛擬的捲,而是把所有設備集中到一個存儲池中來進行管理,#用“存儲池”的概念來管理物理存儲空間。過去,檔案系統都是建構在實體設備之上的。為了管理這些實體設備,並為資料提供冗餘,「捲管理」的概念提供了一個單一設備的映像。而ZFS則是建立在虛擬的,被稱為「zpools」的儲存池之上。每個儲存池由若干虛擬設備(virtual devices,vdevs)組成。這些虛擬設備可以是原始磁碟,也可能是RAID1鏡像設備,或是非標準RAID等級的多磁碟組。於是zpool上的檔案系統可以使用這些虛擬設備的總儲存容量。

下面看一下在Docker裡ZFS的使用。首先從zpool分配一個ZFS檔案系統給鏡像的基礎層,而其他鏡像層則是這個ZFS檔案系統快照的克隆,快照是唯讀的,而克隆是可寫的,當容器啟動時則在鏡像的最頂層產生一個可寫層。如下圖所示:

當要寫一個新檔案時,使用按需分配,一個新的資料快從zpool裡生成,新的資料寫入這個區塊,而這個新空間存於容器(ZFS的克隆)裡。當要修改一個已存在的檔案時,使用寫入時複製,分配一個新空間並把原始資料複製到新空間完成修改。

三、儲存驅動對比及適應場景

#1、AUFS VS Overlay

       AUFS和Overlay都是聯合檔案系統,但AUFS有多層,而Overlay只有兩層,所以在寫寫時複製作業時,如果檔案比較大且存在比較低的層,則AUSF可能會慢一些。而且Overlay併入了linux kernel mainline,AUFS沒有,所以可能會比AUFS快。但Overlay還太年輕,要謹慎在生產使用。而AUFS做為docker的第一個儲存驅動,已經有很長的歷史,比較的穩定,且在大量的生產中實踐過,有較強的社區支持。目前開源的DC/OS指定使用Overlay。

2、Overlay VS Device mapper

       Overlay是檔案層級存儲,Device mapper是區塊級存儲,當文件特別大而修改的內容很小,Overlay不管修改的內容大小都會複製整個文件,對大文件進行修改顯示要比小文件要消耗更多的時間,而塊級無論是大文件還是小文件都只複製需要修改的區塊,並不是整個文件,在這種場景下,顯然device mapper要快一些。因為區塊級的是直接存取邏輯盤,適合IO密集的場景。而對於程式內部複雜,大並發但少IO的場景,Overlay的效能相對要強一些。

3、Device mapper VS Btrfs Driver VS ZFS

##       Device mapper和Btrfs都是直接對塊操作,都不支援共享存儲,表示當有多個容器讀同一個文件時,需要生活多個複本,所以這種存儲驅動不適合在高密度容器的PaaS平台上使用。而且在許多容器啟動停止的情況下可能會導致磁碟溢出,造成主機不能運作。 Device mapper不建議在生產使用,Btrfs在docker build可以很有效率。

       ZFS最初是為擁有大量記憶體的Salaris伺服器設計的,所以使用時對記憶體會有影響,適合記憶體大的環境。 ZFS的COW使碎片化問題更加嚴重,對於順序寫生成的大文件,如果以後隨機的對其中的一部分進行了更改,那麼這個文件在硬碟上的物理地址就變得不再連續,未來的順序讀會變成效能比較差。 ZFS支援多個容器共享一個快取區塊,適合PaaS和高密度的使用者場景。

推薦學習:《

docker教學

以上是docker儲存驅動程式有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
docker怎麼啟動容器docker怎麼啟動容器Apr 15, 2025 pm 12:27 PM

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

docker怎麼查看日誌docker怎麼查看日誌Apr 15, 2025 pm 12:24 PM

查看 Docker 日誌的方法包括:使用 docker logs 命令,例如:docker logs CONTAINER_NAME使用 docker exec 命令運行 /bin/sh 並查看日誌文件,例如:docker exec -it CONTAINER_NAME /bin/sh ; cat /var/log/CONTAINER_NAME.log使用 Docker Compose 的 docker-compose logs 命令,例如:docker-compose -f docker-com

docker容器名稱怎麼查docker容器名稱怎麼查Apr 15, 2025 pm 12:21 PM

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

docker怎麼創建容器docker怎麼創建容器Apr 15, 2025 pm 12:18 PM

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

docker怎麼退出容器docker怎麼退出容器Apr 15, 2025 pm 12:15 PM

退出 Docker 容器的四種方法:容器終端中使用 Ctrl D 快捷鍵容器終端中輸入 exit 命令宿主機終端中使用 docker stop <container_name> 命令宿主機終端中使用 docker kill <container_name> 命令(強制退出)

docker內的文件怎麼拷貝到外面docker內的文件怎麼拷貝到外面Apr 15, 2025 pm 12:12 PM

Docker 中將文件拷貝到外部主機的方法:使用 docker cp 命令:執行 docker cp [選項] <容器路徑> <主機路徑>。使用數據卷:在主機上創建目錄,在創建容器時使用 -v 參數掛載該目錄到容器內,實現文件雙向同步。

docker怎麼啟動mysqldocker怎麼啟動mysqlApr 15, 2025 pm 12:09 PM

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限

docker怎麼重啟docker怎麼重啟Apr 15, 2025 pm 12:06 PM

重啟 Docker 容器的方法:獲取容器 ID(docker ps);停止容器(docker stop <container_id>);啟動容器(docker start <container_id>);驗證重啟成功(docker ps)。其他方法:Docker Compose(docker-compose restart)或 Docker API(參考 Docker 文檔)。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。