比如进程列表、网络设备、用户列表这些,是决不能让容器中的进程知道的,得让他们看到的世界是一个干净如新的系统 。
Docker心里清楚,自己虽然叫容器,但这只是表面现象,容器内的进程其实和自己一样,都是运行在宿主操作系统上面的一个个进程,想要遮住这些进程的眼睛,瞒天过海,实在不是什么容易的事情 。
Docker想过用HOOK的方式,欺骗进程,但实施起来工作太过复杂,兼容性差,稳定性也得不到保障,思来想去也没想到什么好的主意 。
正在一筹莫展之际,Docker又想起了Linux长老送给自己的锦囊,他赶紧拿了出来,打开了第二个锦囊,只见上面写着:namespace 。
Docker还是不解其中之意,于是又在Linux帝国到处打听什么是namespace 。
经过一阵琢磨,Docker总算是明白了,原来这个namespace是帝国提供的一种机制,通过它可以划定一个个的命名空间,然后把进程划分到这些命名空间中 。

文章插图
而每个命名空间都是独立存在的,命名空间里面的进程都无法看到空间之外的进程、用户、网络等等信息 。
这不正是Docker想要的吗?真是踏破铁鞋无觅处,得来全不费功夫!
Docker赶紧加班加点,用上了这个namespace,将进程的“视野”锁定在容器规定的范围内,如此一来,容器内的进程彷佛被施上了障眼法,再也看不到外面的世界 。
锦囊3:CGroup文件系统和进程隔离的问题都解决了,Docker心里的石头总算是放下了 。心里着急着想测试自己的容器,可又好奇这最后一个锦囊写的是什么,于是打开了第三个锦囊,只见上面写着:CGroup 。
这又是什么东西?Docker仍然看不懂,不过这一次管不了那么许多了,先运行起来再说 。
试着运行了一段时间,一切都在Docker的计划之中,容器中的进程都能正常的运行,都被他构建的虚拟文件系统和隔离出来的系统环境给欺骗了,Docker高兴坏了!
很快,Docker就开始在Linux帝国推广自己的容器技术,结果大受欢迎,收获了无数粉丝,连nginx、redis等一众大佬都纷纷入驻 。
然而,鲜花与掌声的背后,Docker却不知道自己即将大难临头 。
这天,Linux帝国内存管理部的人扣下了Docker准备“处决”掉他,Docker一脸诧异的问到,“到底发生了什么事,为什么要对我下手?”
管理人员厉声说到:“帝国管理的内存快被一个叫Redis的家伙用光了,现在要挑选一些进程来杀掉,不好意思,你中奖了”

文章插图
Redis?这家伙不是我容器里的进程吗?Docker心中一惊!
“两位大人,我认识帝国的长老,麻烦通融通融,找别人去吧,Redis那家伙,我有办法收拾他”
没想到他还认识帝国长老,管理人员犹豫了一下,就放了Docker到别处去了 。
惊魂未定的Docker,思来想去,如果不对容器中的进程加以管束,那简直太危险了!除了内存,还有CPU、硬盘、网络等等资源,如果某个容器进程霸占着CPU不放手,又或者某个容器进程疯狂写硬盘,那迟早得连累到自己身上 。看来必须得对这些进程进行管控,防止他们干出出格的事来 。
这时候,他想起了Linux长老的第三个锦囊:CGroup!说不定能解这燃眉之急 。
经过一番研究,Docker如获至宝,原来这CGroup和namespace类似,也是Linux帝国的一套机制,通过它可以划定一个个的分组,然后限制每个分组能够使用的资源,比如内存的上限值、CPU的使用率、硬盘空间总量等等 。系统内核会自动检查和限制这些分组中的进程资源使用量 。

文章插图
Linux长老这三个锦囊简直太贴心了,一个比一个有用,Docker内心充满了感激 。
随后,Docker加上了CGroup技术,加强了对容器中的进程管控,这才松了一口气 。
在Linux长老三个锦囊妙计的加持下,Docker可谓风光一时,成为了Linux帝国的大名人 。
然而,能力越大,责任越大,让Docker没想到的是,新的挑战还在后面 。
推荐阅读
- 秦子婴下一个位皇帝是谁 秦子婴是秦始皇的儿子吗
- 女人硬起来其实比男人的还硬
- 除了高粱地还有哪里可以震
- 宝宝喝奶睡着了还用拍嗝吗?
- 翡翠|玉石记:价值30多万的翡翠原石,一刀切开后还能剩多少?
- 武则天在位多少年怎么退位的 武则天退位之后还活了多久
- 幼儿咬人是什么原因
- 宝宝不追声的原因
- 翡翠|翡翠原石不懂不要碰,十宝九有裂,谨慎入手
- 护发素|感觉36岁的张俪还跟小孩子似的,穿绿色吊带裙清爽高级,短发更美
