Docker数据管理

Docker容器的分层

容器的数据分层目录
LowerDir:image镜像层,即镜像本身
UpperDir:容器的上层,容器变化的数据存放在此处
MergedDir:容器的文件系统
WorkDir:容器在宿主机的工作目录,挂载后内容会被清空,使用过程中内容用户不可见

需要持久化的数据

有状态的协议:通信双方要记住双方,并且共享一些消息  如:Mysql、Redis

容器数据持久保存方式

将容器中的数据保存到宿主机的指定目录
Docker的数据类型分为两种:
数据卷:直接将宿主机目录挂载至容器的指定的目录
数据卷容器:间接使用宿主机空间,数据卷容器是将宿主机的目录挂载至一个专门的数据卷容器,然后让其他容器通过数据卷容器读写宿主机的数据

数据卷

使用场景
数据库、日志输出、静态web页面、应用配置文件、多容器间目录或文件共享

特点
1.可以在多个容器之间共同使用,实现容器之间共享和重用
2.对数据卷更改数据在所有容器里面会立即更新
3.数据卷的数据可以持久保存
4.在容器里面的写入数据不会影响到镜像本身,即使数据卷的变化不会影响镜像的更新
5.如果容器使用的镜像在挂载点包含了数据,会拷贝到初始化的数据卷中

数据卷分类
数据卷有三种
匿名卷:不指定数据名称,只指定容器内目录路径充当挂载点,docker自动指定宿主机的路径进行挂载。Dockerfile中VOLUNE指定的卷即为此种
命名卷:指定数据卷的名称和数据路径的挂载关系,此方式会创建命名数据卷
指定宿主机目录或文件:指定宿主机的具体路径和容器路径的挂载关系

数据卷使用方法
-v,--volume=[host-src:] container-dest [:<options>]
<options>
ro  从容器内对此数据卷是只读,不写此项默认为可读可写
rw 从容器内对此数据卷可读可写,此为默认值
方式1
指定宿主机目录或文件格式:
-v <宿主机绝对路径的目录或文件>:<容器目录或文件>
方式2
匿名卷指定容器内路径,没有指定宿主机路径信息,宿主机自动生成/var/lib/docker/volumes/<卷ID>/_data目录,并挂载至容器指定路径
-v <容器内路径>
方式3
命名卷将固定的存放在/var/lib/docker/volumes/<卷名>/_data
-v <卷名>:<容器目录路径>
可以通过以下命令事先创建,若没有事先创建卷名,docker volume create <卷名>

关于匿名数据卷和命名数据卷

数据卷默认保存于/var/lib/docker/volumes
命名卷创建  docker volume create <卷名>

匿名卷创建  docker run -v
随着容器消亡而淹没于卷列表中,因此匿名卷只存放无关紧要的临时数据,随着容器消亡,这些数据将失去存在的意义
dockerfile中指定VOLUME为匿名数据卷,目的只是为了将某个路径确定为卷

数据卷容器

数据卷容器最大的功能是可以让数据在多个docker容器之间共享
相当于先要创建一个后台运行的容器作为Server,用于提供数据卷,这个卷可以为其他容器提供数据存储服务,其他使用此卷的容器作为client端
缺点:因为依赖一个Server的容器,没有冗错
创建数据卷容器
docker run  --volumes-from <数据卷容器>

利用数据卷容器备份指定容器的数据卷实现

由于匿名数据卷在宿主机中的存储位置不确定,所以为了方便的备份匿名数据卷,可以利用数据卷容器实现数据卷的备份

数据卷容器总结

将提供卷的容器Server删除,已经运行的容器Client依然可以使用挂载的卷,但无法创建新的卷容器客户端,只有把卷容器Server创建后即可正常创建卷容器Client,或者基于已存在的Client容器来创建新的Client容器
数据卷容器功能只是将数据挂载信息传递给了其它使用数据卷容器的容器,而数据卷容器本身并不提供数据存储功能
数据卷容器的Server和Client可以不使用同一个镜像生成
创建容器时,会复制Server容器的数据卷信息,后续Server容器状态和存在与否,都不会影响Client容器使用的数据卷

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值