是什么?
有点类似Redis里面的额rdb和aof文件
能干嘛?
容器的持久化
容器间继承+共享数据
数据卷
容器内添加
直接命令添加
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
mydataVolumn为主机的目录,dataVolumeContatiner 为容器内的目录,如果目录不存在它会自己创建
使用docker inspect +容器ID查看是否挂载成功,在弹出的信息找出下面的信息说明挂载成功了
测试:主机数据改动,容器数据也会随着改动:
在docker内原本dataVolumeContainer文件夹内是空的
证明了数据的同步
容器停止工作以后主机的数据改动还会更新到容器吗?
答案 会的
可以做个测试,停止容器,在主机的文件里增加新的内容,当我们再次进行重启容器的时候发现容器里的内容会出现在容器启动之前我们新加的内容。
使用DockerFile添加
根目录下新建mydocker文件夹并进入,可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
1.文件的构建
在mydocker文件夹下创建文件dockerfile,dockerfile的文件内容如下:
# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash
2.使用build生成镜像,获得一个新的镜像zzyy/centos
3.run 容器
通过上面的步骤,容器内的卷目录地址已经在知道。
主机的默认地址
/var/lib/docker/volumes
在主机进行文件信息的变更docker就会进行文件的同步。
总结一下:
docker提供了两种备份机制
1.通过命令直接创建 直接命令添加
2.通过文件的方式进行配置 DockerFile添加
Dockerfile的文件都是一些指令,掌握dockerfile就必须了解这些指令
数据卷容器
是什么?
命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器.
在上面创建的zzyy/centos基础上,以上一步新建的镜zzyy为模板并运行容器,他们都已经有了dataVolumeContainer1,dataVolumeContainer2
1、先启动一个父类容器 a01,启动完成以后在dataVolumeContainer2新添加文件 a01.txt
a01,a03都继承自a01
最后退出容器,进入a01
发现a02,a03的文件都被进行了同步,a01上可以看到a02,a03的文件。
删除a01,更新a02,a03的数据是否还会被访问?验证如下:
可见一旦数据备份的关系建立起来就不会出现数据不备份的情况。
接下来再删除a02,a03是否可访问
docker rm -f a02
这时我们发现数据依旧存在。
新建a04 继承a03可访问?
依旧可以访问
结论:结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。