1、什么是数据卷
数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或多个容器提供访问
数据卷设计的目的,在于数据的永久化,它完全独立于容器的生命周期,因此,Docker不会在容器删除时删除其挂载的数据卷,也不会存在的类似的垃圾回收机制,对容器引用的数据卷进行处理
2、数据卷的特点
数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中
数据卷可以在容器间共享和重用
可以对数据卷里的内容直接进行修改
数据卷的变化不会影响镜像的更新
卷会一直存在,即使挂载数据卷的容器已经被删除
3、为容器添加数据卷的命令
将docker host 中的~/container_data映射到容器中的/data,实现宿主机与容器间的文件共享,注意如果docker host 中没有~/container_data则docker会创建这个目录
docker run 命令中的-v 来指定容器的数据卷
sudo docker run -v ~/container_data:/data -it ubuntu /bin/bash
使用docker inspect 查看docker容器的volumes 和 volumeRW
4、为数据卷添加访问权限
将docker host 中的~/container_data映射到容器中的/data,实现宿主机与容器间的文件共享,同时容器对data目录只有可读权限
sudo docker run -v ~/datavolume:/data:ro -it unbuntu /bin/bash
5、使用Dockerfile构建包含数据卷的镜像
VOLIME可以在创建镜像是指定容器中数据卷的目录
Dockerfile指令
VOLIME["/data1", "/data2",....]
注意包含Dockerfile构建的镜像只是指定容器中的数据目录,利用此镜像构建的容器的数据卷在宿主机的目录是docker守护进程指定的
6、数据卷容器
6.1、什么是数据卷容器
命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫做数据卷容器
6.2、挂载数据卷容器的方法
命令
docker run --volumes-from [CONTAINER NAME]
事例
docker run -it --name="vol02" --volumes-from="vol01" chao/volume_test01 /bin/bash
其中vol01为挂载数据卷的容器,上述命令指定了vol02挂载数据卷容器vol01
注意
容器挂载数据卷容器,实质上是挂载数据卷容器中的配置,与数据卷的状态无关,当容 器成功挂载数据卷容器后,可以对数据卷容器进行停止和删除操作而不影响当前挂载数据卷容器的容器,可以继续对数据卷进行操作
docker 查看容器的数据卷配置命令如下
docker inspect --format="{{.Mounts}}" vol02(容器名)
6.3、docker数据卷的备份和还原
6.3.1、数据卷的备份实现
新建一个数据备份的容器同时指向被数据的数据容器和本地的数据卷从而实现数据的备份
数据卷备份实质流程图
演示
docker run -it --volumes-from vol02 -v /home/chao/volume_test/backup:/backup --name vol03 ubuntu tar cvf /backup/dvt.tar /data1
将容器vol02中的/data1数据备份到本地的backup目录下
6.3.2、数据卷的还原
数据卷的还原的原理和数据卷的备份的原理一模一样
docker run -it --volumes-from vol02 -v /home/chao/volume_test/backup:/backup --name vol03 ubuntu tar xvf /backup/dvt.tar
运行一个容器vlo03将本地/home/chao/volume_test/backup中的dvt.tar解压恢复到容器中。