Docker究竟是什么 為什么這么流行 它的優(yōu)點(diǎn)和缺陷有哪些?
Docker是什么?
簡(jiǎn)單得來(lái)說(shuō),Docker是一個(gè)由GO語(yǔ)言寫(xiě)的程序運(yùn)行的“容器”(Linux containers, LXCs); 目前云服務(wù)的基石是操作系統(tǒng)級(jí)別的隔離,在同一臺(tái)物理服務(wù)器上虛擬出多個(gè)主機(jī)。Docker則實(shí)現(xiàn)了一種應(yīng)用程序級(jí)別的隔離; 它改變我們基本的開(kāi)發(fā)、操作單元,由直接操作虛擬主機(jī)(VM),轉(zhuǎn)換到操作程序運(yùn)行的“容器”上來(lái)。
Docker是為開(kāi)發(fā)者和系統(tǒng)管理員設(shè)計(jì)的,用來(lái)發(fā)布和運(yùn)行分布式應(yīng)用程序的一個(gè)開(kāi)放性平臺(tái)。由兩部分組成:
Docker Engine: 一個(gè)便攜式、輕量級(jí)的運(yùn)行環(huán)境和包管理器。(注* 單OS vs 單線程,是不是跟NodeJS特別像?)
Docker Hub: 為創(chuàng)建自動(dòng)化工作流和分享應(yīng)用創(chuàng)建的云服務(wù)組成。(注* 云端鏡像/包管理 vs npm包管理,是不是跟npm特別像?)
從2013年3月20日,第一個(gè)版本的Docker正式發(fā)布到 2014年6月 Docker 1.0 正式發(fā)布,經(jīng)歷了15個(gè)月。 雖然發(fā)展歷程很短,但Docker正在有越來(lái)越流行的趨勢(shì)。
其實(shí)Container技術(shù)并非Docker的創(chuàng)新,HeroKu, NodeJitsu 等云服務(wù)商都采用了類(lèi)似這種輕量級(jí)的虛擬化技術(shù),但Docker是第一個(gè)將這這種Container技術(shù)大規(guī)模開(kāi)源并被社區(qū)廣泛接受的。
Docker相對(duì)于VM虛擬機(jī)的優(yōu)勢(shì)十分明顯,那就是輕量和高性能和便捷性, 以下部分摘自: KVM and Docker LXC Benchmarking with OpenStack
快運(yùn)行時(shí)的性能可以獲取極大提升(經(jīng)典的案例是提升97%)
管理操作(啟動(dòng),停止,開(kāi)始,重啟等等) 都是以秒或毫秒為單位的。
敏捷像虛擬機(jī)一樣敏捷,而且會(huì)更便宜,在bare metal(裸機(jī))上布署像點(diǎn)個(gè)按鈕一樣簡(jiǎn)單。
靈活將應(yīng)用和系統(tǒng)“容器化”,不添加額外的操作系統(tǒng),
輕量你會(huì)擁有足夠的“操作系統(tǒng)”,僅需添加或減小鏡像即可。在一臺(tái)服務(wù)器上可以布署100~1000個(gè)Containers容器。
便宜開(kāi)源的,免費(fèi)的,低成本的。由現(xiàn)代Linux內(nèi)核支持并驅(qū)動(dòng)。注* 輕量的Container必定可以在一個(gè)物理機(jī)上開(kāi)啟更多“容器”,注定比VMs要便宜。
生態(tài)系統(tǒng)正在越來(lái)越受歡迎,只需要看一看Google的趨勢(shì)就知道了, docker or LXC.
還有不計(jì)其數(shù)的社區(qū)和第三方應(yīng)用。
云支持不計(jì)其數(shù)的云服務(wù)提供創(chuàng)建和管理Linux容器框架。
有關(guān)Docker性能方面的優(yōu)勢(shì),還可參考此IBM工程師對(duì)性能提升的評(píng)測(cè),從各個(gè)方面比VMs(OS系統(tǒng)級(jí)別虛擬化)都有非常大的提升。
Performance Characteristics of VMs vs Docker Containers by Boden Russel (IBM)
Performance characteristics of traditional v ms vs docker containers
有爭(zhēng)論的部分任何項(xiàng)目都會(huì)有爭(zhēng)論,就像Go,像NodeJS, 同樣Docker也有一些。
能否徹底隔離在超復(fù)雜的業(yè)務(wù)系統(tǒng)中,單OS到底能不能實(shí)現(xiàn)徹底隔離,一個(gè)程序的崩潰/內(nèi)存溢出/高CPU占用到底會(huì)不會(huì)影響到其他容器或者整個(gè)系統(tǒng)?很多人對(duì)Docker能否在實(shí)際的多主機(jī)的生產(chǎn)環(huán)境中支持關(guān)鍵任務(wù)系統(tǒng)還有所懷疑。 注* 就像有人質(zhì)疑Node.JS單線程快而不穩(wěn),無(wú)法在復(fù)雜場(chǎng)景中應(yīng)用一樣。
不過(guò)可喜的是,目前Linux內(nèi)核已經(jīng)針對(duì)Container做了很多改進(jìn),以支持更好的隔離。
GO語(yǔ)言還沒(méi)有完全成熟Docker由Go語(yǔ)言開(kāi)發(fā),但GO語(yǔ)言對(duì)大多數(shù)開(kāi)發(fā)者來(lái)說(shuō)比較陌生,而且還在不斷改進(jìn),距離成熟還有一段時(shí)間。此半git、半包管理的方式讓一些人產(chǎn)生不適。
被私有公司控制Docker是一家叫Dotcloud的私有公司設(shè)計(jì)的,公司都是以營(yíng)利為目的,比如你沒(méi)有辦法使用源代碼編繹Docker項(xiàng)目,只能使用黑匣子編出的Docker二進(jìn)制發(fā)行包,未來(lái)可能不是完全免費(fèi)的。 目前Docker已經(jīng)推出面向公司的企業(yè)級(jí)服務(wù)(咨詢(xún)、支持和培訓(xùn))。
相關(guān)文章:
1. msxml3.dll 錯(cuò)誤 800c0019 系統(tǒng)錯(cuò)誤:-2146697191解決方法2. jsp+servlet簡(jiǎn)單實(shí)現(xiàn)上傳文件功能(保存目錄改進(jìn))3. 解析原生JS getComputedStyle4. 輕松學(xué)習(xí)XML教程5. HTML DOM setInterval和clearInterval方法案例詳解6. 阿里前端開(kāi)發(fā)中的規(guī)范要求7. xpath簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理8. jsp EL表達(dá)式詳解9. css代碼優(yōu)化的12個(gè)技巧10. jsp實(shí)現(xiàn)登錄驗(yàn)證的過(guò)濾器
