Docker(七)-Docker容器数据卷

发布于:2024-06-29 ⋅ 阅读:(14) ⋅ 点赞:(0)

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述