?
このドキュメントでは、 php中國語ネットマニュアル リリース
可以將數(shù)據(jù)存儲在容器的可寫層中,但有一些缺點:
當容器不再運行時,數(shù)據(jù)將不會持續(xù)存在,并且如果其他進程需要數(shù)據(jù),則很難從容器中獲取數(shù)據(jù)。
容器的可寫層緊密耦合到容器運行的主機。您無法輕松地將數(shù)據(jù)移到其他地方。
寫入容器的可寫層需要存儲驅動程序來管理文件系統(tǒng)。存儲驅動程序使用Linux內核提供聯(lián)合文件系統(tǒng)。與使用數(shù)據(jù)體積直接寫入主機文件系統(tǒng)。
Docker提供了三種不同的方式將數(shù)據(jù)從Docker主機裝載到容器中:卷,綁定掛載或tmpfs
卷。如有疑問,卷幾乎總是正確的選擇。請繼續(xù)閱讀以獲取更多關于將數(shù)據(jù)安裝到容器中的機制的信息。
無論您選擇使用哪種類型的掛載,容器中的數(shù)據(jù)看起來都是一樣的。它被公開為容器文件系統(tǒng)中的目錄或單個文件。
一個簡單的方法來顯示卷之間的差異,綁定掛載和tmpfs
掛載是考慮數(shù)據(jù)在Docker主機上的位置。
Volumes存儲在由Docker管理的主機文件系統(tǒng)的一部分中(/var/lib/docker/volumes/
在Linux上)。非Docker進程不應該修改這部分文件系統(tǒng)。卷是在Docker中保留數(shù)據(jù)的最佳方式。
綁定安裝可以存儲在主機系統(tǒng)的任何位置。他們甚至可能是重要的系統(tǒng)文件或目錄。Docker主機或Docker容器上的非Docker進程可以隨時修改它們。
tmpfs
裝載僅存儲在主機系統(tǒng)的內存中,而不會寫入主機系統(tǒng)的文件系統(tǒng)。有關裝載類型的更多詳細信息
Volumes:由Docker創(chuàng)建和管理。您可以使用該docker volume create
命令顯式創(chuàng)建一個卷,或者在創(chuàng)建容器或服務期間Docker可以創(chuàng)建一個卷。
創(chuàng)建卷時,它將存儲在Docker主機的一個目錄中。將卷裝入容器時,此目錄是裝入容器的內容。這與綁定掛載的工作方式類似,區(qū)別在于卷由Docker管理,并與主機的核心功能隔離。
給定的體積可以同時安裝到多個容器中。當沒有正在運行的容器正在使用卷時,該卷仍然可用于Docker,并且不會自動刪除。您可以使用docker volume prune
刪除未使用的卷。
在安裝卷時,可能會命名或匿名。首次將匿名卷掛載到容器時,匿名卷沒有被賦予明確的名稱,因此Docker會為它們提供一個隨機名稱,該名稱在給定的Docker主機中保證是唯一的。除名稱外,命名和匿名卷的行為方式相同。
卷還支持使用卷驅動程序,這些卷驅動程序可讓您將數(shù)據(jù)存儲在遠程主機或云提供程序中,以及其他可能性。
綁定裝載:自Docker早期開始提供。與卷相比,綁定安裝具有有限的功能。當您使用綁定掛載時,主機上的文件或目錄被掛載到容器中。文件或目錄由主機上的完整路徑引用。該文件或目錄不需要已經(jīng)存在于Docker主機上。如果它尚不存在,它會根據(jù)需求創(chuàng)建。綁定掛載非常高效,但它們依賴于具有特定目錄結構的主機的文件系統(tǒng)。如果您正在開發(fā)新的Docker應用程序,請考慮使用命名卷。您不能使用Docker CLI命令直接管理綁定掛載。 警告:無論好壞,使用綁定掛載的一個副作用是您可以通過容器中運行的進程更改主機文件系統(tǒng),包括創(chuàng)建,修改或刪除重要的系統(tǒng)文件或目錄。這是一個強大的能力,可能會對安全產生影響,包括影響主機系統(tǒng)上的非Docker進程。
tmpfs掛載:tmpfs
在Docker主機上或容器中,掛載不會永久保存在磁盤上。它可以在容器的生命周期內由容器使用,以存儲非持久狀態(tài)或敏感信息。例如,在內部,群集服務使用tmpfs
掛載將秘密裝入服務的容器中。
使用-v
or --volume
標志可將綁定掛載和卷掛載到容器中,但每種語法的語法稍有不同。對于tmpfs
坐騎,您可以使用該--tmpfs
標志。但是,在Docker 17.06及更高版本中,我們建議將--mount
容器和服務的標志用于綁定掛載,卷或tmpfs
掛載,因為語法更清晰。
volumes是在Docker容器和服務中保持數(shù)據(jù)的首選方式。volumes
的一些用例包括:
在多個運行容器之間共享數(shù)據(jù)。如果您沒有明確創(chuàng)建它,則會在第一次將其裝入容器時創(chuàng)建volumes。當該容器停止或被移除時,該volumes仍然存在。多個容器可以同時安裝相同的卷,無論是讀寫還是只讀。僅當您明確刪除volumes時才會刪除volumes。
當不能保證Docker主機具有給定的目錄或文件結構時。卷幫助您將Docker主機的配置與容器運行時分離開來。
當您想要將容器的數(shù)據(jù)存儲在遠程主機或云提供商上而不是本地時。
當需要備份,還原或將數(shù)據(jù)從一臺Docker主機遷移到另一臺時,卷是更好的選擇。您可以使用卷停止容器,然后備份卷的目錄(如/var/lib/docker/volumes/<volume-name>
)。
通常,您應該在可能的情況下使用volumes。綁定掛載適用于以下類型的用例:
將配置文件從主機共享到容器。這就是Docker默認情況下通過掛載向容器提供dns解析的方式。/etc/resolv.conf
從主機進入每個容器。
在Docker主機上的開發(fā)環(huán)境和容器之間共享源代碼或構建構件。例如,您可以掛載一個Maventarget/
目錄到容器中,每次在Docker主機上構建Maven項目時,容器都可以訪問重建的工件。
如果您以這種方式使用Docker進行開發(fā),那么生產Dockerfile將直接將生產準備好的工件復制到映像中,而不是依賴綁定掛載。
當Docker主機的文件或目錄結構保證與容器需要的綁定安裝一致tmpfs
時。對于不希望數(shù)據(jù)保存在主機上的情況,最好使用tmpfs安裝掛載的良好用例,或者在容器內。這可能出于安全原因,或者在應用程序需要編寫大量非持久狀態(tài)數(shù)據(jù)時保護容器的性能。使用綁定掛載或卷的提示如果使用綁定掛載或卷,請記住以下幾點:
如果容器的映像在裝入點包含數(shù)據(jù),則該數(shù)據(jù)將傳播到綁定裝入或卷。這是預先填充Docker主機需要的數(shù)據(jù)(在綁定掛載的情況下)或另一個容器需要(對于卷的情況)的好方法。
如果您將綁定掛載或卷掛載到已經(jīng)寫入文件或目錄的容器中的某個目錄中,則這些文件或目錄會被掛載遮擋,就像您將文件保存到/mnt
Linux主機中一樣,然后掛載USB開車進入/mnt
。/mnt
在USB驅動器卸下之前,內容將被USB驅動器的內容遮蓋。接下來的步驟為
詳細了解volumes。
了解有關綁定掛載的更多信息。
了解關于tmpfs裝載的更多信息。
了解更多關于存儲驅動程序,它們與綁定掛載或卷無關,但允許您將數(shù)據(jù)存儲在容器的可寫層中。