具名挂载和匿名挂载
1,匿名挂载
直接 -v 容器路径(不指定主机路径)
[root@CentOs test]# docker run -d -P -v /etc/nginx --name nginx01 nginx
ea2ec1d1ace0f839292f0c03a14c2e470a35cc1bd07692260de7078c2cd981cd
[root@CentOs test]#
查看所有的volume(卷)的情况:
[root@CentOs test]# docker volume ls
DRIVER VOLUME NAME
local 8fbce0de9f72a1df4efc21c43b86d803ac0063a7cf0e5474c8579916a818341c
local a17a1bda8611d9b7a7395951a6007aae95dedccc318cff34e592e3b2a3d2f3ee
local c8f02c0d29c3366a9524cea799c5756fd0aafb01d40ea4e6b77473944c74e76c
local cbf06d2d8044d08465175eda76baac44e92f980bfc61f2d6f0a1f511c25b46a3
[root@CentOs test]#
我们发现,这就是匿名挂载,我们在-v时只写了容器内的路径,没有写容器外的路径!
2,具名挂载:
[root@CentOs test]# docker run -d -P --name nginx02 -v juming_nginx:/etc/nginx nginx
4dd0473a70def2ffcd3f83142b6700ebd0dcb6e9d0c4c35ef8f85b472bc27c8e
[root@CentOs test]# docker volume ls
DRIVER VOLUME NAME
local 8fbce0de9f72a1df4efc21c43b86d803ac0063a7cf0e5474c8579916a818341c
local a17a1bda8611d9b7a7395951a6007aae95dedccc318cff34e592e3b2a3d2f3ee
local c8f02c0d29c3366a9524cea799c5756fd0aafb01d40ea4e6b77473944c74e76c
local cbf06d2d8044d08465175eda76baac44e92f980bfc61f2d6f0a1f511c25b46a3
local juming_nginx
[root@CentOs test]#
通过-v 卷名:容器内的路径
查看一下这个卷所在的位置
docker volume inspect 卷名
[root@CentOs ~]# docker volume inspect juming_nginx
[
{
"CreatedAt": "2022-03-20T11:43:41+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming_nginx/_data",
"Name": "juming_nginx",
"Options": null,
"Scope": "local"
}
]
[root@CentOs ~]#
由此可知,docker容器内的所有的卷,没有指定目录的情况下,都是在/var/lib/docker/volumes/xxx/_data下面
我们通过具名挂载可以方便的找到我们的一个卷,大多数情况下使用具名挂载
3,如何确信是具名挂载还是匿名挂载,还是指定路径挂载?
-v 容器内路径 匿名挂载
-v 卷名:容器内路径 具名挂载
-v /主机路径:容器指定路径 指定路径挂载
4,拓展:
通过-v 容器内路径:ro/rw 来改变读写权限
ro:readonly 只读
rw:readwrite 可读可写
一旦设置了容器权限,容器对我们挂载出来的内容就有了限定了!
docker run -d -P --name nginx02 -v juming_nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming_nginx:/etc/nginx:rw nginx
(只要看到ro就说明这个路径只能通过宿主机来改变,容器内是无法操作的)