華為云計(jì)算 云知識 Docker 相關(guān)關(guān)鍵概念和關(guān)鍵技術(shù)介紹
Docker 相關(guān)關(guān)鍵概念和關(guān)鍵技術(shù)介紹

Docker是最主流的容器運(yùn)行時,即容器引擎。containerd是容器技術(shù)標(biāo)準(zhǔn)化之后的產(chǎn)物,為了能夠兼容OCI 標(biāo)準(zhǔn),獨(dú)立負(fù)責(zé)容器運(yùn)行時和生命周期(如創(chuàng)建、啟動、停止、中止、信號處理、刪除等),從daemon中剝離,向dockerengine提供運(yùn)行容器的API,通過grpc通信;每創(chuàng)建一個容器,containerd都會創(chuàng)建一個shim進(jìn)程,每個shim會調(diào)用runc(前身是libcontainer)進(jìn)行實(shí)際的容器運(yùn)行時管理,比如創(chuàng)建namespace的隔離。

涉及docker的關(guān)鍵概念有 鏡像 ,即容器應(yīng)用發(fā)布件,通過dockerfile描述,docker’會根據(jù)dockerfile構(gòu)建鏡像;有鏡像倉庫,及鏡像存放的地方。容器,及容器應(yīng)用運(yùn)行的環(huán)境,通過容器的幾個關(guān)鍵技術(shù)進(jìn)行隔離。

Docker所應(yīng)用的幾個關(guān)鍵技術(shù)都不是docker發(fā)明的,而是linux早就成熟的技術(shù),docker將這幾個技術(shù)整合,形成了革命性的成果。Namespace負(fù)責(zé)運(yùn)行環(huán)境的隔離,即每個容器都是一個獨(dú)立進(jìn)程,通過namespace技術(shù)進(jìn)行隔離,每個容器互相不可見,包括進(jìn)程隔離、網(wǎng)絡(luò)隔離、文件隔離;Cgroup是負(fù)責(zé)運(yùn)行資源的隔離或者說獨(dú)占,可以為每個容器指定資源數(shù)量,互相不侵占;Union filesystem是解決應(yīng)用運(yùn)行的小型化統(tǒng)一標(biāo)準(zhǔn),容器鏡像提供了容器運(yùn)行的基礎(chǔ),但容器鏡像并不等于容器。容器鏡像是通過存儲驅(qū)動技術(shù)管理的一系列分層的只讀文件,而當(dāng)容器鏡像運(yùn)行為容器時,就會在鏡像的最上層添加一個可寫的層,也就是容器層,所有對于運(yùn)行時容器的修改其實(shí)都是對這個容器讀寫層的修改,所有對容器的變化,比如寫新的文件,修改已有文件和刪除文件,都只會作用在這個容器層之中。