Docker是一個開源的容器引擎,它輕巧,且易移植,“build once, configure once and run anywhere”。使用go語言開發,並遵從apache2.0協議。
一、 傳統軟體行業中存在的問題
- 開發、生產、測試環境不一致,開發環境下可用的服務挪到生產上不可用。
- 不同環境之間遷移成本太高,沒有統一的軟體部署封裝標準及封裝環境。
- 對於分散式軟體持續整合(測試、打包、釋出、部署、管理)週期很長,難以自動化、工程化。
- 面臨瞬時使用者流量增大的場景,很難實現分散式應用服務例項的快速部署。
二、集裝箱與docker之間的關係
通常稱docker為軟體行業的集裝箱技術,那麼docker和集裝箱有什麼相似之處呢?
傳統行業集裝箱 | 軟體行業Docker |
---|---|
裝載實體貨物 | 裝載並執行應用服務 |
具有統一的規格,便於搬運 | 封裝環境的統一性(JDK、環境變數都可以封裝在一個docker映象裡面),可以遵從一定規則反覆的、快速的自動化安裝部署 |
環境隔離,每個公司的集裝箱貨物與其他的公司的貨物不混在一起。 | 在linux中採用namespace技術進行資源隔離,cgroups技術進行資源限制。容器之間互不影響。 |
資源共享,一個運送集裝箱的船舶,搭載多個集裝箱 | 一臺伺服器可以啟動多個docker容器,達到共享伺服器資源的目的 |
具備完整的物流倉儲系統 | docker映象倉庫中的映象,可以匯出匯入,上傳下載 |
可以參考我的另一篇文章《【大話雲原生】煮餃子與docker之間的關係》,我覺得這篇文章對於您理解docker將有非常大的幫助。
三、docker與虛擬機器的區別
docker和虛擬機器在某些應用場景下比較像,但是docker不是虛擬機器。
docker是一種虛擬化容器技術,他和虛擬機器最根本的區別是:docker容器和宿主機共用linux作業系統核心,不會在宿主機上再次安裝作業系統。docker容器執行狀態下的本質是宿主機上的程式,通過namespace資源隔離,cgroups資源限制,使它看上去像是一個獨立的虛擬機器.
對比項 | 虛擬機器 | docker容器 |
---|---|---|
啟動速度 | 龜速(本質是啟動作業系統) | 秒速(本質是啟動一個程式) |
映象大小 | 以Ubuntu為例,1G以上 | Ubuntu:195M |
應用部署整合 | 通常是手動安裝 | 下載映象+啟動映象(自動) |
記憶體訪問效率 | 慢,先訪問虛擬地址 | 基本等同於宿主機 |
CPU損耗 | 虛擬作業系統造成的損耗較大 | 接近於0 |
四、docker的應用場景
- docker映象一旦構建,就已經一次性完成了應用自動打包、整合。docker映象可以進行版本管理、複製、分享、修改,就像管理程式碼一樣。
- 通過統一的docker環境封裝(比如映象中封裝了同一版本的JDK、同樣的環境變數等等),保證應用服務執行環境的一致性。避免出現在測試環境上好用,挪到生產環境下執行失敗的問題。
- docker可以做到秒級、甚至毫秒級的啟動時間。大大的節約了開發、測試、部署的時間。
- 因為映象可下載、可複用,docker容器可快速啟動等特性,結合容器編排服務(k8s)可以實現大型分散式部署的彈性伸縮,快速擴充套件。
五、總結
如果初學者對於本節內容理解起來有困難,也不要氣餒。其實docker的學習難度很低,隨著學習的深入,上面的這些概念很容易理解的。
覺得對您有幫助的話,幫我點贊、分享!您的支援是我不竭的創作動力!。更多精彩內容公眾號:字母哥雜談。字母哥部落格:zimug.com