一,docker存储
docker为容器提供了两种存放数据的资源:
- 由storage driver管理的镜像层和容器层,可以简单理解为某个docker镜像的数据层。
- data volume。
对于某些容器,直接将数据放在由storage driver维护的层中是很好的选择,比如那些无状态的应用。无状态意味着容器没有需要持久化的数据,随时可以从镜像直接创建,即存在与否依赖镜像的存在。
比如 busybox ,它是一个工具箱,启动 busybox 是为了执行诸如 wget 、ping 之类的命令,不需要保存数据供以后使用,使用完直接退出,容器删除时存放在容器层的工作数据也一起被删除,这没问题,下次再启动新容器即可。
但对于另一类应用这种方式就不合适了,它们有持久化数据的需求,容器启动时需要加载已有的数据,容器销毁时希望保留产生的新数据,也就是说,这类容器是有状态的,例如数据库。
这就要用到 docker 的另一个存储机制:data volume 。
二,data volume
data volume 本质上是docker host文件系统中的目录或文件,能够直接被mount到容器的文件系统中。
data volume有以下特点:
- data volume是目录或文件,而非没有格式化的磁盘(或设备)。
- 容器可以读写volume中的数据。
- volume数据可以被持久化地保持,即使使用它的容器已经销毁。
三,数据共享
数据共享是volume的关键特性,volume可以在容器与host之间、容器与容器之间共享数据。
四,volume container
volume container是专门为其他容器提供volume的容器。它提供的卷可以是bind mount,也可以是docker managed volume。
五,data-packed volume container
data-packed volume container可以将数据放到volume container中,同时又能与其他容器共享。
data-packed volume container原理是将数据打包到镜像中,然后通过docker managed volume 共享。
六,参考资料
《每天5分钟 玩转docker容器技术》