Docker到底是什么


簡單講docker和vm虛擬機類似,都是在同一硬件上虛擬化出多個服務器應用實例的功能,據Bottomley聲稱,借助經過全面調優的容器系統,你就可以在同一硬件上擁有數量比使用Xen虛擬機或KVM虛擬機多出四到六倍的服務器應用實例。谷歌和Docker等公司一直在致力於研發諸如OpenVZ和LXC(Linux容器)之類的開源項目,旨在讓容器運行起來順暢又安全。

然而,Docker建立在LXC的基礎上。與任何容器技術一樣,就該程序而言,它有自己的文件系統、存儲系統、處理器和內存等部件。

容器與虛擬機之間的區別主要在於,虛擬機管理程序對整個設備進行抽象處理,而容器只是對操作系統內核進行抽象處理。

這反過來意味着:虛擬機管理程序能做容器做不了的一件事就是,使用不同的操作系統或內核。所以,舉例說,你可以使用微軟Azure,同時運行Windows Server2012的實例和SUSE Linux企業級服務器的實例。至於Docker,所有容器都必須使用同樣的操作系統和內核。

另一方面,如果你只是想讓盡可能多的服務器應用實例在盡可能少的硬件上運行,可能不大關心運行多個操作系統虛擬機。要是同一應用程序的多個副本正是你需要的,那么你會喜歡上容器。

改用Docker這一舉措有望每年為數據中心或雲計算服務提供商節省數千萬美元的電力和硬件成本。所以難怪它們在一窩蜂地盡快采用Docker。

Docker帶來了之前技術所沒有的幾個新特點。第一是,與之前的方法相比,Docker讓容器部署和使用起來更容易、更安全。此外,由於Docker與其他容器領域的巨擘進行了合作,包括Canonical、谷歌、紅帽和Parallels,共同開發其關鍵的開源組件libcontainer,它為容器帶來了迫切需要的標准化。

與此同時,廣大開發人員可以使用Docker封裝、交付和運行任何應用程序,應用程序成為輕型的、可移植的、自給自足的LXC容器,可以在任何地方運行。正如Bottomley告訴我,“容器讓你立即享有應用程序可移植性。”

最后但並非最不重要的,Docker容器易於部署到雲端。正如Ben Lloyd Pearson在opensource.com上寫道:“Docker采用了一種特別的方式,以便可以整合到大多數DevOps(開發運營)應用程序當中,包括Puppet、Chef、Vagrant和Ansible,或者可以獨自使用,以管理開發環境。主要賣點是,它簡化了通常由另外這些應用程序執行的好多任務。具體來說,有了Docker,人們就可以搭建與活動服務器一模一樣的本地開發環境,從同一個主機運行多個開發環境(每個開發環境有獨特的軟件、操作系統和配置),在新的或不同的服務器上測試項目,以及讓任何人都可以在設置一模一樣的情況下處理同一項目,無論本地主機環境怎樣。”

簡而言之,Docker能為你做的事情就是:相比其他技術,它能讓更多數量的應用程序在同一硬件上運行;它讓開發人員易於快速構建可隨時運行的容器化應用程序;它大大簡化了管理和部署應用程序的任務。

 

Docker解決了什么問題

1、程序在我這跑得好好的,在你那怎么就不行呢?

這是一個典型的應用場景,Docker image中包含了程序需要的所有的運行時依賴,比如java的程序,肯定要在image中包含jdk;比如Python的程序,肯定要在image中包含對應版本的Python解釋器。程序在我這跑得好好的,去你那就不行了,顯然是環境問題。Docker把整個運行時環境打包放到image中,所以搞定了環境依賴問題!

這點很重要么?真的很重要!如果你做過部署或發布系統將會對此感觸頗深。

我們知道,一個程序要跑起來,需要這么幾部分:代碼 + 運行環境 + 配置 + 依賴的服務。代碼當然就是同一份代碼,不同的環境都一樣,通常不會有問題,Docker image中包含了運行環境+配置,這對部署相當友好。

所以總結起來就是:Docker解決了運行環境和配置問題,方便發布,也就方便做持續集成。

2、系統好卡,肯定是又有哪個哥們的程序在作孽了

現在的服務器都牛的很,動不動128G內存,24個CPU,Linux本身就是個多租戶的操作系統,可以多人共用,但是如果某個程序狂吃內存和CPU,占用了太多系統資源,這就會影響其他程序的運行。

一個公司的幾個同事共用一台機器出現這種問題可以通過內部協調溝通解決。但是雲主機提供商呢?不同的用戶之間不認識,共用一台強大的計算機,結果某個程序耗盡了資源,用戶肯定不樂意了。

所以虛擬機出現了,良好了做了資源隔離,不同用戶之間彼此老死不相往來,不會相互影響,世界一下子清靜了。但是,虛擬機有缺點:創建速度慢,遷移起來麻煩,因為中間加了一層guest os,有了性能損耗,一個牛逼的機器也就創建十幾個虛擬機,太浪費了……

相對虛擬機的重量級虛擬化方案,Linux內核級的一些隔離方案讓人們看到了希望,cgroups、namespace、tc、quota、chroot、lxc,終於,Docker出現了,Docker利用這些成熟的技術,讓虛擬化變得輕量了起來,創建一個container瞬間完成,秒級!cpu指令集不再被翻譯執行,性能損耗非常少,雖說隔離性沒有虛擬機那么徹底,安全性上稍差一些,但也基本可以用,不用太擔心:)

所以總結起來就是:更輕量的虛擬化,節省了虛擬機的性能損耗

上面兩點是Docker解決的問題,那它有哪些應用場景呢?

其實從上面的描述中也基本可以窺其一二了

1、程序分發,gitlab的安裝很惡心吧,所以有人做了gitlab的image

2、部署發布,這點對運維的同學很有幫助

3、PaaS,tsuru、flynn都是基於Docker的,CloudFoundry也要從warden遷移到Docker,不解釋


免責聲明!

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



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