Docker是一款非常強大的容器化平臺,其中最鼓舞人心的特征就是分層 (Layering)。分層允許容器鏡像被組合在一起支持廣泛的應(yīng)用場景,它也允許我們快速帶出一組容器環(huán)境。在這篇文章中,我們討論一下Docker的分層傳輸。
在Docker中,每一個另外構(gòu)建的組件都作為一個層次來組合。容器都是只讀的,而且容器本身不存儲文件或數(shù)據(jù)。所有數(shù)據(jù)都保存在容器中的層次結(jié)構(gòu)中。
Layer 3 /----->File3 | Layer 2 /----->File2 | Layer 1 /----->File1
當(dāng)Docker發(fā)現(xiàn)多個鏡像間共享相同的層次結(jié)構(gòu),Docker不會再次復(fù)制該層,它只是新創(chuàng)建一個指向該層的鏈接。這個鏈接點可以被不同的鏡像所使用,這種方法減少了不必要文件系統(tǒng)的復(fù)制
Layer 3 Layer 3 /----->File3 /----->File3 | | Layer 2 Layer 2 /----->File2------>/----->File2 | | Layer 1 Layer 1 /----->File1 /----->File1
在這種情況下,兩個不同的容器可以使用相同的三層鏡像,在Linux中這類似于硬鏈接,它允許在文件系統(tǒng)中共享數(shù)據(jù),而不會浪費存儲空間。