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