Docker数据管理
docker数据管理分为2中模式
- 1 数据卷
- 2 数据卷容器
数据卷
供容器读写的特殊目录,容器被销毁后宿主机上被挂载目录中的文件还是存在的。尽量挂载目录,不要挂载文件,在早期的docker版本中如果修改了挂载的文件,文件inode号有可能会发生改变
在宿主机上创建挂载目录
mkdir /opt/data
docker run -it --rm -v /opt/data:/opt centos bash
- -v参数 挂载参数
- /opt/data 宿主机上/opt/data目录
- /opt 挂载到容器/opt目录
把宿主机/opt/data目录挂载到容器/opt下,这样在宿主机/opt/data修改文件,容器中/opt也会同步操作,容器销毁了,宿主机上/opt/data目录中的文件依然存在
指定权限挂载(rw,ro) 默认为读写
docker run -it -v /opt/data:/opt:ro centos bash
数据卷容器
共享容器中的目录,让一个容器访问另一个容器的目录
创建一个容器挂载宿主机/opt/data目录
docker run -it -v /opt/data --name mydata centos bash
在创建一个挂载mydata容器/opt/data目录的新容器data
docker run -it --volumes-from mydata --name data centos bash
--volumes-from 挂载数据卷容易 后面要跟容器名
发现在mydata容器下创建的123文件在data容器中也能看到,如果我们停掉或销毁mydata容器那么data容器中/opt/data目录下的文件是否还存在?答案是/opt/data目录下的文件依然存在,原理是挂载点只有未被使用的情况下才会销毁,只要有一个容器在使用该挂载点就不会被销毁
那么如果我们想要销毁容器时同时销毁容器中挂载点该如何做?
docker rm -fv data
- -f 强制删除正在运行的榕溪
- -v 删除数据卷
最好是在销毁容器并确定卷内文件没有用的时候加-v参数删除,所以以后删除容器的时候无论是挂载数据卷还是挂载数据卷容器来的都要加-v参数
为什么要删除挂载点数据卷那?
因为如果我们删除容器的时候没有加-v参数是不会销毁容器内部挂载点的,长时间下来会产生大量孤儿文件
docker volume ls
docker volume prune
prune : 删除所有未被使用的本地卷 最好慎用