這篇文章主要講解了“Docker容器的創(chuàng)建原理是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Docker容器的創(chuàng)建原理是什么”吧!
成都創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目做網(wǎng)站、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元紅塔做網(wǎng)站,已為上家服務(wù),為紅塔各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
一:簡(jiǎn)介
容器的核心技術(shù)是Cgroup+Namespace. Linux容器的最小組成可以由以下公式來(lái)表示: 容器=cgroup+namespace+rootfs+容器引擎。 Cgroup:資源控制,Namespace:訪問(wèn)隔離,rootfs:文件系統(tǒng)隔離,容器引擎:生命周期控制。
二:Namespace思維導(dǎo)圖
三:總結(jié)
Namespace和Cgroup的使用是很靈活的,同時(shí)又有不少需要注意的地方,因此直接操作Namespace和Cgroup并不是很容易。正是因?yàn)檫@些原因,Docker通過(guò)Libcontainer來(lái)處理這些底層的事情。這樣一來(lái),Docker只需要簡(jiǎn)單地調(diào)用Libcontainer的API,就能將完整的容器搭建起來(lái)。
四:容器的創(chuàng)建原理
1.通過(guò)clone系統(tǒng)調(diào)用,并傳入各個(gè)namespace對(duì)應(yīng)的clone flag,創(chuàng)建了一個(gè)新的子進(jìn)程,該進(jìn)程擁有自己的Namespace.
pid = clone(fun,task,flags,clone_arg); (flags:CLONE_NEWPID|CLONE_NEWNS| CLINE_NEWUSER|CLONE_NEWNET| CLONE_NEWIPC|CLONE_NEWUTS: ...)
2.將第一步中產(chǎn)生的pid寫(xiě)入各個(gè)cgroup子系統(tǒng),這樣改進(jìn)程就可以受到相應(yīng)Cgroup子系統(tǒng)的控制
echo $pid>/sys/fs/cgroup/cpu/tasks echo $pid>/sys/fs/cgroup/cpuset/tasks echo $pid>/sys/fs/cgroup/blkio/tasks echo $pid>/sys/fs/cgroup/memory/tasks echo $pid>/sys/fs/cgroup/devices/tasks echo $pid>/sys/fs/cgroup/freezer/tasks
3.該fun函數(shù)由上面生成的新進(jìn)程執(zhí)行,在fun函數(shù)中通過(guò)pivot_root系統(tǒng)調(diào)用,使進(jìn)程進(jìn)入一個(gè)新的rootfs,之后通過(guò)exec系統(tǒng)調(diào)用,在新的namespace,cgroup,rootfs中執(zhí)行"/bin/bash"程序
fun() { ...pivot_root("path_of_rootfs/",path); ...exec("/bin/bash"); ... }
感謝各位的閱讀,以上就是“Docker容器的創(chuàng)建原理是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Docker容器的創(chuàng)建原理是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!