13. 数据管理
2025-02-17
简介
Docker 提供了多种方式来保证容器中的数据持久化,主要包括:
- 数据卷 (Volumes): Docker 管理的持久化数据
- 挂载主机目录 (Bind Mounts): 将主机目录直接挂载到容器
- tmpfs 挂载: 将数据存储在内存中
数据卷
数据卷是 Docker 引擎管理的持久化存储,具有以下特点:
- 支持多容器共享和重用
- 数据修改实时生效
- 数据更新不影响镜像
- 数据持久化存储,独立于容器生命周期
- 支持多种存储后端驱动
注意: 挂载数据卷会隐藏容器中对应目录的文件,类似 Linux 的 mount 机制
创建数据卷
# 创建数据卷
docker volume create my-vol
# 查看所有数据卷
docker volume ls
# 查看数据卷详细信息
docker volume inspect my-vol启动一个挂载数据卷的容器
Docker 提供两种方式挂载数据卷:
# 使用 --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参数说明:
source: 数据卷名称或主机路径target: 容器内挂载路径readonly: 可选,设置只读权限
查看挂载信息
# 查看容器挂载信息
docker inspect web --format '{{ .Mounts }}'
# 查看详细配置
docker inspect web删除数据卷
# 删除指定数据卷
docker volume rm my-vol
# 清理无主数据卷
docker volume prune注意: 如果要在删除容器时同时删除数据卷,请使用
docker rm -v命令
挂载主机目录
基本用法
# 挂载主机目录
docker run -d -P \
--name web \
--mount type=bind,source=/src/webapp,target=/opt/webapp \
training/webapp \
python app.py
# 挂载为只读
docker run -d -P \
--name web \
--mount type=bind,source=/src/webapp,target=/opt/webapp,readonly \
training/webapp \
python app.py使用 -v 参数(传统方式)
docker run -d -P \
--name web \
-v /src/webapp:/opt/webapp \
training/webapp \
python app.py最佳实践
数据卷使用建议
- 优先使用数据卷而不是 bind mount
- 使用有意义的卷名
- 定期备份重要数据
安全建议
- 谨慎使用 bind mount
- 限制容器对主机目录的访问权限
- 避免挂载敏感目录
性能优化
- 避免挂载大量小文件
- 合理使用 tmpfs 挂载
- 选择合适的存储驱动
参考资料: