容器的本質(zhì)是什麼祠丝?
上回一切使之容器?—?Container with Application (1)钾军,一起了解了容器的演進(jìn)過程窒舟。
那容器的本質(zhì)到底是什麼嘲驾?
先說結(jié)論淌哟,他是一種特殊的程序(進(jìn)程)。
而容器技術(shù)就是透過約束與進(jìn)程運(yùn)行時(shí)辽故,創(chuàng)造出虛擬的界線徒仓。
對於 Docker 或大多數(shù) Linux 容器來說,Cgroups 技術(shù)是用來創(chuàng)造約束的效果誊垢,而Namespace 技術(shù)則是用來修改進(jìn)程視圖的方法掉弛。
Namespace
Namespace 的技術(shù)能夠有什麼作用呢喻杈?
假設(shè)現(xiàn)在有 50 個(gè)進(jìn)程,那他們的 PID 就會(huì)是 1.2.3...49.50狰晚,那現(xiàn)在利用 Namespace 技術(shù)創(chuàng)造第 51 個(gè)進(jìn)程,這個(gè)進(jìn)程會(huì)進(jìn)入一個(gè)全新的空間缴啡,此時(shí)這個(gè)進(jìn)程中的 PID 會(huì)從 1 開始壁晒,但在原本的宿主機(jī)上還依然是 51 號進(jìn)程。
原來 Namespace 技術(shù)只是遮掩了宿主機(jī)中一部分的進(jìn)程业栅,讓容器以為他是第一個(gè)進(jìn)程秒咐,就等同於 PID = 1。
由此碘裕,我們知道容器技術(shù)的最核心概念就是透過特殊的進(jìn)程建立容器携取。這也就是為什麼容器是單進(jìn)程模型。
Cgroups
竟然容器會(huì)以為自己是整個(gè)主機(jī)帮孔,那容器就很有可能直接吃掉宿主機(jī)的全部資源雷滋,由此容器技術(shù)就透過 Cgroups 來限制容器中的資源使用文兢。
Linux Cgroups 的全名是 Linux Control Group,基本上是用來限制一個(gè)進(jìn)程組的資源使用澳泵,包括 CPU兼呵,記憶體,磁碟维苔,網(wǎng)路頻寬等等蕉鸳。
所以我們得知忍法,容器技術(shù)並不神秘,甚至理解了為什麼他能夠這麼快速勉失,因?yàn)椋皇莻€(gè)特殊的進(jìn)程乱凿,並沒有使用虛擬化技術(shù),當(dāng)然也跟虛擬機(jī)有很大的差異胁出。
既然是單進(jìn)程模型段审,那一次就只適合運(yùn)行一個(gè)應(yīng)用,這也就是 Docker 項(xiàng)目在官方文件中強(qiáng)力推薦抑淫,一個(gè)應(yīng)用一個(gè)容器始苇,事實(shí)上他受於先天上的限制筐喳,當(dāng)然也得利於環(huán)境隔離避归。
解決了製作容器與限制資源之後槐脏,容器還有一個(gè)重要的技術(shù)尚未說明顿天,那就是文件系統(tǒng)牌废。
那,容器技術(shù)是如何解決文件系統(tǒng)的呢晶框?
下一篇分享見授段。
yasuoyuhao 2018/12/28
如果喜歡我的文章番甩,可以按下喜歡或追隨讓我知道呦缘薛,更歡迎許多大神指點(diǎn)討論。感謝您的閱讀表锻。
部落格:yasuoyuhao's Area