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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章