一、简介
1、为什么用数据卷
①宿主机无法直接访问容器中的文件
②容器中的文件没有持久化,导致容器删除后,文件数据也随之消失
③容器之间也无法直接访问互相的文件
④为解决这些问题,docker加入了数据卷(volumes)机制,能很好解决上面问题
⑤数据卷实现了容器与主机之间、容器与容器之间共享文件
⑥数据卷实现了容器中数据的持久化
⑦通过数据卷可以将容器中的数据备份、迁移、恢复等
2、数据卷的特点
①数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的
②数据卷可以目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换
③容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中
④容器对数据卷的修改是实时进行的
⑤数据卷的变化不会影响镜像的更新,数据卷是独立于联合文件系统,镜像是基于联合文件系统,镜像与数据卷之间不会有相互影响
二、Docker数据卷管理
1、Docker挂载容器数据卷的三种方式
①bind mounts:将宿主机上的一个文件或目录被挂载到容器上
②volumes:由Docker创建和管理,使用docker volume命令管理
③tmpfs mounts:tmpfs是一种基于内存的临时文件系统,tmpfs mounts数据不会存储在磁盘上
![]()
2、bind mounts方式挂载数据卷
①利用docker run/create的参数为容器挂载数据卷
②方式一:< --volume(-v) 宿主机文件或文件夹路径:容器中的文件或者文件夹路径 >
③方式二:< --mount type=bind, src=宿主机文件或文件夹路径(src指定的文件和路径必须提前创建或存在), dst=容器中的文件或者文件夹路径 >
3、volumes方式挂载数据卷
①利用docker run/create为容器挂载数据卷
②方式一:< --volume(-v) VOLUME-NAME:容器中的文件或者文件夹路径 >
②方式二:< --mount type=volume, src=VOLUME-NAME, dst=容器中的文件或者文件夹路径 >
③volume对象管理
docker volume:命令管理volume数据卷对象
docker volume create:创建数据卷对象
docker volume inspect:查看数据卷详细信息
docker volume ls:查看已创建的数据卷对象
docker volume prune:删除未被使用的数据卷对象
docker volume rm:删除一个或多个数据卷对象
4、tmpfs mount方式挂载数据卷
①利用docker run/create为容器挂载数据卷
②用法:< --mount type=tmpfs, dst=PATH >
5、共享其他容器的数据卷-数据卷容器
①利用docker run/create的--volumes-from参数指定数据卷容器
②用法:< docker run/create --volumes-from CONTAINER >
二、Docker数据卷注意事项
1、Docker的数据卷更多会是使用volumes方式来进行使用
2、如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中
3、如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据,如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉
4、这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容,掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果