docker 具名挂载和匿名挂载
具名挂载和匿名挂载说明:
卷名:每一次启动生成的容器都有一个名字,被称为卷名,如果没有额外起名,那么卷名被默认为随机的字符串
在挂载的时候,我们可以选择给挂载的卷命名,这就产生了一种是我们自己命名的卷,被叫做具名挂载,一种是默认方式命名的卷被称为匿名挂载
匿名挂载
# -v 容器内路径
# 命令
docker run -d -P -name Nginx01 -v /etc/nginx nginx
# 参数说明:
-P 是代表随机映射端口,-p 容器端口:宿主机端口
# 查看所有的volume的情况
docker volume ls
# 示例
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local 4433176a76427c979ff45c44fee3588727f0cc2877f6844a0ab18bcb4bf7427e
local 499008776a837b1defabfe11bf2f7146943c37c0ec274257ac08ba41f09c717d
- 效果图

具名挂载
# 命令
docker run -d -P --name Nginx02 -v juming:/etc/nginx nginx
# 参数说明
-v juming:/etc/nginx 这里的写法就是具名挂载的写法,-v 卷名:容器内路径
# 示例
[root@localhost ~]# docker run -d -P --name Nginx02 -v juming:/etc/nginx nginx
646d3474fd0c828a9663990a54f6e2b28da4c6d2a0f2db92283e3cf8d46e4d4e
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local 4433176a76427c979ff45c44fee3588727f0cc2877f6844a0ab18bcb4bf7427e
local 499008776a837b1defabfe11bf2f7146943c37c0ec274257ac08ba41f09c717d
local juming
- 效果图

挂载卷存放位置
# 命令
docker volume inspect juming
# 示例
[root@localhost ~]# docker volume inspect juming
[
{
"CreatedAt": "2022-01-23T19:59:25+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming/_data",
"Name": "juming",
"Options": null,
"Scope": "local"
}
]
# 所有的docker容器内的卷,在没有指定宿主机目录的情况下,都是把目录指定到这里:"/var/lib/docker/volumes/{卷名}/_data"
# 需要注意的是"/var/lib/docker/"目录下,是docker的工作目录
[root@localhost ~]# cd /var/lib/docker/
[root@localhost docker]# ls
buildkit containers image network overlay2 plugins runtimes swarm tmp trust volumes
# 进入volumes目录后我们可以发现我们创建的,没有指定宿主机的目录卷在这里面都是可以看见的
[root@localhost docker]# cd volumes/
[root@localhost volumes]# ll
总用量 24
drwx-----x 3 root root 19 1月 23 19:46 4433176a76427c979ff45c44fee3588727f0cc2877f6844a0ab18bcb4bf7427e
drwx-----x 3 root root 19 1月 16 23:18 499008776a837b1defabfe11bf2f7146943c37c0ec274257ac08ba41f09c717d
brw------- 1 root root 253, 0 1月 23 19:46 backingFsBlockDev
drwx-----x 3 root root 19 1月 23 19:59 juming
-rw-------. 1 root root 32768 1月 23 19:59 metadata.db
# 而进入juming/_data/目录后,我们可以看见,nginx挂载出来的配置和数据都在这下面
[root@localhost volumes]# cd juming/_data/
[root@localhost _data]# ll
总用量 24
drwxr-xr-x 2 root root 26 1月 23 19:59 conf.d
-rw-r--r-- 1 root root 1007 12月 28 23:28 fastcgi_params
-rw-r--r-- 1 root root 5349 12月 28 23:28 mime.types
lrwxrwxrwx 1 root root 22 12月 28 23:40 modules -> /usr/lib/nginx/modules
-rw-r--r-- 1 root root 648 12月 28 23:40 nginx.conf
-rw-r--r-- 1 root root 636 12月 28 23:28 scgi_params
-rw-r--r-- 1 root root 664 12月 28 23:28 uwsgi_params
- 效果图

拓展
# 如何确定挂载的方式:
-v 容器内路径 # 匿名挂载
-v juming:容器内路径 #具名挂载
-v 容器内路径:宿主机路径 #指定路径挂载
# 通过-v 容器内路径(juming:容器内路径):ro(rw)改变独写权限
ro:read-only #只读
rw: read-write #可读可写
# 命令
docker run -d -P --name Nginx03 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name Nginx03 -v juming-nginx:/etc/nginx:rw nginx
# 一旦设置了容器权限,容器对我们挂载出来的内容就有限定了
# 只要看见有ro这个参数存在,就说明这个容器路径只能通过宿主机来操作,容器内部是无法操作的
# 查询某一个容器当前权限的方式:
# 设置权限为只读的情况(ro):
docker inspect Nginx03
# 结果
"Mounts": [
{
"Type": "volume",
"Name": "juming-nginx",
"Source": "/var/lib/docker/volumes/juming-nginx/_data",
"Destination": "/etc/nginx",
"Driver": "local",
"Mode": "ro",
"RW": false,
"Propagation": ""
}
],
# 默认或者设置权限为可读可写的情况(rw):
docker inspect Nginx02
# 结果
"Mounts": [
{
"Type": "volume",
"Name": "juming",
"Source": "/var/lib/docker/volumes/juming/_data",
"Destination": "/etc/nginx",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
],
# 说明
"Mode": "z"("Mode": "ro") # 代表当前模式
"RW": true("RW": false) # 代表当前是否为可读可写状态

浙公网安备 33010602011771号