Docker 数据卷(Volume) 是 Docker 中用于实现容器与宿主机之间,或容器与容器之间共享数据的一种机制。简单理解,它是 Docker 容器中一个特殊的目录或文件,可以独立于容器的生命周期存在。
为了让你更直观地理解,可以看几个关键特性:
目录
1. 它解决了什么问题?
- 数据持久化:默认情况下,容器内创建的文件会随着容器删除而消失。数据卷让数据在容器删除后依然保留在宿主机上。
- 数据共享:多个容器可以挂载同一个数据卷,实现配置、日志或代码的实时共享。
- 性能优化:绕过容器的写时复制(CoW)机制,适合高I/O场景(如数据库)。
2. 核心特点
- 独立生命周期:删除容器时,数据卷默认不会自动删除(除非用
docker rm -v或docker volume prune手动清理)。 - 可直接挂载:宿主机上数据卷的存储位置由 Docker 管理(通常位于
/var/lib/docker/volumes/),无需关心具体路径。 - 支持驱动插件:可挂载远程存储(如NFS、Ceph、云厂商的块存储)。
3. 三种挂载方式对比(帮你更好区分)
| 类型 | 命令示例 | 特点 |
|---|---|---|
| 数据卷(Volume) | -v mydata:/data |
Docker管理,推荐用于持久化数据 |
| 绑定挂载(Bind Mount) | -v /host/path:/container/path |
直接映射宿主机任意路径,常用于开发调试 |
| 临时挂载(tmpfs) | --tmpfs /tmp |
仅存于内存,容器停止后数据消失 |
4. 常用操作(快速上手)
bash
# 创建数据卷
docker volume create my_volume
# 运行容器时挂载卷
docker run -v my_volume:/app/data nginx
# 查看数据卷列表
docker volume ls
# 查看卷详情(包括宿主机实际路径)
docker volume inspect my_volume
# 删除未使用的卷
docker volume prune
5. 典型使用场景
- 数据库容器:如 MySQL、PostgreSQL 的数据目录挂载到卷,防止重启丢失数据。
- 配置文件管理:多个 Nginx 容器共享同一个配置卷。
- 日志收集:应用容器写日志到卷,另一个日志采集容器读取该卷。
- 开发热加载:绑定挂载本地代码目录到容器内,修改代码即时生效。
简单总结:把它想象成一个“随身U盘”——容器运行时可以插上用,容器删除后U盘里的数据依然存在,还可以再插到其他容器上使用。
0 条评论