Docker具名挂载和匿名挂载
- 结论
- 1、匿名挂载
- 2.具名挂载
- ro和rw
结论
匿名挂载:卷挂载只写容器里面的路径,不写容器外的路径
如何确定是匿名挂载还是具名挂载,还是指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主内路径:容器内路径 #指定路径挂载
1、匿名挂载
# docker run -d -P --name nginx01 -v /etc/nginx nginx
//端口映射-p(小写)、-P(大写)区别
-p指定要映射的端口,一个指定端口上只可以绑定一个容器
-P将容器内部开放的网络端口随机映射到宿主机的一个端口上,即对外开放的端口是随机的
查看所有volume情况
# docker volume ls
DRIVER VOLUME NAME
local 4a3daf61b2e4f14edd92eaf84515b82ac863ca945497b5a71642506b88cfea49
local 78a889203c9cd658a64b6bf25870bea2a25a11e127aa48b027d0750f44a7cc78
local 2985c543eadf37ced04f451c8bd056df2032518eab3dc1e00c24766ac2aaf8b5
local c0cf9727552b0df0ebd88919cab016730450a3a1a31f48905c7b88cf2152dd36
local c00400d2fea2d074078b8f20d03c111df306beb6385aeed2d86a101e3b3bfe72
local ce7cc5dac50c58ff44a5f13f84d00e2100fadbcf1fea2788b334854f2e4c1080
local ffe9eafba04a7e2ae4d7e12f1049c47f041a3d6b0eb6bcfa4734f08184cfb460
这里发现,这种就是匿名挂载,我们在-v 只写了容器内的路径,没有写容器的路径!
2.具名挂载
具名挂载:就是挂载的卷定义一个自己的名字,可以方便的查找
# docker run -d -P --name nginx02 -v Bertram:/etc/nginx nginx
# docker volume ls
DRIVER VOLUME NAME
.....
local Bertram
查看卷所对应的路径
# docker volume inspect Bertram
[
{
"CreatedAt": "2020-10-19T15:24:58+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/data/docker/volumes/Bertram/_data",
"Name": "Bertram",
"Options": null,
"Scope": "local"
}
]
所有的docker容器内的卷,没有指定目录的情况下都是在 '/data/docker/volumes’目录下
这里默认的存储路径是修改过的,如何修改大家可以参考这篇文章
我们通过具名挂载以方便的找到我们的一个卷,大多数使用的都是具名挂载。
ro和rw
# 通过 -v 容器内路径,ro rw改变读写权限
ro readonly #只读
rw readwrite #可读可写
# 一旦这个设置了容器权限,容器对我们挂载出来的内容就有了限定
docker run -d -P --name nginx02 -v Bertram:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v Bertram:/etc/nginx:rw nginx
# 只要看到ro就说明这个路径只能通过宿主机来操作,容器内无法操作。