Docker卷实现数据持久化,通过将数据存于独立存储空间(/var/lib/docker/volumes/)避免容器删除导致数据丢失;命名卷支持多容器共享、备份迁移,需手动清理闲置卷。

用 Docker 卷(Volume)实现数据持久化,核心是把容器内的数据“搬出”容器层,存到 Docker 管理的独立存储空间里。只要卷不删,容器删了、重启了、重跑了,数据都在。
为什么必须用 Volume 而不是直接存容器里
容器启动时加的可读写层是临时的——它依赖镜像只读层,所有写入操作都要先复制文件再修改(copy-on-write),不仅慢,而且一删容器,这层就彻底消失。Volume 绕过这套机制,直接映射到底层文件系统,数据不随容器生命周期波动。
- 镜像层只读,不能改
- 容器层临时,删容器即丢数据
- Volume 是独立实体,由 Docker 在 /var/lib/docker/volumes/ 下统一管理,删容器默认不删卷
创建和挂载命名卷的标准化流程
推荐始终使用命名卷(named volume),便于识别、备份和跨环境迁移。
- 创建卷:
docker volume create myapp-data - 运行容器并挂载:
docker run -d --name app1 -v myapp-data:/data nginx(-v后格式为 卷名:容器内路径) - 验证挂载位置:
docker volume inspect myapp-data→ 查看宿主机实际路径(如/var/lib/docker/volumes/myapp-data/_data)
多容器共享同一份数据的实操方式
多个容器读写同一个 Volume,天然支持实时同步,适合 Web + DB、日志收集器 + 分析器等协作场景。
- 启动第一个容器:
docker run -d --name db -v myapp-data:/var/lib/postgresql/data postgres - 启动第二个容器(共享同个卷):
docker run -d --name backup -v myapp-data:/backup alpine tar -cf /backup/backup.tar -C /backup . - 任意容器中写入的文件,其他挂载该卷的容器立刻可见
清理与维护的关键注意事项
Volume 默认不会被自动清理,长期不用的卷会堆积磁盘空间。
- 列出所有卷:
docker volume ls - 删除指定卷:
docker volume rm myapp-data(注意:必须确保没有容器正在使用) - 清空未被使用的卷:
docker volume prune(慎用,会删掉所有闲置卷) - 备份卷内容:进入宿主机对应路径打包,或用容器临时挂载后执行
tar命令导出


















