1. Manage data in Dockerdocker
默認狀況下,全部在容器內部建立的文件被存儲在一個可寫的容器層。這就意味着:安全
Docker有兩種方式將容器中的文件存儲到主機上,這樣的話即便容器中止了,文件依然被持久化下來。這兩種方式分別是:volumes和bind mounts。若是你是在Linux上運行Docker,那麼你還能夠使用tmpfs mount。性能
2. 選擇正確的掛載類型spa
不管你選擇哪一種掛載類型,數據看起來是同樣的。它以目錄或者容器的文件系統中的單個文件的形式暴露出來。blog
下面這幅圖能夠幫助咱們更好的理解 volumes 、 bind mounts 、 tmpfs mounts 三者的區別生命週期
3. 關於掛載類型進程
Volumes內存
Volumes由Docker建立並管理。你能夠用docker volume create命令顯式地建立一個volume,或者在容器或服務建立的時候建立一個volume。開發
當你建立了一個volume之後,它被存儲到Docker主機上的一個目錄下。當你掛載這個volume到一個容器的時候,這個目錄就是掛載到容器中的目錄。這種方式跟bind mounts很像,除了volumes被Docker管理並與主機的核心功能隔離之外。文檔
一個volume能夠同時掛載到多個容器中。當沒有一個運行中的容器使用這個volume的時候,這個volume仍然是可用的,而且不會被自動刪除。你能夠用docker volume prune命令刪除未使用的volumes。
當你掛載一個volume的時候,它多是被命名的或者匿名的。匿名的volumes在它首次被掛載到一個容器中的時候不會被指定一個明確的名字,所以Docker給它們一個隨機的名字,以保證它在Docker主機中是惟一的。關於名字,命名的和匿名的volumes在使用上是同樣的。
Volumes也支持volume驅動,能夠運行你存儲數據到遠程主機或雲上。
Bind mounts
與volumes相比,bind mounts有一些功能限制。當你使用bind mount的時候,主機上的一個文件或目錄被掛載到一個容器。這個文件或目錄關聯主機上的絕對路徑。這個文件或目錄不須要事先在Docker主機上存在,若是沒有則會自動在後臺建立。Bind mounts的性能很是好,但它依賴於主機的文件系統上有一個特定的目錄結構可用。若是你正在開發一個新的Docker應用,建議用volumes。你不能直接用Docker命令來直接管理bind mounts。
tmpfs mounts
一個tmpfs掛載不會持久化數據到磁盤,不管是在Docker主機上仍是在容器中。容器能夠在容器的生命週期中使用它來存儲非持久性狀態或敏感信息。例如,在內部,羣集服務使用tmpfs掛載來將祕鑰掛載到服務的容器中。
4. volumes最佳實踐
Volumes是在Docker容器和服務中保存數據的首選方式。使用volumes的一些場景:
5. bind mounts最佳實踐
通常而言,你應該儘量地用volumes。Bind mounts適用於下列情形:
6. tmpfs mounts最佳實踐
當你不想要數據持久化到主機或容器的時候,tmps mounts是最好的選擇。這多是出於安全緣由,或者是爲了在應用程序須要編寫大量非持久性狀態數據時保護容器的性能。
7. 文檔