Docker容器数据卷

Docker容器数据卷主要干数据共享和数据持久化方面的工作,和redis的持久化RDB、AOF类似

数据卷:

 分两种:直接命令添加和DockerFile添加

 -v命令

  docker run -it -v /宿主机绝对路径目录:/容器内目录      镜像名

  现在本机是没有mydata这个文件夹

执行命令:docker run -it -v /mydata:/mycontainer centos

Docker已经自动创建了2个文件夹,宿主机的mydata和容器的mycontainer

执行命令查看容器原信息。docker inspect 4774a23e9c28(容器ID)

可以看到已经绑定挂载成功

往2个文件夹添加数据/文件,看是否同步

无论是宿主机添加文件,centos镜像的容器也能同步文件,也能输入信息,并且宿主机也可以共享同步。

如果启动容器是以后台形式启动   docker run -d 镜像名,一样的效果

带权限: docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

操作和上面一样,只是有权限,ro差不多就是readonly的意思,只读。文件同步,但是只读的,docker 容器不能对其(容器内的文件)进行修改

 

DockerFile添加:

在mydockerfile文件夹新建一个DockerFile文件,或者其他名称文件也可以

内容:

# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash

build生成镜像:docker build -f -t ypp/centos .            最后面有个.  切记  -f指定DockerFile文件,如果在当前目录文件名是DockerFile可以不写 (DockerFile建议放在新建文件夹下,不要放在ROOT目录,不然会报错) 

FROM centos是以centos镜像再生成一个ypp/centos镜像模板

执行命令

运行ypp/centos容器,并查看容器卷的目录,和输入数据同步,如果不设置目录,自动会创建目录。就是Mounts里面的Source标签的目录,同时生成了2个目录,宿主机也生成了默认的目录路径

数据卷容器--容器间传递共享(--volumes-from)

 只要容器是互通的,都可以进行共享。比如开启了容器doc1,有doc2和doc3都继承自doc1,和java的extend类似,那么doc1、doc2、doc3容器卷都是共享的,唯一的不同点是,doc1有的doc2和doc3都有,在doc2或者doc3容器卷里面添加或者删除doc1也是同步的,doc1容器卷也会同步,可以理解为既可以正向也可以反向。如果doc1不存在或者被删除了,那么doc2和doc3同样是共享的。如果有一个doc4继承自doc3,doc3不存在了,doc4和doc2也同样是共享的。除非容器全部没有,全部不在。那么就不会共享了,当然镜像模板得是同一个

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

实际操作:

     运行一个容器doc1,运行容器doc2和doc3继承自doc1。关键词:--volumes-from     

     docker run -it --name doc2 --volumes-from doc1 ypp/centos

 往doc1写入,doc2、doc3同样会有,反之,往doc2或者doc3容器卷里面写入其他有关联的容器都会有。

删除doc1,往doc2写入,看doc3是否会共享同步 

docker attach 容器名或者容器ID,进入容器。ctrl+p+q退出容器但不关闭,exit 直接退出容器并关闭容器

都会进行共享同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值