什么是数据卷(Data Volume)
-
数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或多个容器提供访问。
-
数据卷设计的目的,在于数据的永久化,它完全独立与容器的生存周期,因此,Docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理。
-
下图是数据卷的结构图
由上图可以看出 -
Docker的数据卷是独立于Docker的存在,它存在于宿主机中,生命周期与Docker容器是分离的;
-
Docker可以是目录也可以是文件;
-
Docker容器可以通过数据卷和宿主机进行文件共享;
-
同一个目录或者文件可以支持多个容器的访问,实现了多个容器的的数据访问和交换
数据卷(Data Volume)的特点
- 数据卷在容器启动是初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中。
- 数据卷可以在容器之间共享和重用
- 可以对数据卷里的内容直接进行修改
- 数据卷的变化不会影响镜像的更新
- 卷会一直存在,即使挂载数据卷的容器已经删除
数据卷的使用
- 为容器添加数据卷并在数据卷中创建一个文件
# docker run -it -v /usr/local/Docker/datavolume:/data ubuntu /bin/bash
# touch /data/c1
# echo "I'm in container">/data/c1
此时查看宿主机的 /usr/local/Docker/目录,发现目录下多了一个datavolume的目录,在这个目录里边,有在容器中创建的文件,
查看容器信息发现包含了创建的数据卷的信息,也就是说可以通过docker inspect查看是否挂载了数据卷
#docker ps -l
#docker inspect bd6578d81ca2、
- 为数据卷添加访问权限
如为一个数据卷添加只读权限
docker run -it -v /usr/local/Docker/datavolume:/data:ro ubuntu /bin/bash
如图所示,数据卷在这个容器中权限为只读(Read-only)
补充,这个数据卷在宿主机中也只有只读权限,不过可以在数据卷下追加文件
查看第二个容器的详细信息发现在Mounts挂载下,可以看到/data数据卷相关信息:
来源为宿主机的usr/local/Docker/datavolume
mode为“ro”,"RW"写权限是false
对比第一个创建的数据卷
使用Dockerfile构建数据卷的镜像
Dockerfile指令: VOLUME["datavolume1","datavolume2"] *注意,Dockerfile创建的数据卷本地来源不能自定义,由Docker默认创建,有多个数据卷的话用“,”隔开*
实例:
Dockerfile
#First Docker of tanghc
FROM ubuntu:18.04
VELUME ["datavolume1","datavolume2"]
CMD /bin/bash
构建容器
sudo docker build -t dormancypress/dvt .
运行该容器可以看到,目录下有两个数据卷
退出,用Docker inspect查看刚创建的容器的信息
docker inspect dvt3
可以看到,数据卷指定的本地路径是由Docker主动创建的
用Dockerfile创建数据卷的容器间,是不能共享数据卷的,因为每次都会初始化数据卷指定的本地文件,如果还是需要共享,可以用数据卷容器
-->什么是数据卷容器