【docker專欄1】docker解決的實際問題及應用場景

語言: CN / TW / HK

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