筆者打算寫一個完整系列的docker知識總結(jié),本文是第一篇,主要介紹docker是什么?主要的應(yīng)用場景是什么?解決了哪些問題?和虛擬機(jī)有什么區(qū)別?
Docker是一個開源的容器引擎,它輕巧,且易移植,“build once, configure once and run anywhere”。使用go語言開發(fā),并遵從apache2.0協(xié)議。
一、 傳統(tǒng)軟件行業(yè)中存在的問題
- 開發(fā)、生產(chǎn)、測試環(huán)境不一致,開發(fā)環(huán)境下可用的服務(wù)挪到生產(chǎn)上不可用。
- 不同環(huán)境之間遷移成本太高,沒有統(tǒng)一的軟件部署封裝標(biāo)準(zhǔn)及封裝環(huán)境。
- 對于分布式軟件持續(xù)集成(測試、打包、發(fā)布、部署、管理)周期很長,難以自動化、工程化。
- 面臨瞬時用戶流量增大的場景,很難實現(xiàn)分布式應(yīng)用服務(wù)實例的快速部署。
二、集裝箱與docker之間的關(guān)系
通常稱docker為軟件行業(yè)的集裝箱技術(shù),那么docker和集裝箱有什么相似之處呢?
傳統(tǒng)行業(yè)集裝箱 | 軟件行業(yè)Docker |
---|---|
裝載實體貨物 | 裝載并運(yùn)行應(yīng)用服務(wù) |
具有統(tǒng)一的規(guī)格,便于搬運(yùn) | 封裝環(huán)境的統(tǒng)一性(JDK、環(huán)境變量都可以封裝在一個docker鏡像里面),可以遵從一定規(guī)則反復(fù)的、快速的自動化安裝部署 |
環(huán)境隔離,每個公司的集裝箱貨物與其他的公司的貨物不混在一起。 | 在linux中采用namespace技術(shù)進(jìn)行資源隔離,cgroups技術(shù)進(jìn)行資源限制。容器之間互不影響。 |
資源共享,一個運(yùn)送集裝箱的船舶,搭載多個集裝箱 | 一臺服務(wù)器可以啟動多個docker容器,達(dá)到共享服務(wù)器資源的目的 |
具備完整的物流倉儲系統(tǒng) | docker鏡像倉庫中的鏡像,可以導(dǎo)出導(dǎo)入,上傳下載 |
可以參考我的另一篇文章《【大話云原生】煮餃子與docker之間的關(guān)系》,我覺得這篇文章對于您理解docker將有非常大的幫助。
三、docker與虛擬機(jī)的區(qū)別
docker和虛擬機(jī)在某些應(yīng)用場景下比較像,但是docker不是虛擬機(jī)。
docker是一種虛擬化容器技術(shù),他和虛擬機(jī)最根本的區(qū)別是:docker容器和宿主機(jī)共用linux操作系統(tǒng)內(nèi)核,不會在宿主機(jī)上再次安裝操作系統(tǒng)。docker容器運(yùn)行狀態(tài)下的本質(zhì)是宿主機(jī)上的進(jìn)程,通過namespace資源隔離,cgroups資源限制,使它看上去像是一個獨(dú)立的虛擬機(jī).
對比項 | 虛擬機(jī) | docker容器 |
---|---|---|
啟動速度 | 龜速(本質(zhì)是啟動操作系統(tǒng)) | 秒速(本質(zhì)是啟動一個進(jìn)程) |
鏡像大小 | 以Ubuntu為例,1G以上 | Ubuntu:195M |
應(yīng)用部署集成 | 通常是手動安裝 | 下載鏡像+啟動鏡像(自動) |
內(nèi)存訪問效率 | 慢,先訪問虛擬地址 | 基本等同于宿主機(jī) |
CPU損耗 | 虛擬操作系統(tǒng)造成的損耗較大 | 接近于0 |
四、docker的應(yīng)用場景
- docker鏡像一旦構(gòu)建,就已經(jīng)一次性完成了應(yīng)用自動打包、集成。docker鏡像可以進(jìn)行版本管理、復(fù)制、分享、修改,就像管理代碼一樣。
- 通過統(tǒng)一的docker環(huán)境封裝(比如鏡像中封裝了同一版本的JDK、同樣的環(huán)境變量等等),保證應(yīng)用服務(wù)運(yùn)行環(huán)境的一致性。避免出現(xiàn)在測試環(huán)境上好用,挪到生產(chǎn)環(huán)境下運(yùn)行失敗的問題。
- docker可以做到秒級、甚至毫秒級的啟動時間。大大的節(jié)約了開發(fā)、測試、部署的時間。
- 因為鏡像可下載、可復(fù)用,docker容器可快速啟動等特性,結(jié)合容器編排服務(wù)(k8s)可以實現(xiàn)大型分布式部署的彈性伸縮,快速擴(kuò)展。
五、總結(jié)
如果初學(xué)者對于本節(jié)內(nèi)容理解起來有困難,也不要?dú)怵H。其實docker的學(xué)習(xí)難度很低,隨著學(xué)習(xí)的深入,上面的這些概念很容易理解的。文章來源:http://www.zghlxwxcb.cn/news/detail-401116.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-401116.html
到了這里,關(guān)于【docker系列】docker解決的實際問題及應(yīng)用場景的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!