Docker究竟是什么 為什么這么流行 它的優點和缺陷有哪些?
Docker是什么?
簡單得來說,Docker是一個由GO語言寫的程序運行的“容器”(Linux containers, LXCs); 目前云服務的基石是操作系統級別的隔離,在同一臺物理服務器上虛擬出多個主機。Docker則實現了一種應用程序級別的隔離; 它改變我們基本的開發、操作單元,由直接操作虛擬主機(VM),轉換到操作程序運行的“容器”上來。
Docker是為開發者和系統管理員設計的,用來發布和運行分布式應用程序的一個開放性平臺。由兩部分組成:
Docker Engine: 一個便攜式、輕量級的運行環境和包管理器。(注* 單OS vs 單線程,是不是跟NodeJS特別像?)
Docker Hub: 為創建自動化工作流和分享應用創建的云服務組成。(注* 云端鏡像/包管理 vs npm包管理,是不是跟npm特別像?)
從2013年3月20日,第一個版本的Docker正式發布到 2014年6月 Docker 1.0 正式發布,經歷了15個月。 雖然發展歷程很短,但Docker正在有越來越流行的趨勢。
其實Container技術并非Docker的創新,HeroKu, NodeJitsu 等云服務商都采用了類似這種輕量級的虛擬化技術,但Docker是第一個將這這種Container技術大規模開源并被社區廣泛接受的。
Docker相對于VM虛擬機的優勢十分明顯,那就是輕量和高性能和便捷性, 以下部分摘自: KVM and Docker LXC Benchmarking with OpenStack
快運行時的性能可以獲取極大提升(經典的案例是提升97%)
管理操作(啟動,停止,開始,重啟等等) 都是以秒或毫秒為單位的。
敏捷像虛擬機一樣敏捷,而且會更便宜,在bare metal(裸機)上布署像點個按鈕一樣簡單。
靈活將應用和系統“容器化”,不添加額外的操作系統,
輕量你會擁有足夠的“操作系統”,僅需添加或減小鏡像即可。在一臺服務器上可以布署100~1000個Containers容器。
便宜開源的,免費的,低成本的。由現代Linux內核支持并驅動。注* 輕量的Container必定可以在一個物理機上開啟更多“容器”,注定比VMs要便宜。
生態系統正在越來越受歡迎,只需要看一看Google的趨勢就知道了, docker or LXC.
還有不計其數的社區和第三方應用。
云支持不計其數的云服務提供創建和管理Linux容器框架。
有關Docker性能方面的優勢,還可參考此IBM工程師對性能提升的評測,從各個方面比VMs(OS系統級別虛擬化)都有非常大的提升。
Performance Characteristics of VMs vs Docker Containers by Boden Russel (IBM)
Performance characteristics of traditional v ms vs docker containers
有爭論的部分任何項目都會有爭論,就像Go,像NodeJS, 同樣Docker也有一些。
能否徹底隔離在超復雜的業務系統中,單OS到底能不能實現徹底隔離,一個程序的崩潰/內存溢出/高CPU占用到底會不會影響到其他容器或者整個系統?很多人對Docker能否在實際的多主機的生產環境中支持關鍵任務系統還有所懷疑。 注* 就像有人質疑Node.JS單線程快而不穩,無法在復雜場景中應用一樣。
不過可喜的是,目前Linux內核已經針對Container做了很多改進,以支持更好的隔離。
GO語言還沒有完全成熟Docker由Go語言開發,但GO語言對大多數開發者來說比較陌生,而且還在不斷改進,距離成熟還有一段時間。此半git、半包管理的方式讓一些人產生不適。
被私有公司控制Docker是一家叫Dotcloud的私有公司設計的,公司都是以營利為目的,比如你沒有辦法使用源代碼編繹Docker項目,只能使用黑匣子編出的Docker二進制發行包,未來可能不是完全免費的。 目前Docker已經推出面向公司的企業級服務(咨詢、支持和培訓)。
相關文章: