← 返回目录
Day 5 2026-05-22 ops 🟡 中

Docker存储

Day5 · Docker存储

今日重点:理解 docker 存储驱动、Volume 管理与数据持久化方案。


一、docker 存储驱动(Storage Driver)

docker 使用存储驱动来管理镜像层与容器可写层的存储格式。

常见驱动

驱动 文件系统 适用场景
overlay2 overlayfs 推荐,主流 Linux 发行版默认
aufs aufs Ubuntu 旧版,性能一般
devicemapper device-mapper RHEL/CentOS,thin provisioning
btrfs btrfs 快照场景
zfs zfs 企业级存储

overlay2 原理(重点)

镜像层(只读)     ← 共享,多个容器复用
    ↓
容器可写层(读写)  ← 每个容器独立
    ↓
UpperDir  ← 写操作落在这里
LowerDir  ← 只读镜像层
MergedDir  ← 最终挂载给容器的视图
  • 写时复制(CoW):只读层不复制,写时才创建新层
  • 写时分配:按需分配空间
docker info | grep "Storage Driver"

二、docker Volume 管理

为什么需要 Volume?

容器可写层随容器删除而丢失,Volume 是持久化数据的唯一可靠方式。

三种持久化方式对比

方式 生命周期 跨容器共享 备份难度 推荐
容器可写层 随容器销毁 临时数据
匿名 Volume 独立于容器 少用
命名 Volume 独立于容器 推荐
Bind Mount 绑定宿主机目录 配置文件

Volume 操作命令

docker volume create my-data
docker volume ls
docker volume inspect my-data
docker volume rm my-data
docker volume prune

使用 Volume

docker run -d --name nginx \
  --mount source=my-data,target=/usr/share/nginx/html \
  nginx:alpine

三、Bind Mount(绑定挂载)

宿主机目录直接映射到容器内,开发最常用:

docker run -d -p 3000:3000 -v /home/user/myapp:/app node:20 npm start

⚠️ 会覆盖容器内目标目录原有内容!


四、tmpfs Mount

# 敏感数据只存内存,不落盘
docker run --tmpfs /run/secrets nginx:alpine

五、Volume 数据备份与恢复

# 备份
docker run --rm -v my-data:/source -v /backup:/backup alpine \
  tar czf /backup/my-data.tar.gz -C /source .

# 恢复
docker run --rm -v my-data:/target -v /backup:/backup alpine \
  tar xzf /backup/my-data.tar.gz -C /target

六、面试高频

问题 要点
overlay2 原理 CoW + 写时分配,Upper/Lower/Merged
Volume vs Bind Mount Volume docker 管理;Bind Mount 直连宿主机
数据持久化选型 生产用 Named Volume;开发用 Bind Mount
Volume 删除规则 命名 Volume 不随容器删除;-v 才删除匿名 Volume
🎯 今日学习
Day 5 · Docker存储
✅ 打卡签到
🔒 打卡和提交作业需要 登录 后操作
📅 打卡记录 📤 我的作业