docker学习:Docker匿名挂载和具名挂载

数据卷volume

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

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

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

docker volume --help

实际上命令内容也不多如下:
docker学习:Docker匿名挂载和具名挂载_第1张图片
实际上创建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的数据卷目录下面看一下具体结构

docker学习:Docker匿名挂载和具名挂载_第2张图片
总结一下我们挂载的方式都有哪些:

# 如何确定是具名挂载还是匿名挂载, 亦或是指定路径挂载?
-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就说明这个路径只能通过宿主机来操作, 容器内部是无法操作

你可能感兴趣的:(docker,docker,容器,运维)