数据卷与挂载
什么是数据卷?
- 我们要知道一件事,容器是一次性的。
- 一个容器启动起来后,容器内的文件和目录会随着容器的停止而被永久删除,导致容器数据丢失。所以用数据卷来存储容器数据。
| 命令 | 说明 |
|---|---|
docker volume ls | 查看所有数据卷 |
docker volume create 数据卷名称 | 创建数据卷 |
docker volume inspect 数据卷ID/名称 | 查看数据卷详情 |
docker volume prune | 删除所有未使用的数据卷 |
docker volume rm 数据卷ID/名称 | 删除指定数据卷 |
挂载说明
通过挂载将容器内部需要记录的数据挂载到主机上,实现数据持久化。
相关命令:docker run -d --name 容器名称 -v 数据卷名称:容器内路径 镜像名称:版本号
数据卷案例
bash
# 一般情况,启动容器时候后面加上-v参数,没有指定数据卷名称,会自动创建一个数据卷。
[root@rocky vitepress]# docker run -d --name test -v blogvl:/usr/share/nginx/html myblog:v1.0
5975ca0beb78c94e343fa0a60be5e93129b6111bdc94fb917dadefcb0e329184
# 查看数据卷
[root@rocky vitepress]# docker volume ls
DRIVER VOLUME NAME
local blogvl
# 查看数据卷详情
[root@rocky vitepress]# docker volume inspect blogvl
[
{
"CreatedAt": "2026-04-02T15:36:59+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/blogvl/_data",
# 数据卷的存放路径在/var/lib/docker/volumes/数据卷名称或者ID/_data
"Name": "blogvl",
"Options": null,
"Scope": "local"
}
]
# 查看数据卷文件内容,这是刚才指定的容器内路径/usr/share/nginx/html/下的文件都挂载到了这里
[root@rocky vitepress]# ls /var/lib/docker/volumes/blogvl/_data/
404.html 50x.html assets Development_log hashmap.json img index.html Ku Life_log Other svg Tech_log video vp-icons.css 挂载案例
bash
docker volume create volume1 # 创建数据卷volume1
# 编辑数据卷volume1的index.html文件里面写一个Hello World
vim /var/lib/docker/volumes/volume1/_data/index.html
# 启动一个容器,挂载数据卷volume1到容器内路径/usr/share/nginx/html/
[root@rocky ~]# docker run --name test1 -d -p 81:80 -v volume1:/usr/share/nginx/html myblog:v1.0
47cac816be7b39f459e90438742e3655bb0205cda573fb078dbbbb243708d56d
# 访问81端口,会显示Hello World,原来的index.html文件内容被volume1的index.html文件内容替换掉了
注意
- 大多情况下,都是volume数据卷写入容器
volume→容器 - 只有在容器启动时候,指定挂载数据卷,容器里的内容才会写入数据卷volume,包括在容器内更改创建新内容。
容器→volume