当前位置 博文首页 > 文章内容

    Docker匿名挂载和具名挂载的具体使用

    作者:shunshunshun18 栏目:未分类 时间:2021-12-28 15:09:06

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    数据卷volume

    提到这个匿名挂在和具名挂载,其实要先普及一个知识,就是什么是volumes,这个volumes就是数据卷的意思。我们docker挂载会用到这个卷。

    数据卷的用处就是一个可供一个或者多个容器使用的特殊目录,他绕过UFS就是什么联合文件系统,提供了很多功能:
    (1)数据卷可以多个容器共享或者重用
    (2)对数据卷修改会立马生效
    (3)对数据卷的更新不会影响镜像
    (4)数据卷默认会一直存在,即使容器被删除了(结合2,3点特别像nacos)

    查看数据卷的命令可以用:

    docker volume --help

    实际上命令内容也不多如下:

    在这里插入图片描述

    实际上创建volume不用之前去创建,你挂载的时候命名,找不到他就会去根据你给的名字的创建一个新的有名字而不是一串哈希码的名字的数据卷volume。

    匿名挂载和具名挂载

    在前面的数据卷volume的知识补充下,实际上匿名挂在和具命挂载就能知道了,一个是没给数据卷名字的挂载,一个是给了指定数据卷名字的挂载。

    比如接着上次的挂载,我们是指定了指定路径的挂载,其实我们可以更简单挂载,连宿主机的指定路径不给,直接-v挂载docker容器的路径就可以。如下匿名挂载安装nginx。

    # 匿名挂载
    -P 大写的P, 映射随机端口
    -v 容器内路径
    docker run -d -P --name nginx01 -v /etc/nginx nginx
    

    实际上会返回一个哈希码,这个就是匿名挂载的数据卷的名字,你根据这个哈希码也可以找到对应的数据卷,对你来说是匿名的,实际人家还会给一个名字的。我们可以通过 volume ls命令来查看都有什么数据卷。

    docker volume ls
    

    那这个具名挂载就要指定数据卷,类似我们之前的指定路径挂载,但是这个我们不适用具体的指定路径而是数据卷的名字。

    # VOLUME NAME 当前显示为匿名数据卷, 在 -v 挂载的时候只写了容器内的路径,没有写宿主机的路径
    # 具名挂载
    # 通过 -v 卷名:容器内路径
    docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
    

    数据卷的位置

    我们既然设置了具体的数据卷,且对容器进行了挂载,也知道数据卷的用处,那数据卷在哪里呢?毕竟挂载的东西都在那里,看一眼位置在哪省着被误删了。

    实际他在docker的下面具体路径是:

    /var/lib/docker/volumes/xxxx/_data
    

    我们可以cd到这个路径下面看一下数据卷,像我就cd到第二个具名挂载nginx的数据卷目录下面看一下具体结构

    在这里插入图片描述

    总结一下我们挂载的方式都有哪些:

    如何确定是具名挂载还是匿名挂载, 亦或是指定路径挂载?
    -v 容器内路径 # 匿名挂载
    -v 数据卷名:/容器内路径 # 具名挂载
    -v /宿主机路径:/容器内路径 # 指定路径挂载

    # 通过 -v 容器内路径: ro rw 改变读写权限
    # ro readonly           只读
    # rw readwrite        读写
    # 如果设置了容器权限, 容器对挂载出来的数据就有权限限定了. 
    docker run -d -P --name nginx04 -v juming-nginx:/etc/nginx:ro nginx
    docker run -d -P --name nginx04 -v juming-nginx:/etc/nginx:rw nginx
    # ro    只要看到ro就说明这个路径只能通过宿主机来操作, 容器内部是无法操作