Docker 数据卷(Volume) 是 Docker 中用于实现容器与宿主机之间,或容器与容器之间共享数据的一种机制。简单理解,它是 Docker 容器中一个特殊的目录或文件,可以独立于容器的生命周期存在。

为了让你更直观地理解,可以看几个关键特性:

1. 它解决了什么问题?

  • 数据持久化:默认情况下,容器内创建的文件会随着容器删除而消失。数据卷让数据在容器删除后依然保留在宿主机上。
  • 数据共享:多个容器可以挂载同一个数据卷,实现配置、日志或代码的实时共享。
  • 性能优化:绕过容器的写时复制(CoW)机制,适合高I/O场景(如数据库)。

2. 核心特点

  • 独立生命周期:删除容器时,数据卷默认不会自动删除(除非用 docker rm -vdocker 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盘里的数据依然存在,还可以再插到其他容器上使用。

分类: Docker

0 条评论

发表回复

您的电子邮箱地址不会被公开。