繼續(xù)看docker的devicemapper(一種存儲(chǔ)驅(qū)動(dòng)民鼓,而Device Mapper是內(nèi)核的一種塊設(shè)備映射框架),docker默認(rèn)使用的是loop-lvm凑懂,初始化時(shí)創(chuàng)建了兩個(gè)比較大的稀疏文件(100GB的data和2GB的metadata盒齿,實(shí)際使用多少占用多少)成福,并使用losetup命令將這兩個(gè)文件"attach/mount"為兩個(gè)loop設(shè)備(把文件映射為兩個(gè)偽設(shè)備芳肌,雖然是偽設(shè)備灵再,但是可以像普通塊設(shè)備一樣,對(duì)其進(jìn)行格式化想要的文件系統(tǒng)亿笤,比如xfs檬嘀,奇幻吧,loop這個(gè)詞就是這樣來(lái)的)责嚷,然后基于這兩個(gè)loop偽設(shè)備創(chuàng)建100GB大小的thin-pool(又映射了一層,這個(gè)時(shí)候用到了linux內(nèi)核提供的dm機(jī)制掂铐,可以使用dmsetup info命令查看)罕拂,基于這個(gè)thin-pool揍异,每啟動(dòng)一個(gè)容器就從100GB里面分出來(lái)10GB空間給該容器,擦爆班,整個(gè)來(lái)龍去脈終于搞懂了衷掷。
loop-lvm為默認(rèn),安裝方便柿菩,只用于測(cè)試環(huán)境(使用docker info可以看到警告戚嗅,不能用于生產(chǎn)環(huán)境,笑枢舶,我們生產(chǎn)環(huán)境就是用的默認(rèn)的懦胞,不過(guò)一個(gè)vm只有一個(gè)容器,可能沒(méi)有暴露問(wèn)題凉泄,但是性能還是差一些的)躏尉,基于稀疏文件不僅讀寫性能差,也沒(méi)有直接使用"塊設(shè)備"穩(wěn)定后众,于是devicemapper驅(qū)動(dòng)程序還有另外一種方式胀糜,direct-lvm,準(zhǔn)確說(shuō)蒂誉,這個(gè)才是真正的lvm教藻,配置方式和配置lvm的方式一樣的(比較繁瑣和麻煩),當(dāng)然docker也提供了工具右锨。另外括堤,還看了docker的另外一個(gè)存儲(chǔ)driver,overlay(最新的為overlay2陡蝇,它也是分層的痊臭,不過(guò)只有兩層,鏡像層和容器層登夫,aufs是很多層广匙,devicemapper沒(méi)有分層的概念,而是快照恼策,不過(guò)快照好像也是分層的鸦致,前兩者是基于文件系統(tǒng)的,后者也是基于塊設(shè)備)涣楷,可以通