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方式,每次提交最新的代码,用户访问的也是最新的。