Docker管理宿主機文件系統的一部分(/var/lib/docker/volumes)。保存數據的最佳方式。html
使用場景:將容器中的數據持久化到宿主機,好比容器是mysql,容器重啓後就沒數據了,此時須要保存到宿主機上。mysql
將宿主機上的任意位置的文件或者目錄掛載到容器中。nginx
使用場景:容器使用一些宿主機上的文件或目錄。好比zabbix agent 他須要採集宿主機上的proc目錄對其進行監控。web
掛載存儲在主機系統的內存中,而不會寫入主機的文件系統。若是不但願將數據持久化到任何位置,可使用tmpfs,同時避免寫入容器可寫層,以提升性能。sql
使用較少。docker
注意:也可使用-v的方式,是老的方式。數據庫
docker run -d --name lnmp_web03 -p8889:80 -v nginx_root:/usr/share/nginx/html nginx性能
修改主頁網站
查看主頁spa
直接修改/var/lib/docker/volumes/nginx_root/_data數據,就是修改的容器的數據,當容器掛掉後,咱們從新再啓動一個新的容器便可。這就是volume的好處啦。
bind方式和volume不一樣之處是:bind方式是直接將宿主機上的某個目錄做爲源。此目錄必須存在,否則會報錯。
注意:
一、若是源文件/目錄沒有存在,不會自動建立,會拋出錯誤。
二、若是掛載目標在容器中非空目錄,則改目錄現有內容將被隱藏。
三、使用另一種方式使用bind
docker run -d --name lnmp_ggg -p8889:80 -v /mnt:/usr/share/nginx/html nginx
容器裏面原本是有內容的,掛載源文件後,會被覆蓋,現有內容隱藏起來。
總結:
volume適應於多個容器共享數據,方便容器數據持久化!好比Mysql數據庫進行數據持久化。
Bind Mounts適應於宿主機和容器共享文件!好比一個網站要常常更新,可使用Bind方式,每次提交最新的代碼,用戶訪問的也是最新的。