Docker 具名和匿名挂载
一、匿名挂载
1.启动一个nginx 容器
语法格式:
-v 容器内路径!
[root@yang ~]# docker run -d -P --name nginx01 -v /etc/nginx nginx
328790a86f3b5956dabb636c02f8c006ec3c9688eda97dc66c2dd0e82b7855c
2.查看所有 volume 的情况
[root@yang ~]# docker volume ls
DRIVER VOLUME NAME
local 4dcdd5b0a408438d90683df372cbc31f0fc48497c4252f61cf9d9c2a03747c01
以上匿名挂载的卷,就由系统随机生成一个乱码式的卷名,如上!
3.这里发现,这种就是匿名挂载,在 -v 的时候只加容器内路径,没有加容器外路径!
二、具名挂载
1.重新启动一个nginx 容器
语法格式:
-v 卷名:容器内路径
注:卷名前面不加路径/
[root@yang ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx 00a30275a6db4650fb84915fdb725ec83815353aea7c913d61b319fa8e01074
2.查看所有 volume 的情况
[root@yang ~]# docker volume ls DRIVER VOLUME NAME local 4dcdd5b0a408438d90683df372cbc31f0fc48497c4252f61cf9d9c2a03747c01 local juming-nginx
3.查看具名卷的信息
[root@yang ~]# docker volume inspect juming-nginx [ { "CreatedAt": "2021-01-27T15:54:14+08:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data", "Name": "juming-nginx", "Options": null, "Scope": "local" } ]
所有docker容器内的卷,没有指定目录的情况下,都保存在“/var/lib/docker/volumes/xxx/_data”目录下。 # xxx为启动容器时设置的卷名
# 进入具名挂载的目录查看卷内的数据,可以看到nginx的配置文件存在!
[root@yang ~]# cd /var/lib/docker/volumes/juming-nginx/_data/ [root@yang _data]# ls conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
!!!具名挂载可以方便找到一个卷,大多数情况下,推荐使用【具名挂载】
三、如何确定是匿名挂载,具名挂载,或者是指定路径挂载?
-v 容器内路径 # 匿名挂载 -v 卷名:容器内路径 # 具名挂载 -v / 宿主机目录:容器内目录 # 指定路径挂载
四、拓展
1.通过 -v 容器内路径,ro rw 改变容器内权限
ro readonly # 只读
rw readwrite # 可读可写
2.一旦设置了容器内权限,容器对我们挂在出来的内容就有限定了
[root@yang _data]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx [root@yang _data]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
3. ro 只要看到ro,就说明这个路径只能通过宿主机来修改,容器内部无法操作!