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)  # 代表当前是否为可读可写状态
posted @ 2022-01-23 20:44  影梦无痕  阅读(265)  评论(0)    收藏  举报