第一步:创建数据卷
docker volume create my-data
| 部分 | 含义 |
|---|---|
docker volume | Docker 数据卷管理命令 |
create | 创建新数据卷 |
my-data | 数据卷名称(可自定义) |
作用:在 /var/lib/docker/volumes/my-data/_data 创建一个目录,用来持久化数据。
第二步:查看数据卷
docker volume ls
第三步:查看数据卷详情
docker volume inspect my-data
| 部分 | 含义 |
|---|---|
inspect | 查看详细信息 |
输出重点:"Mountpoint": "/var/lib/docker/volumes/my-data/_data" 这是数据卷在宿主机上的实际位置。
第四步:写入数据到数据卷
docker run --rm -v my-data:/data alpine sh -c "echo 'hello docker volume' > /data/test.txt"
| 部分 | 含义 |
|---|---|
docker run | 运行一个容器 |
--rm | 容器退出后自动删除(不留垃圾) |
-v my-data:/data | 挂载数据卷:把宿主机的 my-data 数据卷挂载到容器的 /data 目录 |
alpine | 使用 Alpine Linux 镜像(只有 5MB,有 sh 命令) |
sh -c "..." | 在容器内执行 shell 命令 |
echo 'hello docker volume' > /data/test.txt | 向 /data/test.txt 写入内容 |
关键理解:-v 数据卷名:容器内路径
左边:宿主机上的数据卷名称
右边:容器内的目录
作用:容器内写入
/data的文件,实际保存在宿主机数据卷中
第五步:验证数据
docker run --rm -v my-data:/data alpine cat /data/test.txt
第六步:在宿主机直接查看
cat /var/lib/docker/volumes/my-data/_data/test.txt
| 部分 | 含义 |
|---|---|
/var/lib/docker/volumes/my-data/_data/ | 数据卷的实际存储路径 |
test.txt | 刚才写入的文件 |
关键理解:数据卷就是宿主机上的一个普通目录,可以直接用 cat、ls、cp 等命令操作。
第七步:备份数据卷
docker run --rm -v my-data:/source -v $(pwd):/backup alpine tar czf /backup/my-data-backup.tar.gz -C /source .
拆解:
| 部分 | 含义 |
|---|---|
-v my-data:/source | 把数据卷 my-data 挂载到容器的 /source |
-v $(pwd):/backup | 把当前目录挂载到容器的 /backup($(pwd) 是当前路径) |
alpine | 临时容器 |
tar czf | 打包命令:c=创建,z=gzip压缩,f=指定文件名 |
/backup/my-data-backup.tar.gz | 备份文件保存位置(在 /backup 目录下) |
-C /source | 先切换到 /source 目录 |
. | 打包当前目录(即 /source)的所有内容 |
关键理解:
/source是数据卷内容/backup是宿主机当前目录最终备份文件出现在你执行命令的目录
只要
-C /任意名字和-v my-data:/任意名字保持一致就行
| 你想备份的数据 | 挂载到容器哪里 | 打包时用 |
|---|---|---|
数据卷 my-data | /source | -C /source . |
| 备份文件保存位置 | 挂载到容器哪里 | 打包时指定 |
|---|---|---|
宿主机 /root | /backup |
|
第八步:删除原数据卷
docker volume rm my-data
| 部分 | 含义 |
|---|---|
rm | remove(删除)数据卷 |
注意:删除数据卷会永久丢失数据!所以要先备份。
第九步:恢复数据卷
docker volume create my-data-restored
创建新数据卷用于恢复。
docker run --rm -v my-data-restored:/target -v $(pwd):/backup alpine tar xzf /backup/my-data-backup.tar.gz -C /target
拆解:
| 部分 | 含义 |
|---|---|
-v my-data-restored:/target | 把新数据卷挂载到 /target |
-v $(pwd):/backup | 把当前目录(备份文件所在位置)挂载到 /backup |
tar xzf | 解压命令:x=解压,z=gzip解压,f=指定文件 |
/backup/my-data-backup.tar.gz | 备份文件位置 |
-C /target | 解压到 /target 目录 |
docker run --rm -v my-data-restored:/target alpine cat /target/test.txt
验证恢复是否成功。
命令参数速查表
| 参数 | 含义 | 示例 |
|---|---|---|
-v | 挂载数据卷 | -v my-data:/data |
--rm | 容器退出后自动删除 | docker run --rm ... |
$(pwd) | 当前目录路径 | -v $(pwd):/backup |
-C | tar 切换目录 | tar -C /source |
c | tar 创建 | tar czf |
x | tar 解压 | tar xzf |
z | tar gzip 压缩/解压 | tar czf / tar xzf |
f | tar 指定文件名 |
|
核心概念图

| 骤 | 命令 | 说明 |
|---|---|---|
| 1. 创建数据卷 | docker volume create my-data | 创建持久化存储 |
| 2. 写入数据 | docker run -it -v my-data:/data alpine sh | 进入容器写文件 |
| 3. 验证数据 | docker run --rm -v my-data:/data alpine cat /data/test.txt | 数据还在 |
| 4. 备份 | docker run --rm -v my-data:/source -v /root:/backup alpine tar czf /backup/backup.tar.gz -C /source . | 打包到宿主机 |
| 5. 删除 | docker rm <容器> + docker volume rm my-data | 模拟数据丢失 |
| 6. 恢复 | docker run --rm -v my-data-restored:/target -v /root:/backup alpine tar xzf /backup/backup.tar.gz -C /target | 解压恢复 |