01 - Docker的概述、原理及能解決的問題

當下的問題

  • 開發、測試、生產等環境的不同可能導致應用程序運行的結果有所不同,甚至會出現錯誤:

    • 如:各環境中的JDK、Tomcat、MySQL等版本各有不同;
    • 在JDK1.6中寫的代碼可能在JDK1.8中已經Deprecated了;
    • 在JDK1.8中寫的代碼可能在JDK1.6中還不支持。
  • 需要在一個項目的多個版本中進行切換時很不方便,項目轉移服務器時很不方便:

    • 如有一個博客,在1.0這個版本中不允許網友發博文,在2.0這個版本中允許網友發博文,在運行了2.0版本一段時間後需要切換到1.0時就相對較麻煩(除非在服務器上存有多個版本);
    • 當需要將此博客網站移到其他服務器是顯得有些麻煩,特別是轉移後還有可能需要在多個版本中切換使用,轉移過程也可能會導致數據丟失或操作錯誤等問題。
  • 多人使用同一臺服務器時的尷尬問題難以解決:

    • 多人使用同一服務器的問題最爲嚴重,因爲每個人的開發環境都有可能不同,各種服務工具的版本不統一問題、各種配置習慣不統一的問題等;
    • 在服務器運維過程中很難同時滿足諸多開發者的不同需求;
    • 也很難在同一服務器上安裝多個不同版本的JDK、Tomcat、MySQL等
  • ……

Docker概述

Docker的誕生可以很輕鬆的解決上述的各種問題,並且Docker的作用遠不止這些。

先來看一下在Docker中的幾個比較關鍵的組件:

  • 容器 - Docker運行的最小單位:
    • 每個容器都是一個輕量級的虛擬機;
    • 每個容器都擁有獨立的root文件系統、網絡服務、進程服務等
    • 容器與容器之間可以互不干擾,容器不會關心其他容器內部運行的是什麼東西,所以通過容器可以讓一臺服務器內安裝不同版本的JDK、Tomcat等(只要運行在不同的容器內部即可);
    • 一般一個容器只幹一件事情,如:一個容器內只運行Tomcat,另一容器內只運行MySQL。
  • 鏡像 - 用於產生容器:
    • 一個鏡像可以產生很多容器;
    • 鏡像可以在本地創建,創建成功後即可啓動容器運行;
    • 可以將鏡像推送(push)到Registry(倉庫)中;
    • 可以將Registry(倉庫)中的鏡像拉取(pull)到本地。
  • Registry(倉庫)- 用於存放鏡像:
    • Registry可以是官方的,也可以是國內知名的(如阿里雲的),也可以是私有的;
    • 由於倉庫在遠程,所以爲應用程序的移植提供的便利。

Docker的原理及各個重要組件間的關係可以通過下圖有所認識:

Docker幾個重要組件的關係圖

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