一、数据卷概述
1.1、数据卷简介
- 数据卷是一种特殊的目录关系,它将宿主机目录与容器中的目录进行了直接关联,在任何一端目录中的文件写操作,就是对数据卷目录的操作,在另一端都会发生相应变化。相互关联的宿主机端目录与容器端目录,我们一般称为数据卷的挂载点。
数据卷的设计目的就是为了实现数据持久化,完全独立于容器的生命周期。因此,容器删除时,不会删除其挂载的数据卷。
1.2、数据卷的特性
- 数据卷可在容器之间共享或重用,本地与容器间传递数据更高效
- 可以对数据卷里的内容直接修改,修改后立马生效,无论是容器内操作还是本地操作
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷会一直存在,直到没有容器使用它,即使挂载数据卷的容器已经被删除
二、创建数据卷
2.1、创建读写数据卷
- 读写数据卷指的是容器对挂载点的文件具有读写权限,数据卷是在使用docker run启动容器时指定的。
docker run –it –v /宿主机目录绝对路径:/容器内目录绝对路径 镜像名称:tag
说明:无论是宿主机还是容器,如果指定的挂载点目录不存在,docker都会自动创建。
小例子:创建读写数据卷
创建容器,进入并查看/opt/下的内容
查看宿主机下/opt/下的内容
操作宿主机
查看容器内发现同样生成了test.txt并且里面内容和宿主机相同
相反地,在容器中操作test.txt而在宿主机的test.txt同样有效
2.2、创建只读数据卷
- 只读数据卷指的是容器对挂载点的操作权限是只读的,宿主机操作权限始终是读写的。因为有些情况下,为了防止容器在运行过程中对文件产生修改,就需要创建只读数据卷。
docker run –it –v /宿主机目录绝对路径:/容器内目录绝对路径:ro 镜像名称:tag
三、数据卷共享
-
当一个容器与另一个容器使用相同的数据卷,即不仅共享了宿主机中的挂载点目录,同时还具有相同的容器挂载点目录。此时就称这两个容器实现了“数据卷共享”。数据卷容器是实现数据卷共享的一种非常有效的方案。
-
当一个容器C启动运行时创建并挂载了数据卷,若其它容器也需要共享该容器C的数据卷,此时容器C就称为数据卷容器。其它容器在docker run启动时只需要通过–volumes-from[容器C] 选项即可实现数据卷共享。
docker run -it --volumes-from 数据卷容器 镜像名称:tag
小例子:通过数据卷容器实现数据卷共享
以busybox为基础镜像创建容器base(数据卷容器)
通过–volumes-from命令实现数据卷共享
在宿主机下操作挂载点
查看容器内发现同样生成了test.txt并且里面内容和宿主机相同
再新建一个容器实现数据卷共享,发现同样有test.txt并且内容和宿主机相同