Docker Volume(数据卷)是 Docker 中用于持久化存储数据的机制,解决容器重启或删除后数据丢失的问题。
为什么需要 Volume?
容器本身是无状态的,数据默认存储在容器内部的可写层:
容器删除 → 数据丢失
容器重建 → 数据清空
多容器共享数据 → 无法实现
Volume 将数据存储到宿主机指定位置,独立于容器生命周期。
三种挂载方式对比
常用命令
管理 Volume
docker volume create my-data # 创建命名卷
docker volume ls # 列出所有卷
docker volume inspect my-data # 查看卷详情(挂载点、大小等)
docker volume rm my-data # 删除卷
docker volume prune # 删除所有未使用的卷使用 Volume 运行容器
# 方式1:匿名卷(自动创建)
docker run -d -v /data nginx
# 方式2:命名卷(推荐,可复用)
docker run -d -v redis-data:/data redis
# 方式3:Bind Mount(开发常用)
docker run -d -v /home/user/code:/app nginx实际示例
1. Redis 数据持久化
docker run -d \
--name redis \
-v redis-data:/data \
redis:7.2 redis-server --appendonly yesredis-data卷保存 AOF 持久化文件容器删除后,新容器挂载同一卷可恢复数据
2. MySQL 数据库
docker run -d \
--name mysql \
-v mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0Docker Compose 中的 Volume
命名卷(推荐生产环境)
version: '3.8'
services:
redis:
image: redis:7.2
volumes:
- redis-data:/data
volumes:
redis-data: # 声明命名卷,Docker 自动管理Bind Mount(推荐开发环境)
version: '3.8'
services:
web:
image: nginx
volumes:
- ./html:/usr/share/nginx/html # 宿主机当前目录的 html 映射到容器
- /var/log/nginx:/var/log/nginx # 日志映射到宿主机Volume vs Bind Mount 选择
查看 Volume 存储位置
docker volume inspect redis-data
# 输出中的 "Mountpoint" 就是宿主机实际路径
# 通常是 /var/lib/docker/volumes/redis-data/_data