存储资源
Docker 为容器提供了两种存放数据的资源:
- 由 storage driver 管理的镜像层和容器层
- Data Volume
1、storage driver
容器由最上面一个可写的容器层,以及若干只读的镜像层组成,容器的数据就存放在这些层中。
这样的分层结构最大的特性是 Copy-on-Write:
- 新数据会直接存放在最上面的容器层
- 修改现有数据会先从镜像层将数据复制到容器层,修改后的数据直接保存在容器层中,镜像层保持不变
- 如果多个层中有命名相同的文件,用户只能看到最上面那层中的文件
storage driver 实现了多层数据的堆叠并为用户提供一个单一的合并之后的统一视图。
Docker 支持的 storage driver 有:
1、AUFS
2、Device Mapper
3、Btrfs
4、OverlayFS
5、VFS
6、ZFS
它们都能实现分层的架构,同时又有各自的特性。
应该使用哪个 storage driver 是一个难题,因为:
1、没有哪个 driver 能够适应所有的场景
2、driver 本身在快速发展和迭代
Docker 官方推荐:优先使用 Linux 发行版默认的 storage driver。
Docker 安装时会根据当前系统的配置选择默认的 driver。默认 driver 具有最好的稳定性,因为默认 driver 在发行版上经过了严格的测试。
运行 docker info 查看 Ubuntu 的默认 driver:
对于某些容器,直接将数据放在由 storage driver 维护的层中是很好的选择,比如那些无状态的应用。
1、无状态容器:无状态意味着容器没有需要持久化的数据,随时可以从镜像直接创建。
例如: busybox,它是一个工具箱,不需要保存数据供以后使用,使用完直接退出
容器删除时存放在容器层中的工作数据也一起被删除
2、有状态容器:它们有持久化数据的需求,容器启动时需要加载已有的数据,容器销毁时希望保留产生的新数据
-------------------------------------------引用来自---------------------------------------------------
https://mp.weixin.qq.com/s?__biz=MzIwMTM5MjUwMg==&mid=2653587706&idx=1&sn=a6c8320acc41fe47c7708b35360da473&chksm=8d3080e3ba4709f537a59137065b8d12cdb45c0fb71cd550302ed99ba2f895c0fcf8aa508a31&scene=21#wechat_redirect