Docker 存储卷用于持久化数据,可以独立于容器生命周期。
docker 创建存储卷,查看存储卷 ,挂载存储卷,删除存储卷,具体如下:
1️⃣ 创建存储卷
bash
# 创建一个名为 my_volume 的存储卷
docker volume create my_volume
其他的参数
bash
docker volume create \
--driver local \ # 使用本地卷驱动
--label project=demo \ # 添加标签
my_volume
例如:使用其他机器的存储
bashdocker volume create \ --driver local \ --opt type=cifs \ --opt device=//192.168.10.88/share-data \ --opt "o=username=Administrator,password=123456,domain=domain" \ share-data
2️⃣ 查看存储卷
查看本地所有存储卷:
bash
docker volume ls
输出示例:
bash
DRIVER VOLUME NAME
local my_volume
local another_volume
查看某个卷的详细信息:
bash
docker volume inspect my_volume
输出示例:
bash
[
{
"Name": "my_volume",
"Driver": "local",
"Mountpoint": "/home/data/docker/volumes/my_volume/share-data",
"Labels": {
"project": "demo"
},
"Scope": "local"
}
]
这里 Mountpoint 就是卷在宿主机上的实际路径。
3️⃣ 挂载存储卷
创建容器时挂载卷,使用 -v 或 --mount:
方式 1:简洁写法
bash
docker run -it --name my_container -v my_volume:/app/data ubuntu /bin/bash
my_volume:存储卷名称/app/data:容器内挂载路径
容器内 /app/data 的数据会持久化到 my_volume。
方式 2:推荐写法(更可读)
bash
docker run -it --name my_container \
--mount source=my_volume,target=/app/data \
ubuntu /bin/bash
建议在生产环境使用
--mount方式,语义更清晰。
如果需要将存储卷挂载到正在运行的容器中,可以通过 docker commit 和 docker run 组合实现,因为直接修改运行中容器的挂载点较为复杂。
停止当前容器(假设容器名为 my_container):
bash
docker stop my_container
提交容器为新的镜像:
bash
docker commit my_container my_new_image
基于新镜像重新运行容器,并挂载存储卷:
bash
docker run -d --name my_new_container -v my_volume:/path/in/container my_new_image
直接创建并挂载存储卷到新容器
如果是新容器,可以直接在运行命令中创建并挂载存储卷:
bash
docker run -d --name my_container -v my_volume:/path/in/container my_image
验证挂载是否成功
进入容器查看挂载点:
bash
docker exec -it my_container ls /path/in/container
使用绑定挂载(Bind Mount)
如果需要挂载主机目录而非 Docker 管理的存储卷,可以使用绑定挂载:
bash
docker run -d --name my_container -v /host/path:/container/path my_image
4️⃣ 删除存储卷
注意:删除卷会清除卷内所有数据。
查看卷是否在使用
bash
docker ps -a --filter volume=my_volume
确保没有容器正在使用这个卷。
删除卷
bash
docker volume rm my_volume
删除所有未使用的卷(谨慎):
bash
docker volume prune
🔹 总结操作流程
- 创建卷:
docker volume create my_volume - 查看卷:
docker volume ls/docker volume inspect my_volume - 挂载卷:
docker run -v my_volume:/app/data或--mount source=my_volume,target=/app/data - 删除卷:
docker volume rm my_volume/docker volume prune