一、Docker容器数据卷
是什么
一句话:有点类似我们Redis里面的rdb和aof文件。
先来看看Docker的理念:
* 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的
* 容器之间希望有可能共享数据
Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。
为了能保存数据在docker中我们使用卷。
能干嘛
容器的持久化。
容器间继承+共享数据。
特点
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止
数据卷
容器内添加
直接命令添加: docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名。
查看数据卷是否挂载成功:docker inspect 容器ID。
挂载成功后,容器和宿主机之间数据共享。
如果要限制容器在共享文件的写权限,可以使用一下命令:
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名。ro代表readonly。
DockerFile添加
1、根目录下新建mydocker文件夹并进入。
2、可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷,File构:
# volume testFROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,----success1"
CMD /bin/bash
3、build指令将DockFile生成镜像。
docker build -f /mydocker/dockerFile -t plz/centos .
注意最后有一个.不能省略,代表使用当前路径dockerFile进行构建
4、build指令运行后,获得一个新镜像plz/centos。
5、运行新生成的镜像,使用docker inspect 容器Id 命令查看宿主机和容器的文件共享关系。
二、数据卷容器
是什么
命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。
演示
1、新建一个父容器,以plz/centos镜像为例:
docker run -it --name dc01 plz/centos
2、在dc01容器中dataVolumeContainer1目录下新建dc01_add.txt文件。
3、创建dc02、dc03子容器,继承自dc01
docker run -it --name dc02 --volumes-from dc01 plz/centos
docker run -it --name dc03 --volumes-from dc01 plz/centos
4、通过查看子容器的dataVolumeContainer1目录下的文件可以看到目录下存在dc01_add.txt文件。
总结:
dc02/dc03分别在dataVolumeContainer1各自新增内容
回到dc01可以看到02/03各自添加的都能共享了
删除dc01,dc02修改后dc03可否访问——是
删除dc02后dc03可否访问——是
结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。