在使用docker的时候,我们的数据存储在哪里呢?容器只是运行在一个用户空间的程序,那么数据放在本地磁盘中?
我发现如果要说docker的存储,这个话题会很长很长。。。所以针对昨天提出的问题来展开说一点点。。。
我是root,为何不能操控一切
如上图所示,将本机的一个文件挂载到容器的文件之中,然后进入之后,发现并不能查看或者打开这个文件,发现权限不足。
我是root,为啥我不能操作一切指令。。。莫非这是一个假的root。。。
在创建容器的时候,只要加一个选项即可,就是--privileged,也就是让容器有权限来操作这个文件:
在使用这种方式启动之后,如果容器修改了这个文件,那么本机上的文件也会发生改变,因为是相当于挂载上去的。看有的地方说,当修改此文件的时候,inode会发生改变,在这里没有发生此种情况。
有人说是因为不是挂载的目录,所以使用挂载目录的方式来进行测试,如下:
在查看挂载的数据卷的时候,可以使用如下命令(可以看到其实两个都是有读写权限的):
主要的区别在如下所示:
为啥有的人直接挂载就可以使用了,而这个不行呢?主要是因为存储的驱动 不同,如下是此处使用的驱动:
至于为啥这个驱动要使用这个选项,那么我想,只能从源码去找答案了。。。以上就是将本机的文件共享给容器的操作了
在使用docker info的时候,也可以看到相关的存储驱动。。。不过生产环境使用的都是overlay。
当主机上的文件和容器需要相互交互的时候,其实使用docker cp命令是一样的,这个命令和scp的用法基本上相同,如下所示:
基本的使用方法都是docker cp src dst。
从以上看出重启容器之后,文件都不会丢失,这个只是一个读写层。
再很多的时候,我们说容器是无状态的,其实表示的意思是容器中的数据不需要持久化保存,从而当这个容器损坏后,我们可以直接将这个容器删除,然后重新新建一个容器来进行运行。。。。这种很酷,反正不怕数据修改错了,但是当这个机器物理损坏之后,如果重新拉取镜像文件,那么在其中做的所有升级都丢失了,所以每次如果要保存相关的配置,应该将此容器生成镜像文件,从而不会担心配置丢失。
还有一种方式来进行共享数据,那么就是使用数据容器来进行共享,其实也就是使用一个容器来进行挂载数据盘,然后。。。其他的容器共享这些数据:
此种的主要目的就是为了在容器之中共享数据,相反在物理机上是看不到任何数据的,而在都挂载了这个目录的容器都可以看到数据。
浪而不漫
有多浪。。。我不知道啊。。。
很多人好像都被现实阻挡了脚步,无论是环境还是各种。。。
其实只是一个选择,无论是选择容器,还是选择虚拟机,还是选择物理机,只是看应用的场景,场景不同,采用的方式和方法也不同。
这个世界上没有银弹,都是一步一步打出来的。。。慢慢的去寻找才能找到自己合适的。
所有的一切,开始都是混沌的,只有盘古开天辟地的那一斧,才创造了今日的人类。。。
水漫金山,也只是娘子的一己私欲。。。。大局观,大局观。。。
很多东西。。。要是你生气了,就说明你输了。。。
很多东西我也不会,只不过是慢慢的寻求破局。。。
无论是反推,还是正推。。。总要有一个动力。。。。不要迷茫太久。。时间不等人。。。
选择了,就。。。JUST FUCK IT。。。。
不要怂。。。。。我要越塔杀人。。。
老是有人让我评价我自己,烦死了。。。。评价这个东西很无趣的。。。毕竟。。。。我不是个东西啊。。。。
当然。。。我还是很好奇你们能问出什么花样,好玩好玩。。。。别让我失望,毕竟。。。我还是有一丝丝期待的,哈哈。。。
唉,又要出来卖了。。。大家没事扫一扫啊。。。哈哈