综合资讯

还不懂Docker?一个故事安排的明明白白

来源:IT之家 2022-10-25 12:14:52 阅读量:12409   

程序员苦了很久了 很多年前的一个晚上,一个叫Docker的年轻人来到Linux帝国,与帝国的长老们见面。 前辈Linux,全世...

程序员苦了很久了

很多年前的一个晚上,一个叫Docker的年轻人来到Linux帝国,与帝国的长老们见面。

前辈Linux,全世界的程序员都为应用部署苦恼了很久我想改变这种情况希望你能帮帮我

长辈回答:哦,小小年纪,口气很大请先坐下你想要什么我想听听细节

Docker坐下来开始谈论侃侃:在当今世界,应用程序开发,测试,部署以及各种库的依赖性都很复杂再加上版本之间的差异,经常出现开发环境运行正常,测试环境和上线环境却有问题的情况程序员都为此吃过苦头是时候改变这种状况了

Docker回头看了老者一眼,然后说:我想做一个虚拟容器,让应用程序在里面运行,把它们需要的依赖环境整体打包,这样移植到不同的机器上之后,依然可以提供一致的运行环境,彻底解放程序员!

Linux前辈听到这里,微微点头:年轻人的想法不错,但是听你的描述,好像虚拟机可以解决这个问题将应用程序及其依赖环境部署到虚拟机,然后拍摄快照并直接部署虚拟机

Docker连连摇头说:前辈不知道的东西虚拟机重如牛,大小总是用g来衡量,因为要运行一个完整的操作系统,所以运行起来格外费力慢的话我就不说了也非常耗费资源,一台机器上运行几个虚拟机会拖累性能!而我想做一个轻量级的虚拟容器,只提供运行环境,不运行操作系统所有容器中的系统内核都是和外部主机共享的,这样可以批量复制很多容器,轻便快捷

Linux长老站了起来,来回踱步了几次他想了一会儿,突然拍着桌子大声说:好主意

Docker看到了他眼中的光芒,喜上眉梢这件事真的离不开长老们的帮助为了实现我所说的目标,管理和隔离流程是必不可少的

你等一下,Linux长老转身回到里屋没多久就出来了我手里拿着东西

年轻人,你回去后,放手去做,尽力而为我给你三个建议遇到什么问题,可以反过来拆,会有很大用处的

Docker愉快地接受了三个建议告别Linux长辈后,他冒雨返回

套件1:ch root amp,透视_根

在长辈们的鼓励下,Docker精神饱满,准备很快开始他的项目。

作为容器,第一个任务是限制容器中进程的活动范围——可以访问的文件系统目录。千万不要让容器中的进程任意访问真实的系统目录,而是把它们的活动范围划定到一个指定的区域,不要越界!

如何限制这些进程的活动区域Docker遇到的第一个问题

想了很久,Docker终于忍不住拆开了Linux长辈给自己的第一个工具包,只见上面写着两个函数的名字:chroot amppivot_root .

Docker从来没有用过这两个函数,所以查询了它们在Linux帝国中的作用后来我们了解到,通过这两个函数,我们可以将进程和系统的根目录修改到一个新的位置Docker喜出望外

有了这两个函数,Docker开始琢磨如何伪造一个文件系统来欺骗容器中的进程。

为了不露出破绽,Docker很聪明。它把操作系统镜像文件挂载到容器进程的根目录,成为容器的rootfs,和真实的系统目录一模一样,足以以假乱真:

$ ls/bindevetchomelib 64 mntopprotrunsbinsystmpusrvar工具包2:命名空间

文件系统的问题终于解决了,但是Docker不敢懈怠,因为在他的脑海中,还有一个很大的问题一直困扰着他,那就是如何隐藏真实系统所在的世界,不让容器中的进程看到。

例如进程列表,网络设备,用户列表等,一定不能让容器中的进程知道,他们看到的世界一定是一个干净的新系统

Docker心里明白,虽然叫集装箱,但这只是表面现象容器中的进程和他自己一样,都是运行在主机操作系统上的进程要遮住这些过程的眼睛真的不容易

Docker想到了用HOOK来欺骗进程,但是实现太复杂,兼容性差,稳定性没有保证他想了想,没有想到什么好主意

一筹莫展之际,Docker又想起了Linux元老们送给他的工具包他赶紧拿出来,打开第二个工具包,却看到上面写着:namespace

Docker还是不明白是什么意思,就四处打听Linux帝国的名字空间是什么。

过了一段时间,Docker终于明白了,这个名称空间是帝国提供的一种机制,通过它可以定义一个个名称空间,然后可以将进程划分到这些名称空间中。

每个命名空间都是独立存在的,命名空间中的进程看不到进程,用户,网络等信息在命名空间之外

这不正是Docker想要的吗。找个地方真的很难,不费力就能得到!

Docker很快加班加点使用了这个名称空间,将流程的愿景锁定在容器指定的范围内于是,容器里的过程仿佛被蒙蔽了,再也看不到外面的世界

技巧3:CGroup

文件和进程隔离的问题解决了,Docker心里的石头终于放下了我急着测试我的容器,但又很好奇这最后一个工具包写的是什么,于是我打开第三个工具包,看到上面写着:CGroup

这是什么东西Docker还是看不懂,但是这次我管不了那么多了先说说吧

尝试运行一段时间后,一切都在Docker的计划中,容器中的所有进程都可以正常运行都被他搭建的虚拟文件系统和隔离的系统环境欺骗过

很快,Docker开始在Linux帝国推广其容器技术,结果大受欢迎,收获无数粉丝,甚至nginx,redis等大牌也陆续入驻。

可是,在鲜花和掌声的背后,Docker并不知道自己即将遭殃。

这一天,Linux帝国内存管理部门的人拘留了Docker来处决他Docker一脸惊讶,问道:怎么回事你为什么要这样对我

经理厉声说道,帝国管理的内存,快被一个叫雷迪斯的家伙用光了现在我要选择一些进程来杀不好意思,你中彩票了

雷迪斯这家伙不是我容器里的一个进程吗

两位大人,我认识帝国的长老请通融一下找别人吧

没想到他认识帝国元老,管理人员犹豫了,就让Docker去别处了。

惊魂未定的Docker,想了想,如果集装箱内的流程不受控,那简直太危险了!除了内存,还有CPU,硬盘,网络等资源如果一个容器进程占用CPU不让用,或者一个容器进程疯狂写硬盘,迟早会给自己带来麻烦似乎必须控制这些过程,以防止它们做出任何出格的事情

这时他想起了Linux元老的第三招:CGroup!也许能解决这个燃眉之急。

经过一番研究,Docker如获至宝原来这个CGroup类似于namespace,也是Linux帝国里的一套机制通过它可以一个一个的划定组,然后限制每个组可以使用的资源,比如内存上限,CPU利用率,硬盘总空间等等系统内核将自动检查并限制这些组中进程资源的使用

Linux长辈的这三个小技巧太甜了,一个比一个有用,Docker的心里充满了感激。

后来Docker加入了CGroup技术,加强了容器内的流程控制,这是一种解脱。

得益于Linux元老三招的加持,Docker已经成为Linux帝国的大名人。

但是,能力越大,责任越大令Docker惊讶的是,新的挑战还在后面



上一篇: OPPOReno55G开启ColorOS13安卓13升级公测招募,搭载高
下一篇: 返回列表

声明:本网转发此文章,旨在为读者提供更多信息资讯,所涉内容不构成投资、消费建议。文章事实如有疑问,请与有关方核实,文章观点非本网观点,仅供读者参考。

artice_ad_01
symbol-23相关文章
  • 家庭教育心理健康对于孩子成长的重要性

    家庭教育心理健康对于孩子成长的重要性

  • 朋辈心理辅导活动——“学姐经验交流活动”

    朋辈心理辅导活动——“学姐经验交流活动”

  • 八种可以让孩子感觉愉悦的教育方法 ​

    八种可以让孩子感觉愉悦的教育方法 ​

  • 简谈西柚的七大主要成效作用

    简谈西柚的七大主要成效作用

artice_ad_02
artice_ad_04