Docker存儲原理是指Docker容器在創(chuàng)建和運行時,所使用的文件系統(tǒng)及其存儲方式。在Docker中,所有的文件系統(tǒng)都是基于鏡像(Image)來創(chuàng)建的。
Docker鏡像是由多個鏡像層(Layer)疊加在一起形成的,每個鏡像層都是只讀的, 因此,當需要在一個Docker容器中寫入數(shù)據(jù)時,必須使用另一種特殊的鏡像層——寫入層(Write Layer)。
寫入層是一種可寫的鏡像層,也稱其為容器層(Container Layer),其用來存儲容器運行時所寫入的數(shù)據(jù),因此被稱為容器層。
當我們構(gòu)建Docker容器時,實際上是從鏡像創(chuàng)建了一個容器層,并在容器層中添加了一些具有特定意義的目錄和文件, 例如:/etc、/tmp等。這些目錄和文件可以在容器啟動時運行,并將其中的數(shù)據(jù)存儲到寫入層中。
因此,當容器運行時,寫入層就會存儲容器所寫入的數(shù)據(jù),該數(shù)據(jù)會在容器停止后仍然保留在容器層中。
值得注意的是,容器創(chuàng)建時,寫入層是空的,當容器修改文件時,這些文件會被寫入到寫入層中, 并覆蓋原文件系統(tǒng)中的文件。如果容器被刪除,則其關(guān)聯(lián)的寫入層數(shù)據(jù)也將被刪除。
最后,需要注意的是,為了避免寫入層的數(shù)據(jù)臃腫,當一個文件被寫入到寫入層時,Docker會創(chuàng)建一個指向原始鏡像層的符號鏈接, 以便只需存儲修改的部分。因此,在構(gòu)建Docker鏡像時,我們需要避免在鏡像層上添加不必要的文件和目錄。