Docker 容器数据卷
Docker 容器数据卷
docker 容器数据卷有点类似我们 Redis 里面的 rdb 和 aof 文件,可以实现数据的持久化和同步操作,容器间也可以实现数据共享
卷就是目录或文件,存在于一个或多个容器中,由 docker 挂载到容器,但不属于联合文件系统,因此能够绕过 Union File System 提供一些用于持续存储或共享数据的特性
卷的设计目的就是数据持久化,完全独立于容器的生存周期,因此 docker 不会在容器删除时删除其挂载的数据卷
docker 容器数据卷特点:
- 数据卷可在容器之间共享或重用
- 数据卷中的更改可以直接实时生效(容器停止也不影响)
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
宿主机和容器之间实现数据卷挂载
命令
docker run -it --privileged=true -v 宿主机绝对路径目录:容器内目录 镜像名
docker 挂载主机目录访问如果出现 cannot open directory.:Permission denied,解决办法:挂载目录时加上 --privileged=true 参数;原因:如果是Centos7,安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为是不安全的行为,在SELinux里面挂载目录被禁止掉了,如果要开启,我们一般使用 --privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使用该参数,container内的root拥有真正的root权限,否则container内的root只是外部的一个普通用户权限
以上挂载命令默认是可读可写的,等同于以下命令:
docker run -it --privileged=true -v 宿主机绝对路径目录:容器内目录:rw 镜像名
如果要限制容器内容数据卷只能读不能写,则通过以下命令挂载:
docker run -it --privileged=true -v 宿主机绝对路径目录:容器内目录:ro 镜像名
案例
# 挂载目录
docker run -it --privileged=true -v /home/user01/data/docker/ubuntu:/temp ubuntu
# 挂载目录后查看容器元数据信息,在Mounts块中可以看到挂载信息,eg:
"Mounts": [
{
"Type": "bind",
"Source": "/home/user01/data/docker/ubuntu",
"Destination": "/temp",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
容器数据卷的继承和共享
# 启动一个容器并继承父容器的数据卷挂载规则
docker run -it --privileged=true --volumes-from 父容器id 镜像名
这样宿主机的一个目录就相当于挂载了多个容器数据卷
记得快乐