docker的Data Volume(数据卷) 浅析

背景

最近自己写一个dockerfile基于一个基础的image,但是基于这个基础的image生成的容器里面有一层目录有些多余,我想把它删除掉。但是发现删除不了,报错为cannot remove XXX: Device or resource busy,原因就是因为这个image里面设置了挂载目录。这个容器的dockerfile 不知道去哪里了,后面还commit了一次,也不知道历史信息了,哎

解决

想着去解决这个问题就来了解docker的Data Volume。

解析Data Volume

数据卷(Data Volume)是一个经过特殊设计的目录,它将主机目录直接映射进容器。可以绕过联合文件系统(UFS),为一个或多个容器提供访问。

数据卷完全独立于容器的生存周期,创建之后不会根据容器的删除而删除。它的特性为以下
• 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中
• 数据卷存在于宿主机中,可宿主机与容器进行共享
• 数据卷可以在容器间共享和重用
• 可以对数据卷里的内容直接进行修改,修改会马上生效,无论是容器内操作还是本地操作
• 数据卷的变化不会影响镜像的更新(image中也不会包含数据卷的数据)
• 卷会一直存在,即使挂载数据卷的容器已经被删除

Data Volume相关的命令

删除容器并附带删除数据卷:

docker rm -v [container name]

查看所有的数据卷

docker volume ls

清除不需要的数据卷

docker volume prune

删除数据卷

docker volume rm 数据卷ID (需要在容器删之后才可以删除)

查看docker 容器的挂载

docker inspect container_name | grep Mounts -A 20

最终

最终也没有将挂载目录删除,而是有重新换了个目录。这也充分看出在创建image的时候还是需要使用dockerFile,而谨慎使用docker commit去基于已有的docker容器来创建image

你可能感兴趣的:(docker的Data Volume(数据卷) 浅析)