创建数据卷是什么
创建一个由引擎管理的命名卷,用来存放需要跨容器生命周期保留的数据。卷的落盘位置在引擎的数据根目录下,路径由引擎维护,使用者按名字引用。数据库目录、上传目录、需要归档的数据都属于典型场景。
基本信息
| 语法 | docker volume create [选项] 名称 |
|---|---|
| 默认驱动 | 本地驱动,数据落在本机数据根目录下 |
| 常用选项 | 驱动选择、标签标注、驱动专用参数 |
| 命名规则 | 同名卷不能重复创建,名称即引用标识 |
| 查看位置 | 用查看命令可看到卷在宿主上的实际挂载点 |
典型使用场景
- 数据库持久化:把数据目录挂到命名卷,容器重建数据仍在
- 上传目录保留:用户上传的文件放卷里,便于备份与迁移
- 多容器共享数据:多个容器挂载同一卷,实现文件级共享
- 归档与迁移:按需把卷内容导出到备份存储
- 环境隔离:测试与生产使用不同卷,避免数据混淆
常用示例
常用示例
docker volume create pgdata # 创建命名卷
docker volume create --label env=prod --label app=web appdata # 带标签便于筛选
docker volume ls # 列出本地卷
docker volume inspect pgdata # 查看实际挂载点
docker run -d -v pgdata:/var/lib/postgresql/data --name db postgres:16-alpine # 挂载使用卷与宿主目录的选择
| 对比项 | 命名卷 | 宿主目录绑定 |
|---|---|---|
| 位置 | 引擎数据根目录下,由引擎管理 | 任意宿主路径,由使用者维护 |
| 可移植性 | 随编排迁移更方便 | 依赖宿主目录结构 |
| 备份方式 | 通过卷导出或在容器内归档 | 直接复制宿主目录 |
| 权限管理 | 由容器内进程创建,属主可预期 | 需自行维护属主与权限 |
| 典型场景 | 有状态服务的数据目录 | 配置、源码、静态资源 |
使用卷的注意点
- 空卷挂到非空目录时,容器内原内容会被复制到卷里,行为容易误判
- 卷名不存在时挂载会自动创建,显式创建便于统一命名与打标签
- 卷没有挂载到任何容器时不会自动清理,需要单独按名删除
- 卷的数据不会随镜像或容器打包带走,迁移时要单独处理
- 删除卷不可恢复,操作前确认备份或业务已下线
卷的位置由引擎维护,不要当成普通宿主目录去手工编辑。需要人工改文件时,用临时容器挂载卷或通过宿主上的实际挂载点操作,并注意权限。
删除卷会连同业务数据一起消失,且无法恢复。生产环境把卷的删除权限与普通运维操作分开,并保留备份。