2 回答

TA貢獻2080條經驗 獲得超4個贊
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app)。幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,他們不依賴于任何語言、框架包括系統。
在docker的網站上提到了docker的典型場景:
Automating the packaging and deployment of applications
Creation of lightweight, private PAAS environments
Automated testing and continuous integration/deployment
Deploying and scaling web apps, databases and backend services
由于其基于LXC的輕量級虛擬化的特點,docker相比KVM之類最明顯的特點就是啟動快,資源占用小。因此對于構建隔離的標準化的運行環境,輕量級的PaaS(如dokku), 構建自動化測試和持續集成環境,以及一切可以橫向擴展的應用(尤其是需要快速啟停來應對峰谷的web應用)。

TA貢獻1934條經驗 獲得超2個贊
IBM研究部門發表了一篇關于容器和虛擬機環境性能比較的論文。這篇論文使用了Docker和KVM作為研究對象,闡述了Docker使用NAT或AUFS時的開銷,并且質疑了在虛擬機上運行容器的實踐方法。
論文作者在原生、容器和虛擬化環境中運行了CPU、內存、網絡和I/O的benchmark。其中,分別使用KVM和Docker作為虛擬化和容器技術的代表。Benchmark也包含了對不同環境下Redis和MySQL負載的采樣。通過小數據包和多客戶端,Redis側重于網絡棧的性能。而MySQL側重于內存,網絡和文件系統的性能。
結果顯示,在每一項測試中,Docker的性能等同于或超出KVM的性能。在CPU和內存性能方面,KVM和Docker都引入了明顯的,但可略不計的開銷。但是,對于I/O密集型的應用,兩者都需要進行調整以減少開銷帶來的影響。
當使用AUFS存儲文件時,Docker的性能會降低。而相比之下,使用卷(volume)能夠獲得更好的性能。卷是一種專門設計的目錄,存在于一個或多個容器內。通過這種目錄能夠繞過聯合文件系統(union file system)。這樣它就沒有了存儲后端可能帶來的開銷。默認的AUFS后端會引起顯著的I/O開銷,特別是當有多層目錄深度嵌套的時候。
Docker的默認網絡選項,--net=bridge,由于NAT會重寫數據包,也引入了性能開銷。當數據包收發率變高時,這種開銷會變得很明顯。可以通過使用--net=host改善網絡的性能。這個選項告訴Docker不要為容器創建一個獨立的網絡棧,并允許容器擁有宿主機網絡接口的完全訪問權限。但是,使用這個選項時要小心。因為它允許容器內的進程像其他根進程一樣,使用數值較小的端口;并允許容器內的進程訪問本地網絡服務,如D-bus。這使得容器內的進程可以做一些預料之外的事情,如重啟宿主機。
- 2 回答
- 0 關注
- 604 瀏覽
添加回答
舉報