Docker容器数据卷

容器数据卷是什么

容器数据卷类似于Redis中的持久化方法RDB和AOF,也是将容器持久化的东西,而且容器间能够继承和共享数据

容器内添加数据卷

直接命令添加
无带权命令
 docker run -it -v /宿主机绝对路径目录:/容器内目录      镜像名	

例: docker run -it -v /myDataVolume:/dataVolumeContainer centos 

查看数据卷是否挂载成功

docker inspect 容器ID

有以下数据证明挂载成功
在这里插入图片描述
容器和宿主机之间数据共享,表现为myDataVolume文件夹和dataVolumeContainer文件夹中的内容会保持同步,主机可读写,容器也可读写(volumesRW值为true)

容器关闭后,主机进行读写,待容器再次启动,数据会同步挂载的两个数据卷文件夹中

如果运行镜像后,容器无法进行写操作,那么需要修改一下代码

docker run -it -v /myDataVolume:/dataVolumeContainer --privileged=true centos 
带权命令
带权命令
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
例: docker run -it -v /myDataVolume:/dataVolumeContainer:or centos 

在这里插入图片描述
容器被添加只读权限,数据也会同步到数据卷,但是容器只能进行读操作,不能进行写操作,而主机可以进行读写

DockerFile添加

DockerFile是什么?

举个栗子

people.java ======> people.class
docker images ======> Docker File
Docker File 是docker镜像的源码级描述文件

添加数据卷步骤

在根目录下新建一个mydocker文件夹
mkdir /mydocker

进入mydocker目录下
cd /mydocker

出于可移植和分享的考虑,用 -v 主机目录:容器目录 这种方法不能够直接在Dockerfile中实现。
由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。
也就是说,如果主机更换了,没办法保证新的主机上有规定的数据卷目录

编写dockerfile
vi Dockerfile
============================================================
# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash 
============================================================

File构建
docker build -f /mydocker/Dockerfile -t zzyy/centos
得到镜像名为zzyy/centos的镜像

在这里插入图片描述
使用docker images命令即可查看镜像
在这里插入图片描述

主机挂载数据卷目录:
docker inspect ee2a35672484

在这里插入图片描述

数据卷容器

命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器

通过上面使用DockerFile进行数据卷的配置,可得知主机和zzyy/centos镜像已经挂载了数据卷。

接下来我们要验证容器间的数据共享

先启动一个父容器dc01
docker run -it --name dc01 zzyy/centos

启动子容器dc02继承dc01
docker run -it --name dc02 --volumes-from dc01 zzyy/centos

这个时候无论在父容器dc01还是在子容器dc02中的数据卷文件夹添加东西,数据卷文件夹都能够同步

启动子容器dc03继承dc01
docker run -it --name dc03 --volumes-from dc01 zzyy/centos

这个时候我们删除dc01
docker rm -f dc01

然后再子容器dc02的数据卷文件夹添加文件,dc03还可以同步到吗,答案是可以的

我们再新建一个dc04继承于dc03
docker run -it --name dc04 --volumes-from dc03 zzyy/centos

然后我们删除掉dc03
docker rm -f dc03

这个时候无论再dc02 还是dc04 的数据卷添加数据都是可以同步到dc02和dc04的

结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值