四、Docker数据管理

1、挂载类型

一、volumes

Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。html

使用场景:将容器中的数据持久化到宿主机,好比容器是mysql,容器重启后就没数据了,此时须要保存到宿主机上。mysql

 

二、bind mounts

将宿主机上的任意位置的文件或者目录挂载到容器中。nginx

使用场景:容器使用一些宿主机上的文件或目录。好比zabbix agent 他须要采集宿主机上的proc目录对其进行监控。web

三、tmpfs

挂载存储在主机系统的内存中,而不会写入主机的文件系统。若是不但愿将数据持久化到任何位置,可使用tmpfs,同时避免写入容器可写层,以提升性能。sql

使用较少。docker

 

 

 2、volumes

一、建立和查看volume

 

二、使用vloume

 注意:也可使用-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的好处啦。

 

3、bind mounts

bind方式和volume不一样之处是:bind方式是直接将宿主机上的某个目录做为源。此目录必须存在,否则会报错。

一、bind方式建立容器

 

 注意:

一、若是源文件/目录没有存在,不会自动建立,会抛出错误。

二、若是挂载目标在容器中非空目录,则改目录现有内容将被隐藏。

三、使用另一种方式使用bind

 docker run -d --name lnmp_ggg -p8889:80 -v /mnt:/usr/share/nginx/html nginx

二、查看容器

容器里面原本是有内容的,挂载源文件后,会被覆盖,现有内容隐藏起来。

 

三、编写主页

 

四、验证

五、查看源目录 

 

4、总结

一、volume特色

  • 多个运行容器之间共享数据。
  • 当容器中止或被移除时,该卷依然存在。
  • 多个容器能够同时挂载相同的卷。
  • 当明确删除卷时,卷才会被删除。
  • 将容器的数据存储在远程主机或其余存储上。
  • 将数据从一台dokcer迁移到另一台时,先中止容器,而后备份卷的目录(/var/lib/docker/volumes)
  • volume最大的特色:容器初始化时,容器的某个目录映射到宿主机,也就是把容器的数据持久化到volume上。container =>docker host
  • 使用命令建立一个volume后,系统会在/var/lib/docker/volume/下面生成一个volume,而后容器的数据会映射到宿主机的volume下。主要用于容器数据的持久化。

二、Bind Mounts特色

  • 从主机共享配置文件到容器,默认状况下,挂载主机resolv.conf到每一个容器,提供DNS解析。
  • 在Docker主机上的开发环境和容器之间共享源代码。例如,能够将Maven target目录挂载到容器中,每次在Docker上构建Maven项目时,容器均可以访问构建最新的项目包。
  • 当Docker主机的文件或目录结构保证与容器所需的绑定挂载一致时。
  • Bind的最大特色是:容器初始化时,宿主机上的某个目录映射到容器的dst目录,而且dst目录本来有内容也会被覆盖掉,本质是宿主机的volume映射到容器。docker host=>container
  • 将宿主机的某个文件目录映射到docker容器,若是容器对应目录不为空,则会被宿主机目录下的内容覆盖掉!

总结:

volume适应于多个容器共享数据,方便容器数据持久化!好比Mysql数据库进行数据持久化。

Bind Mounts适应于宿主机和容器共享文件!好比一个网站要常常更新,可使用Bind方式,每次提交最新的代码,用户访问的也是最新的。

相关文章
相关标签/搜索