自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

還不懂Docker?一個故事安排的明明白白

開發(fā) 前端
多年前的一個夜晚,風雨大作,一個名叫Docker的年輕人來到Linux帝國拜見帝國的長老。

程序員受苦久矣

多年前的一個夜晚,風雨大作,一個名叫Docker的年輕人來到Linux帝國拜見帝國的長老。

還不懂Docker?一個故事安排的明明白白

“Linux長老,天下程序員苦于應用部署久矣,我要改變這一現(xiàn)狀,希望長老你能幫幫我”

長老回答:“哦,小小年紀,口氣不小,先請入座,你有何所求,愿聞其詳”

Docker坐下后開始侃侃而談:“當今天下,應用開發(fā)、測試、部署,各種庫的依賴紛繁復雜,再加上版本之間的差異,經(jīng)常出現(xiàn)在開發(fā)環(huán)境運行正常,而到測試環(huán)境和線上環(huán)境就出問題的現(xiàn)象,程序員們飽受此苦,是時候改變這一狀況了。”

還不懂Docker?一個故事安排的明明白白

Docker回頭看了一眼長老接著說到:“我想做一個虛擬的容器,讓應用程序們運行其中,將它們需要的依賴環(huán)境整體打包,以便在不同機器上移植后,仍然能提供一致的運行環(huán)境,徹底將程序員們解放出來!”

Linux長老聽聞,微微點頭:“年輕人想法不錯,不過聽你的描述,好像虛擬機就能解決這個問題。將應用和所依賴的環(huán)境部署到虛擬機中,然后做個快照,直接部署虛擬機不就可以了嗎?”

Docker連連搖頭說到:“長老有所不知,虛擬機這家伙笨重如牛,體積又大,動不動就是以G為單位的大小,因為它里面要運行一個完整的操作系統(tǒng),所以跑起來格外費勁,慢就不說了,還非常占資源,一臺機器上跑不了幾臺虛擬機就把性能拖垮了!而我想要做一個輕量級的虛擬容器,只提供一個運行環(huán)境,不用運行一個操作系統(tǒng),所有容器中的系統(tǒng)內(nèi)核還是和外面的宿主機共用的,這樣就可以批量復制很多個容器,輕便又快捷”

還不懂Docker?一個故事安排的明明白白

Linux長老站了起來,來回踱步了幾圈,思考片刻之后,忽然拍桌子大聲說到:“真是個好想法,這個項目我投了!”

Docker眼里見光,喜上眉梢,“這事還真離不開長老的幫助,要實現(xiàn)我說的目標,對進程的管理隔離都至關(guān)重要,還望長老助我一臂之力!”

“你稍等”,Linux長老轉(zhuǎn)身回到內(nèi)屋。沒多久就出來了,手里拿了些什么東西。

“年輕人,回去之后,盡管放手大干,我賜你三個錦囊,若遇難題,可依次拆開,必有大用”

還不懂Docker?一個故事安排的明明白白

Docker開心的收下了三個錦囊,拜別Linux長老后,冒雨而歸。

錦囊1:chroot & pivot_root

受到長老的鼓勵,Docker充滿了干勁,很快就準備啟動他的項目。

作為一個容器,首要任務就是限制容器中進程的活動范圍——能訪問的文件系統(tǒng)目錄。決不能讓容器中的進程去肆意訪問真實的系統(tǒng)目錄,得將他們的活動范圍劃定到一個指定的區(qū)域,不得越雷池半步!

到底該如何限制這些進程的活動區(qū)域呢?Docker遇到了第一個難題。

苦思良久未果,Docker終于忍不住拆開了Linux長老送給自己的第一個錦囊,只見上面寫了兩個函數(shù)的名字:chroot & pivot_root。

Docker從未使用過這兩個函數(shù),于是在Linux帝國四處打聽它們的作用。后來得知,通過這兩個函數(shù),可以修改進程和系統(tǒng)的根目錄到一個新的位置。Docker大喜,長老真是誠不欺我!

有了這兩個函數(shù),Docker開始想辦法怎么來“偽造”一個文件系統(tǒng)來欺騙容器中的進程。

還不懂Docker?一個故事安排的明明白白

為了不露出破綻,Docker很聰明,用操作系統(tǒng)鏡像文件掛載到容器進程的根目錄下,變成容器的rootfs,和真實系統(tǒng)目錄一模一樣,足可以以假亂真:

  1. $ ls / 
  2. bin dev etc home lib lib64 mnt opt proc root run sbin sys tmp usr var 

錦囊2:namespace

文件系統(tǒng)的問題總算解決了,但是Docker不敢懈怠,因為在他心里,還有一個大問題一直困擾著他,那就是如何把真實系統(tǒng)所在的世界隱藏起來,別讓容器中的進程看到。

比如進程列表、網(wǎng)絡設(shè)備、用戶列表這些,是決不能讓容器中的進程知道的,得讓他們看到的世界是一個干凈如新的系統(tǒng)。

Docker心里清楚,自己雖然叫容器,但這只是表面現(xiàn)象,容器內(nèi)的進程其實和自己一樣,都是運行在宿主操作系統(tǒng)上面的一個個進程,想要遮住這些進程的眼睛,瞞天過海,實在不是什么容易的事情。

Docker想過用HOOK的方式,欺騙進程,但實施起來工作太過復雜,兼容性差,穩(wěn)定性也得不到保障,思來想去也沒想到什么好的主意。

正在一籌莫展之際,Docker又想起了Linux長老送給自己的錦囊,他趕緊拿了出來,打開了第二個錦囊,只見上面寫著:namespace。

Docker還是不解其中之意,于是又在Linux帝國到處打聽什么是namespace。

經(jīng)過一陣琢磨,Docker總算是明白了,原來這個namespace是帝國提供的一種機制,通過它可以劃定一個個的命名空間,然后把進程劃分到這些命名空間中。

還不懂Docker?一個故事安排的明明白白

而每個命名空間都是獨立存在的,命名空間里面的進程都無法看到空間之外的進程、用戶、網(wǎng)絡等等信息。

這不正是Docker想要的嗎?真是踏破鐵鞋無覓處,得來全不費功夫!

Docker趕緊加班加點,用上了這個namespace,將進程的“視野”鎖定在容器規(guī)定的范圍內(nèi),如此一來,容器內(nèi)的進程彷佛被施上了障眼法,再也看不到外面的世界。

錦囊3:CGroup

文件系統(tǒng)和進程隔離的問題都解決了,Docker心里的石頭總算是放下了。心里著急著想測試自己的容器,可又好奇這最后一個錦囊寫的是什么,于是打開了第三個錦囊,只見上面寫著:CGroup。

這又是什么東西?Docker仍然看不懂,不過這一次管不了那么許多了,先運行起來再說。

試著運行了一段時間,一切都在Docker的計劃之中,容器中的進程都能正常的運行,都被他構(gòu)建的虛擬文件系統(tǒng)和隔離出來的系統(tǒng)環(huán)境給欺騙了,Docker高興壞了!

很快,Docker就開始在Linux帝國推廣自己的容器技術(shù),結(jié)果大受歡迎,收獲了無數(shù)粉絲,連nginx、redis等一眾大佬都紛紛入駐。

然而,鮮花與掌聲的背后,Docker卻不知道自己即將大難臨頭。

這天,Linux帝國內(nèi)存管理部的人扣下了Docker準備“處決”掉他,Docker一臉詫異的問到,“到底發(fā)生了什么事,為什么要對我下手?”

管理人員厲聲說到:“帝國管理的內(nèi)存快被一個叫Redis的家伙用光了,現(xiàn)在要挑選一些進程來殺掉,不好意思,你中獎了”

還不懂Docker?一個故事安排的明明白白

Redis?這家伙不是我容器里的進程嗎?Docker心中一驚!

“兩位大人,我認識帝國的長老,麻煩通融通融,找別人去吧,Redis那家伙,我有辦法收拾他”

沒想到他還認識帝國長老,管理人員猶豫了一下,就放了Docker到別處去了。

驚魂未定的Docker,思來想去,如果不對容器中的進程加以管束,那簡直太危險了!除了內(nèi)存,還有CPU、硬盤、網(wǎng)絡等等資源,如果某個容器進程霸占著CPU不放手,又或者某個容器進程瘋狂寫硬盤,那遲早得連累到自己身上。看來必須得對這些進程進行管控,防止他們干出出格的事來。

這時候,他想起了Linux長老的第三個錦囊:CGroup!說不定能解這燃眉之急。

經(jīng)過一番研究,Docker如獲至寶,原來這CGroup和namespace類似,也是Linux帝國的一套機制,通過它可以劃定一個個的分組,然后限制每個分組能夠使用的資源,比如內(nèi)存的上限值、CPU的使用率、硬盤空間總量等等。系統(tǒng)內(nèi)核會自動檢查和限制這些分組中的進程資源使用量。

還不懂Docker?一個故事安排的明明白白

Linux長老這三個錦囊簡直太貼心了,一個比一個有用,Docker內(nèi)心充滿了感激。

隨后,Docker加上了CGroup技術(shù),加強了對容器中的進程管控,這才松了一口氣。

在Linux長老三個錦囊妙計的加持下,Docker可謂風光一時,成為了Linux帝國的大名人。

然而,能力越大,責任越大,讓Docker沒想到的是,新的挑戰(zhàn)還在后面。

 

責任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2020-11-18 09:25:39

Docker

2010-09-06 17:35:03

PPPOE配置

2020-02-10 19:42:01

CPIP 協(xié)議,

2011-11-04 16:49:26

Action BarAndroid

2022-04-20 11:03:28

Linux內(nèi)存管理

2011-04-27 17:05:39

2010-10-08 15:05:00

無線路由設(shè)置

2012-02-20 21:59:08

無線路由設(shè)置

2010-08-06 10:00:05

負載均衡

2021-09-30 09:59:23

OSPF網(wǎng)絡協(xié)議網(wǎng)絡技術(shù)

2021-02-23 08:10:18

Nginx反向代理負載均衡器

2021-08-26 06:58:15

Docker容器數(shù)據(jù)卷

2021-09-26 07:38:39

組合問題數(shù)據(jù)結(jié)構(gòu)算法

2010-07-05 15:33:49

2010-06-29 14:38:14

Linux服務器

2010-08-03 09:17:00

2010-09-09 09:52:03

Linux服務器

2010-07-14 09:55:12

2010-08-25 09:09:58

2010-10-15 10:01:19

無線網(wǎng)絡構(gòu)建
點贊
收藏

51CTO技術(shù)棧公眾號