1.容器数据卷是什么
卷就是目录或者文件,存在于一个或者多个容器中,由docker挂载到容器,不属于容器内(类似于笔记本电脑外的一个移动硬盘)。
卷的设计目的就是数据持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
2.挂载目录没有权限的问题
--privileged=true
Docker挂载主机目录访问如果出现cannot open directory..Permission denied
解决办法:
在挂载目录后多加一个--privileged=true参数即可
即使用该参数,container内的root拥有真正的root权限,否则,container内的root
只是外部的一个普通用户权限。
3.自定义容器卷
-v:添加自定义容器卷
docker run -it --privileged=true -v 【宿主机绝对路径】:【容器内路径】 镜像名
-v 【/宿主机绝对路径/:/容器内路径】
启动某个容器实例之后,完成容器内的路径与宿主机的某个绝对路径信息共享、互通、互联
默认情况下,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便与宿主机联调。
4.容器卷应用场景
保证容器数据持久化。
Docker容器产生的数据,如果不备份,那么当容器实例删除或者docker重启后,容器内的
数据自然也就没有了。
5.容器卷特点
1.数据卷可在容器之间共享或者重用数据。
2.数据卷的更改可以直接实时生效。
3.数据卷中的更改不会包含在镜像的更新中。
4.数据卷的生命周期一直持续到没有容器使用它为止。
6.实战
6.1宿主机-容器之间映射添加容器卷
docker run -it --privileged=true -v /tmp/hostData:/tmp/dockerData ubuntu
如果命令中的目录不存在,在放开权限(--privileged=true)的情况下会自动创建。
在容器目录/tmp/dockerData下新建dockerin.txt文件后进入宿主机/tmp/hostData目录下
会发现文件已映射
同样在宿主机/tmp/hostData目录下新建hostin.txt文件后进入容器目录/tmp/dockerData下会发现文件已映射
注:
1.宿主机或者容器目录中修改文件内容同样也会进行映射
2.当容器停止后,在宿主机目录中添加或者修改文件,当容器启动后,同样也会进行映射
6.2查看数据卷是否挂载成功
docker inspect 【容器id】
Mounts:挂载
Source:宿主机目录
Destination:容器目录
6.3读写规则映射添加说明
宿主机与容器映射添加容器卷 默认规则为 读写(rw)
命令如下:
docker run -it --privileged=true -v 【宿主机绝对路径】:【容器内路径】:rw 镜像名
容器实例限制,只能读不能写
docker run -it --privileged=true -v 【宿主机绝对路径】:【容器内路径】:ro 镜像名
docker run -it --privileged=true -v /tmp/hostData:/tmp/dockerData:ro ubuntu
6.4容器卷之间继承
相当于一个宿主机挂载两个容器卷,两个容器卷内容相互共享。其中一个挂了,另一个不受影响,重启过后内容也会相同
docker run -it --privileged=true --volumes-from 【父容器卷】【镜像】
docker run -it --privileged=true --volumes-from 15f7ec25a9b5 ubuntu