docker用volume实现数据持久化,将容器内需长期保存的数据(如数据库文件)映射至宿主机独立目录,删除容器不丢失数据;支持命名卷(docker volume create)、挂载(-v 卷名:路径)、查看(inspect)、清理(rm/prune)及匿名卷管理。

Docker 用 volume 管理持久化数据,核心是把容器里需要长期保留的数据(比如数据库文件、配置、日志)存到宿主机上独立的目录中,这样删容器也不会丢数据。
创建和查看 volume
用 docker volume create 手动建一个命名卷,Docker 会自动在 /var/lib/docker/volumes/ 下分配目录:
-
docker volume create mydb→ 创建名为mydb的卷 -
docker volume ls→ 列出所有已创建的卷 -
docker volume inspect mydb→ 查看它的宿主机实际路径(比如Mountpoint字段显示/var/lib/docker/volumes/mydb/_data)
挂载 volume 到容器
启动容器时用 -v 卷名:容器内路径 挂载,Docker 自动处理路径映射:
docker run -d --name mysql1 -v mydb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 mysql:8.0- 容器内写入
/var/lib/mysql的数据,实时落盘到宿主机的 volume 目录 - 重启或删除容器后,
mydb卷里的数据依然完整
清理不用的 volume
Volume 不会随容器自动删除,得手动管理:
- 先停用并删除关联容器:
docker stop mysql1 && docker rm mysql1 - 再删卷:
docker volume rm mydb - 清空所有未被使用的卷:
docker volume prune
匿名卷和自动创建
如果只写容器路径(如 -v /data),Docker 会自动创建一个匿名卷,但名字随机、难追踪:
- 适合临时测试,不建议用于生产环境
- 可通过
docker volume ls -f dangling=true查看未命名的闲置卷 - 真正要可靠管理,始终用命名卷 + 明确挂载点











