【Docker 学习八】docker具名和匿名挂载

具名和匿名挂载

匿名挂载不推荐

用法

1
2
3
4
5
6
v 只有容器内路径  不指定宿主机目录;会生成随机的宿主机挂载目录
-P 随机映射端口
docker run -d -P --name 容器名称 -v 容器内部路径 镜像名

查看所有的 volume 的情况
docker volume ls

配置nginx匿名挂载

1
2
docker run -d -P --name nginx02 -v /ect/nginx nginx
# 9b131a20688e...

查看所有的volume的情况

1
2
3
docker volume ls
# DRIVER VOLUME NAME
# local 55fc4f19cb4fb36d21a902027a2e3bd8a91647d6475ea1b99bb39346bd7f61a8

发现这种就是匿名挂载,我们在-v只写了容器内部的路径,没有写宿主机的路径
但是在宿主机下生成随机的挂载文件名

查看宿主机所在路径

1
docker inspect nginx02

截取Mounts的数组(列表)

1
2
3
4
5
6
7
8
9
10
11
12
{
"Type": "volume",
"Name": "55fc4f19cb4fb36d21a902027a2e3bd8a91647d6475ea1b99bb39346bd7f61a8",
# 宿主机所在路径
"Source": "/var/lib/docker/volumes/55fc4f19cb4fb36d21a902027a2e3bd8a91647d6475ea1b99bb39346bd7f61a8/_data",
# 容器内部所在路径
"Destination": "/ect/nginx",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}

所有的docker容器内的数据卷,没有指定目录情况下都是在/var/lib/docker/volumes/xxx/...

具名挂载推荐

用法

1
2
指明挂载点的文件名(卷名),不是路径
docker run -d -P --name 容器名 -v 卷名:容器内部路径 镜像名

配置nginx具名挂载

1
2
docker run -d -P --name nginx03 -v nginx03_v:/ect/nginx nginx
# 79bb88480e0b...

查看所有的volume的情况

1
2
3
docker volume ls
# DRIVER VOLUME NAME
# local nginx03_v

发现这种就是具名挂载,写指定挂载文件名(不是路径),生成挂载文件夹不再是随机的

查看特定的卷

用法
1
docker volume inspect 卷名
查看情况
1
docker volume inspect nginx03_v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
{
"CreatedAt": "2023-10-10T11:56:10+08:00",
"Driver": "local",
"Labels": null,
# 卷在宿主机所在路径
"Mountpoint": "/var/lib/docker/volumes/nginx03_v/_data",
# 卷名
"Name": "nginx03_v",
"Options": null,
"Scope": "local"
}
]

总结

我们通过具名挂载可以方便的找到我们的一个,大多数情况在使用的具名挂载

1
2
3
4
# 如何确定是`具名挂载`还是`匿名挂载`,还是`指定路径挂载`
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v 宿主机路径:容器内路径 # 指定路径挂载