容器数据持久化
容器数据管理
容器写数据原理:
Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层
基于写实复制(cow),只读层的内容需要修改时,把文件复制到读写层,在读写层进行修改,而只读层的数据没有修改,但此时还是在容器内部的数据持久化,容器删除修改后的数据也删除,但使用volume可以将数据存在宿主机
容器的数据管理:
Docker镜像是分层设计的,镜像层是只读的,通过镜像启动的容器添加了一层可读写的文件系统,用户写入的数据都保存在这一层中
容器的数据分层目录:
LowerDir: image镜像层,容器基于哪个镜像运行的,只读层
UpperDir: 容器的上层(读写层),容器变化的数据存放在此处
MergedDir: 容器的文件系统,使用Union-FS(联合文件系统)将lowerdir和upperdir合并完成后给容器使用,最终呈现给用户的统一视图,也就是容器中的根文件系统
WorkDir: 容器在宿主机的工作目录,挂载后内容会被清空,且在使用过程中其内容用户不可见
查看分层数据目录: docker inspect n1 |grep -A 5 Data
哪些数据需要持久化:
有状态协议就是就通信双方要记住双方,并且共享一些信息。而无状态协议的通信每次都是独立的,与上一次的通信没什么关系
"状态”可以理解为“记忆”,有状态对应有记忆,无状态对应无记忆
数据持久化方式:
如果要将写入到容器的数据永久保存,则需要将容器中的数据保存到宿主机的指定目录
两种方式:
数据卷(Data Volume),直接将宿主机目录挂载到容器的指定目录,推荐使用
数据卷容器(Data Volume Containe),间接使用宿主机空间,数据卷容器是将物理机的目录挂载到一个专门的数据卷容器(做服务器),其他容器通过数据卷容器读写宿主机的数据,此方法不常用