Docker进阶(一):docker -v目录挂载

bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test tmp usr var


### 四、宿主机的目录如果为相对路径呢?


这次,我们换个目录名test1试试



docker run -it -v test1:/soft centos /bin/bash


再到宿主机上查看是否新增了一个/test1目录,结果没有,是不是因为我用的是相对路径,所以生成的test1目录在当前目录下,结果发现还是没有。那容器内的/soft目录挂载到哪里去了?通过docker inspect命令,查看容器“Mounts”那一部分,我们可以得到这个问题的答案。



“Mounts”: [
{
“Name”: “test1”,
“Source”: “/var/lib/docker/volumes/test1/_data”,
“Destination”: “/soft”,
“Driver”: “local”,
“Mode”: “z”,
“RW”: true
}
],


可以看出,容器内的/soft目录挂载的是宿主机上的/var/lib/docker/volumes/test1/\_data目录


原来,所谓的相对路径指的是/var/lib/docker/volumes/,与宿主机的当前目录无关。


### 五、如果只是 -v 指定一个目录,这个又是如何对应呢?


启动一个容器



[root@localhost ~]# docker run -it -v /test2 centos /bin/bash
[root@ea24067bc902 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys test2 tmp usr var


同样使用docker inspect命令查看宿主机的挂载目录



“Mounts”: [
{
“Name”: “96256232eb74edb139d652746f0fe426e57fbacdf73376963e3acdb411b3d73a”,
“Source”: “/var/lib/docker/volumes/96256232eb74edb139d652746f0fe426e57fbacdf73376963e3acdb411b3d73a/_data”,
“Destination”: “/test2”,
“Driver”: “local”,
“Mode”: “”,
“RW”: true
}
],


可以看出,同3中的结果类似,只不过,它不是相对路径的目录名,而是随机生成的一个目录名。


### 六、如果在容器内修改了目录的属主和属组,那么对应的挂载点是否会修改呢?


首先开启一个容器,查看容器内/soft目录的属性



[root@localhost ~]# docker run -it -v /test:/soft centos /bin/bash
[root@b5ed8216401f /]# ll -d /soft/
drwxr-xr-x 2 root root 6 Sep 24 03:48 /soft/


查看宿主机内/test目录的属性



[root@localhost ~]# ll -d /test/
drwxr-xr-x 2 root root 6 Sep 24 11:48 /test/


在容器内新建用户,修改/soft的属主和属组



[root@b5ed8216401f /]# useradd victor
[root@b5ed8216401f /]# chown -R victor.victor /soft/
[root@b5ed8216401f /]# ll -d /soft/
drwxr-xr-x 2 victor victor 6 Sep 24 03:48 /soft/


再来看看宿主机内/test目录的属主和属组是否会发生变化?



[root@localhost ~]# ll -d /test/
drwxr-xr-x 2 mycat mycat 6 Sep 24 11:48 /test/


竟然变为mycat了。。。


原来,这个与UID有关系,UID,即“用户标识号”,是一个整数,系统内部用它来标识用户。一般情况下它与用户名是一一对应的。


首先查看容器内victor对应的UID是多少,



[root@b5ed8216401f /]# cat /etc/passwd | grep victor
victor❌1000:1000::/home/victor:/bin/bash


victor的UID为1000,那么宿主机内1000对应的用户是谁呢?



[root@localhost ~]# cat /etc/passwd |grep 1000
mycat❌1000:1000::/home/mycat:/bin/bash


可以看出,宿主机内UID 1000对应的用户是mycat。


### 七、容器销毁了,在宿主机上新建的挂载目录是否会消失?


在这里,主要验证两种情况:一、指定了宿主机目录,即 -v /test:/soft。二、没有指定宿主机目录,即-v /soft


第一种情况:



[root@localhost ~]# rm -rf /test --首先删除宿主机的/test目录
[root@localhost ~]# ls / --可以看到,宿主机上无/test目录
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@localhost ~]# docker run -it --name=centos_test -v /test:/soft centos /bin/bash --启动容器,为了删除方便,我用–name参数指定了容器的名字
[root@82ad7f3a779a /]# exit
exit
[root@localhost ~]# docker rm centos_test --删除容器
centos_test
[root@localhost ~]# ls / --发现 /test目录依旧存在
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test tmp usr var


可以看出,即便容器销毁了,新建的挂载目录不会消失。进一步也可验证,如果宿主机目录的属主和属组发生了变化,容器销毁后,宿主机目录的属主和属组不会恢复到挂载之前的状态。


第二种情况,通过上面的验证知道,如果没有指定宿主机的目录,则容器会在/var/lib/docker/volumes/随机配置一个目录,那么我们看看这种情况下的容器销毁是否会导致相应目录的删除


首先启动容器



[root@localhost ~]# docker run -it --name=centos_test -v /soft centos /bin/bash
[root@6b75579ec934 /]# exit
exit


通过`docker inspect`命令查看容器在宿主机上生成的挂载目录



“Mounts”: [
{
“Name”: “b53164cb1c9f1917788638692fb22ad11994cf1fbbc2461b6c390cd3e10ea301”,
“Source”: “/var/lib/docker/volumes/b53164cb1c9f1917788638692fb22ad11994cf1fbbc2461b6c390cd3e10ea301/_data”,
“Destination”: “/soft”,
“Driver”: “local”,
“Mode”: “”,
“RW”: true
}
],


#### 算法刷题

大厂面试还是很注重算法题的,尤其是字节跳动,算法是问的比较多的,关于算法,推荐《LeetCode》和《算法的乐趣》,这两本我也有电子版,字节跳动、阿里、美团等大厂面试题(含答案+解析)、学习笔记、Xmind思维导图均可以分享给大家学习。

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)**

![](https://img-blog.csdnimg.cn/img_convert/c582a01373152bb4cd38bc6ad5cc8027.png)



**写在最后**

**最后,对所以做Java的朋友提几点建议,也是我的个人心得:**

1.  疯狂编程

2.  学习效果可视化

3.  写博客
4.  阅读优秀代码
5.  心态调整

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值