这是《Docker 与 Kubernetes 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 容器层随容器删除而消失。持久化数据必须明确使用 Volume 或 Bind Mount,并理解它们的生命周期与备份方式。
6.1 三种挂载
| 类型 | 说明 |
|---|---|
| volume | Docker 管理卷 |
| bind mount | 挂载宿主机路径 |
| tmpfs | 内存文件系统 |
docker run -d \
--name postgres \
-e POSTGRES_PASSWORD=postgres \
-v pgdata:/var/lib/postgresql/data \
postgres:16
6.2 Volume
docker volume create pgdata
docker volume ls
docker volume inspect pgdata
特点:
- 由 Docker 管理;
- 与容器生命周期解耦;
- 删除容器不会删除卷;
- 便于备份和迁移;
- 可由驱动接入远端存储。
6.3 Bind Mount
docker run --rm \
-v "$PWD/app.conf:/etc/app/app.conf:ro" \
my-app
适合开发热更新配置和代码,但路径依赖宿主机布局,生产更推荐 Volume 或配置管理。
6.4 tmpfs
docker run --rm \
--tmpfs /tmp:size=100m,mode=1777 \
my-app
适合临时文件和敏感临时数据,容器停止后消失。
6.5 数据备份
备份 PostgreSQL 卷:
docker run --rm \
-v pgdata:/source:ro \
-v "$PWD/backup:/backup" \
alpine tar czf /backup/pgdata-$(date +%F).tar.gz -C /source .
恢复:
docker run --rm \
-v pgdata:/target \
-v "$PWD/backup:/backup" \
alpine sh -c 'rm -rf /target/* && tar xzf /backup/pgdata-2026-08-25.tar.gz -C /target'
数据库应优先使用数据库原生备份工具,而不是只备份文件。
6.6 清理与风险
查看占用:
docker system df -v
删除:
docker volume rm pgdata
docker volume prune
docker volume prune 会删除未被容器引用的卷,执行前必须确认业务影响。
本章小结
Volume 适合持久数据,Bind Mount 适合开发配置,tmpfs 适合临时数据。备份要考虑应用一致性,清理卷前必须确认引用关系。
思考题
- 容器可写层和 Volume 有什么区别?
- Bind Mount 有哪些生产风险?
- 什么时候使用 tmpfs?
- 如何备份数据库容器?
volume prune为什么危险?