Docker(linux container) 所依賴的底層技術


1 Namespace

用來做PID的隔離,有了namespace,在docker container里頭看來,就是一個完整的linux的世界。在host看來,container里的進程,就是一個普通的host進程,namespace提供這種pid的映射和隔離效果,host承載着container,就好比造物者創造一個個世外桃源。

2 Cgroups

在我的另外一篇博文里,有詳細介紹cgroup如何做到內存,cpu和io速率的隔離,移步cgroups

3 Chroot

如何在container里頭,看到的文件系統,就是一個完整的linux系統,有/etc、/lib 等,通過chroot實現

4 Veth

container里,執行ifconfig可以看到eth0的網卡,如何通信呢?其實是在host上虛擬了一張網卡出來(veth73f7),跟container里的網卡做了橋接,所有從container出來的流量都要過host的虛擬網卡,進container的流量也是如此。

5 Union FS

對於這種疊加的文件系統,有一個很好的實現是AUFS,在Ubuntu比較新的發行版里都是自帶的,這個可以做到以文件為粒度的copy-on-write,為海量的container的瞬間啟動,提供了技術支持,也會持續部署提供了幫助。不過以文件為粒度的copy-on-write帶來一個問題,就是修改大文件時候,需要復制整個大文件進行修改,效率堪憂。

6 Iptables, netfilter

主要用來做ip數據包的過濾,比如可以做container之間無法通信,container可以無法訪問host的網絡,但是可以通過host的網卡訪問外網等這樣的網絡策略

7 TC

主要用來做流量隔離,帶寬的限制

8 Quota

用來做磁盤讀寫大小的限制,區別於cgroups對blkio的控制,quota是用來限制用戶可用空間的大小

9 Setrlimit

可以限制container中打開的進程數,限制打開的文件個數等

 

拋磚引玉,希望大家對每一點技術做更加深入的了解與探索。以上是linux container一些基本的技術,docker基本是實現了前五個的技術,用libcontainer做了一層封裝,要實現一個完整的安全的container技術,docker還有一些路需要走,期待docker的完善,大家可以多多關注這個2014年度最熱的開源技術,docker!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM