- 云原生安全:攻防實踐與體系構建
- 劉文懋 江國龍 浦明 阮博男 葉曉虎
- 574字
- 2021-11-04 18:12:24
2.1.3 容器存儲
1.鏡像元數據
在Linux系統中Docker的數據默認存放在/var/lib/docker中,基于不同的系統又有不同的存儲驅動和不同的目錄結構。我們以OCI標準格式來了解鏡像存儲的內容,如圖2-2所示。

圖2-2 鏡像存儲目錄
鏡像每一層的ID是該文件內容的散列校驗值,作為該層的唯一標識。獲取鏡像后,會使用以下方式索引鏡像:首先讀取鏡像的manifests文件,根據manifests文件中config的sha256碼,得到鏡像config文件,遍歷manifests文件里面的所有層(layer),根據其sha256碼在本地查找,拼出完整的鏡像。
2.存儲驅動
在理想情況下,我們使用掛載卷來存儲高讀寫的目錄,很少將數據直接寫入容器的可寫層。但是,總有一些需要直接寫入容器可寫層的特殊需求,這時候就需要存儲驅動來作為容器和宿主機之間的媒介。Docker依靠驅動技術來管理鏡像與運行它們的容器間的存儲和交互。
目前,Docker支持overlay2、aufs、fuse-overlayfs、devicemapper、btrfs、zfs、vfs等存儲驅動[5]。沒有單一的存儲驅動可適合所有的應用場景,要根據不同的場景選擇合適的存儲驅動,這樣才能有效提高Docker的性能。
3.數據卷
通常,有狀態的容器都有數據持久化存儲的需求。前一節提到過,文件系統的改動都是發生在最上面的可讀寫層。在容器的生命周期內它是持續的,包括容器被停止后。但是,當容器被刪除后,該數據層也隨之被刪除了。
因此,Docker采用數據卷(Volume)的形式向容器提供持久化存儲。數據卷是Docker容器數據持久化存儲的首選機制。綁定掛載(Bind Mounts)依賴于主機的目錄結構,但數據卷是由Docker管理的。