Docker容器数据卷
概念
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
有点类似Redis里面的rdb和aof文件
Docker挂载主机目录访问如果出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true
参数即可
如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,
在SELinux里面挂载目录被禁止掉了额,如果要开启,我们一般使用–privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。
使用
docker run -it --privileged=true -v /宿主机绝对路径目录:容器内目录 镜像名
查看是否挂载成功,我们可以使用docker inspect 容器ID
此时
- docker修改,主机同步获得
- 主机修改,docker同步获得
- docker容器stop,主机修改,docker容器重启和会同步数据。
读写规则
容器卷挂载默认使用的是rw
也就是读写
docker run -it --privileged=true -v /宿主机绝对路径目录:容器内目录:rw 镜像名
只读ro
:read only
容器实例内部被限制,只能读取不能写。也就是进入容器后挂载的目录,容器无法对其进行写入操作,只能同步读取主机写入的内容。
docker run -it --privileged=true -v /宿主机绝对路径目录:容器内目录:ro 镜像名
卷的继承和共享
docker run -it --privileged=true --volumes-from 父类 镜像名
此时该容器就会继承父类容器的容器卷内容。子类和父类对该容器卷的内容实现了共享。(子类操作,父类可以看见。反之亦然)