#docker容器存储实现
容器存储有两种方式,storage driver和data volume。
Storage driver
- strorage用于管理镜像层和容器层
- 镜像分层,容器由一个可写的容器层以及若干只读的镜像层组成,容器的数据存放在这些层中。最大的特点是copy-on-write。新数据直接存放在最上层的容器层,修改现有数据会先从镜像层将数据复制到容器层,修改之后直接保存在容器层;如果多个层有命名相同的文件,用户只能看到最上面那层中的文件
- 分层结构使镜像和容器的创建、共享和分发变得非常高效,依赖与docker storage driver。实现了多层数据的堆叠并为用户提供一个单一的合并之后的统一视图。
- 多种storage-driver:aufs,device mapper,btrfs,overlayfs,vfs和zfs
Data volume
- data volume一般适用于有持久化数据需求的情况,容器启动时需要加载已有的数据,容器销毁时希望保留产生的新数据,也就是说这种容器是有状态的。
- 本质上是docker host文件系统的目录或文件,能够直接被mount到容器的文件系统中。
- 支持两种方式:bind mount与docker managed volume
- 特点:
- data volume是目录或文件,而非没有格式化的磁盘
- 容器可以读写volume中的数据
- volume数据可以永久被保存,即使容器销毁