Docker(linux container)所依賴的底層技術(shù)
1 Namespace
用來(lái)做PID的隔離,有了namespace,在docker container里頭看來(lái),就是一個(gè)完整的linux的世界。在host看來(lái),container里的進(jìn)程,就是一個(gè)普通的host進(jìn)程,namespace提供這種pid的映射和隔離效果,host承載著container,就好比造物者創(chuàng)造一個(gè)個(gè)世外桃源。
2 Cgroups
在我的另外一篇博文里,有詳細(xì)介紹cgroup如何做到內(nèi)存,cpu和io速率的隔離,移步cgroups
3 Chroot
如何在container里頭,看到的文件系統(tǒng),就是一個(gè)完整的linux系統(tǒng),有/etc、/lib 等,通過(guò)chroot實(shí)現(xiàn)
4 Veth
container里,執(zhí)行ifconfig可以看到eth0的網(wǎng)卡,如何通信呢?其實(shí)是在host上虛擬了一張網(wǎng)卡出來(lái)(veth73f7),跟container里的網(wǎng)卡做了橋接,所有從container出來(lái)的流量都要過(guò)host的虛擬網(wǎng)卡,進(jìn)container的流量也是如此。
5 Union FS
對(duì)于這種疊加的文件系統(tǒng),有一個(gè)很好的實(shí)現(xiàn)是AUFS,在Ubuntu比較新的發(fā)行版里都是自帶的,這個(gè)可以做到以文件為粒度的copy-on-write,為海量的container的瞬間啟動(dòng),提供了技術(shù)支持,也會(huì)持續(xù)部署提供了幫助。不過(guò)以文件為粒度的copy-on-write帶來(lái)一個(gè)問題,就是修改大文件時(shí)候,需要復(fù)制整個(gè)大文件進(jìn)行修改,效率堪憂。
6 Iptables, netfilter
主要用來(lái)做ip數(shù)據(jù)包的過(guò)濾,比如可以做container之間無(wú)法通信,container可以無(wú)法訪問host的網(wǎng)絡(luò),但是可以通過(guò)host的網(wǎng)卡訪問外網(wǎng)等這樣的網(wǎng)絡(luò)策略
7 TC
主要用來(lái)做流量隔離,帶寬的限制
8 Quota
用來(lái)做磁盤讀寫大小的限制,區(qū)別于cgroups對(duì)blkio的控制,quota是用來(lái)限制用戶可用空間的大小
9 Setrlimit
可以限制container中打開的進(jìn)程數(shù),限制打開的文件個(gè)數(shù)等
拋磚引玉,希望大家對(duì)每一點(diǎn)技術(shù)做更加深入的了解與探索。以上是linux container一些基本的技術(shù),docker基本是實(shí)現(xiàn)了前五個(gè)的技術(shù),用libcontainer做了一層封裝,要實(shí)現(xiàn)一個(gè)完整的安全的container技術(shù),docker還有一些路需要走,期待docker的完善,大家可以多多關(guān)注這個(gè)2014年度最熱的開源技術(shù),docker!