Linux · 2 分钟阅读
13. 数据管理
容器本身是临时的,可写层随容器销毁。数据要持久化请挂载卷,别写进容器。
三种方式
| 方式 | 谁管 | 跨主机 | 性能 | 适合 |
|---|---|---|---|---|
| Volume | Docker | 需 driver | 高 | 数据库、长期数据 |
| Bind Mount | 用户 | 否 | 看底层 FS | 配置文件、开发期 |
| tmpfs | 内存 | 否 | 最高 | 临时缓存、敏感数据 |
2026 年生产首选
named volume+ 备份策略,bind mount 仅限 dev/配置场景。
Volume
docker volume create my-vol
docker volume ls
docker volume inspect my-vol
# 删除
docker volume rm my-vol
docker volume prune # 清无用
挂载
# --mount(推荐,语义清晰)
docker run -d -P --name web \
--mount source=my-vol,target=/webapp \
training/webapp python app.py
# -v(兼容老写法)
docker run -d -P --name web \
-v my-vol:/webapp \
training/webapp python app.py
# 只读
docker run -d -P --name web \
--mount source=my-vol,target=/webapp,readonly \
training/webapp python app.py
挂载点里若已有数据,原数据会被隐藏。容器内同路径文件 = mount 内容。
备份 / 恢复
# 备份(不依赖容器运行)
docker run --rm \
-v my-vol:/data:ro \
-v $(pwd):/backup \
alpine tar czf /backup/my-vol-$(date +%F).tgz -C /data .
# 恢复
docker run --rm \
-v my-vol:/data \
-v $(pwd):/backup \
alpine tar xzf /backup/my-vol-2026-08-04.tgz -C /data
Bind Mount
docker run -d -P --name web \
--mount type=bind,source=/srv/webapp,target=/opt/webapp \
training/webapp python app.py
# 只读
docker run -d -P --name web \
--mount type=bind,source=/srv/webapp,target=/opt/webapp,readonly \
training/webapp python app.py
Bind mount 风险:容器能改主机文件。生产要尽量避免,开发机用着方便。
tmpfs
docker run -d --tmpfs /tmp training/webapp
# 或
docker run -d --mount type=tmpfs,target=/tmp training/webapp
一些经验
- 数据库不要 bind mount,文件系统权限/IO 行为容易踩坑
- 备份时容器能停则停,运行时冷备要走数据库自身的备份工具
- 多容器共享一份配置用 volume;多容器共享同一份数据要看具体语义
docker system df看卷占用