当前位置: 首页 > news >正文

Docker 存储原理精要

1. 镜像分层(Union File System, UnionFS)
- 核心思想:把只读镜像层 + 读写容器层叠加在一起,形成最终文件系统视图。  
- 实现驱动:  
- overlay2(CentOS 7+/Ubuntu 16.04+ 默认)  
- aufs(早期 Ubuntu)  
- btrfs、zfs、devicemapper(已逐渐弃用)  
- 只读层(image layers)  
- 每层对应 Dockerfile 的一条指令。  
- 层与层之间通过 CoW(写时复制)共享数据,节省磁盘。  
- 读写层(container layer)  
- 容器启动时自动创建,仅保存运行时修改。  
- 删除容器即删除该层(除非 commit 成新镜像)。

 2. 写时复制(Copy-on-Write, CoW)
| 读操作 | 写操作 |
| 从镜像层直接读取 | **首次写入** → 将目标文件复制到读写层再修改;<br>**后续写入** → 直接在读写层修改。 |
> 优点:  
> - 镜像层共享,减少冗余;  
> - 启动容器只需极少量磁盘空间。

3. 存储驱动(Storage Driver)
- 职责**
- 管理层(layer)与挂载点;  
- 实现 CoW、快照、配额等。  
- overlay2 目录结构速查* 
/var/lib/docker/
├── overlay2/          # 层数据
│   ├── <layer-id>/    # 每层一个目录
│   │   ├── diff/      # 层内容
│   │   └── link       # 短名符号链接
├── image/overlay2/    # 元数据、layerdb
└── containers/<id>/   # 容器读写层(含挂载信息)


- 性能小贴士* 
- 大量随机小写 → 选 overlay2 优于 aufs;  
- 需要文件级快照 → 选 btrfs/zfs;  
- SELinux 环境 → 开 `overlay2.override_kernel_check=true`。

4. 数据持久化三板斧
| 方式 | 场景 | 特点 |
| Volume(推荐) | 生产数据、数据库 | 独立于容器生命周期,支持 NFS、Ceph 等远程存储。 |
| Bind Mount | 开发调试 | 直接把宿主机目录挂进容器,路径硬编码,可移植性差。 |
|*tmpfs Mount | 敏感或临时数据 | 驻留内存,重启即失,不占用宿主机磁盘。 |

- 常用命令速记  
bash
docker volume create pgdata
docker run -d -v pgdata:/var/lib/postgresql/data postgres:15

5. 磁盘空间回收
- 一键清理(慎用):  
bash
docker system prune -a --volumes

- 精准瘦身:  
- 删除已停止容器:`docker container prune`  
- 删除 dangling 镜像:`docker image prune`  
- 删除未使用卷:`docker volume prune`

6. 常见面试/考点速答
1. 为什么镜像拉取时显示多层下载?  
每层对应 registry 的一个 blob,可并发、可复用。  
2. 容器里修改文件会变慢?  
首次写触发 CoW 复制,大文件尤为明显。  
3. 如何查看某容器实际占用的磁盘?
`docker ps -s` 查看 `size` 与 `virtual` 两列。  
4. **overlay2 与 overlay 区别? 
overlay2 支持多层(>128)且 inode 利用率更高。

http://www.dtcms.com/a/359766.html

相关文章:

  • s[:] = reversed(s) 和 s = reversed(s)的区别
  • Blender建模:对于模型布线的一些思考
  • FPGA设计杂谈之七:异步复位为何是Recovery/Removal分析?
  • 浅谈 SQL 窗口函数:ROW_NUMBER() 与聚合函数的妙用
  • 深入解析数据结构之单链表
  • 人工智能加速漏洞利用,15分钟即可完成概念验证?
  • 网络:相比于HTTP,HTTPS协议到底安全在哪?
  • go 开发环境配置 air + dlv debug 踩坑之旅
  • AI基础学习周报十一
  • 大模型——利用RAG构建智能问答平台实战
  • 图像描述编辑器 (Image Caption Editor)
  • 文字的力量:Qwen-Image如何让AI真正“读懂”中文之美
  • HTTPS -> HTTP 引起的 307 状态码与HSTS
  • ans.1中的对象标识符OBJECT_IDENTIFIER----OID
  • 【开题答辩全过程】以 基于springboot的垃圾分类管理系统为例,包含答辩的问题和答案
  • 力扣热题100:合并区间详解(Java实现)(56)
  • 历史数据分析——寒武纪
  • Android开发-活动页面
  • 20.28 《4bit量化模型预处理揭秘:如何节省75%显存高效微调LLM?》
  • leetcode-hot-100(堆)
  • 金融学-货币理论
  • Kafka应用过程中的高频问题
  • 【Linux基础】深入理解计算机存储:GPT分区表详解
  • 对于牛客网—语言学习篇—编程初学者入门训练—复合类型:BC136 KiKi判断上三角矩阵及BC139 矩阵交换题目的解析
  • uvm验证环境中struct(结构体)和class的区别与联系
  • 使用AdaLoRA 自适应权重矩阵微调大模型介绍篇
  • 接口测试总结-含接口测试和前端测试的区别与比较
  • PyTorch 张量(Tensor)详解:从基础到实战
  • 1.9 初始Memory Profiler Package
  • 面试 八股文 经典题目 - HTTPS部分(一)