認識Docker

小鍇的學習筆記發表於2020-11-15

目錄

認識Docker

容器

什麼是容器?

容器與虛擬機器之間的區別:

容器究竟解決了什麼問題?

容器的優點:

容器的缺點:

容器的分類:

Docker技術

什麼是Docker?

Docker究竟是什麼?

Docker的架構與組成

Docker中的基本概念:

為什麼使用Docker?

Docker的應用場景

Docker可以解決那些問題?

Docker的應用成本


認識Docker

容器

什麼是容器?

所謂容器,是一種輕量級的作業系統級虛擬化,可以讓使用者在一個資源隔離的程式中執行應用及其依賴項.執行應用程式所必需的的元件都將打包成一個映象並可以複用.執行映象時,它執行在一個隔離環境中,並且不會共享宿主機的記憶體,CPU以及磁碟,這就保證了容器內的程式不能監控容器外的任何程式.

容器與虛擬機器之間的區別:

容器究竟解決了什麼問題?

容器非常適合於在當前雲端計算環境快速地遷移部署應用系統.

容器的優點:

  1. 敏捷度高.部署一個容器化的應用系統,可以按分鐘,甚至秒級來計算.
  2. 提高生產力.容器通過接觸跨服務的依賴和衝突提高了開發者的生產力.每個容器都可以看作是一個不同的微服務,因此可以獨立升級,而不用擔心與其他服務的同步問題.
  3. 版本控制.每個容器的映象都有版本控制,可以跟蹤不同版本的容器,監控版本之間的差異.
  4. 執行環境可移植.容器封裝了所有執行應用程式所必需的的相關的細節,這就使得映象從一個環境移植到另一個環境更加靈活.
  5. 標準化.大多數容器基於開放的標準,可以執行在所有主流的平臺上.
  6. 安全.容器之間的程式是相互隔離的,其中的基礎設施亦是如此.這樣其中一個容器的升級或者變化不會影響其他容器.

容器的缺點:

  1. 複雜性增加.隨著容器及應用數量的增加,同時也伴隨著複雜性的增加.可以藉助Kubernetes和Mesos等工具來管理具有一定規模數量的容器.
  2. 原生Linux支援.大多數容器技術都是基於Linux的(如Docker是基於Linux容器LXC技術的),在Windows環境中執行容器略顯笨拙.
  3. 不成熟.容器技術是相對比較新的技術,開發者的可用資源是有限的,如果某個開發者陷入某個問題,可能需要花些時間才能解決問題.

容器的分類:

大致來說,容器可以分為作業系統容器應用容器兩大型別.(也有將容器分為作業系統容器,執行環境容器和應用系統容器三大類的)

作業系統容器是作業系統層的虛擬化,也可以看作是一種計算機虛擬化技術.這種虛擬化技術將作業系統的核心虛擬化,可以允許多個獨立使用者空間的存在,而不是隻有一個.從執行在容器中 應用程式的角度來看,這些容器的例項就如同真正的計算機.當需要配置大量具有相同配置的作業系統時,作業系統容器就會非常有用,因此,容器有助於建立模板,可用於建立與另一個作業系統類似風格的容器.

應用容器是指應用程式的虛擬化,就是從其所執行的底層作業系統封裝計算機程式的軟體技術.應用容器旨在作為單個程式進行打包和執行服務,而在作業系統容器中,可以執行多個服務和程式.

Docker技術

什麼是Docker?

Docker就是一個應用容器引擎,通過Docker,可以非常方便地對容器進行管理,Docker基於Go語言開發,並且遵從Apache2.0開源協議.

Docker完全使用沙箱機制,容器之間不會有任何的介面.(沙箱是一種按照安全策略限制程式行為的執行環境)

Docker現在已經逐漸成為輕量級虛擬化的代名詞,成為雲應用部署的事實上的標準.

Docker究竟是什麼?

對開發人員來說,Java之前的開發語言,例如C或者C++都是嚴重依賴於平臺的.同樣的程式碼,在不同的平臺下,需要重新編譯才可以執行.為了解決這個問題Java誕生了,開發人員只要將Java程式碼編譯成可以在Java虛擬機器中執行的目的碼就可以了,與平臺有關的具體細節交給Java虛擬機器去處理就行了,開發者不用關心這個問題.

此外,開發人員在開發應用程式的時候,總會存在版本迭代的問題,為了管理不同的版本,人們開發出了Git,通過Git,開發人員可以任意地在不同版本之間切換,同時也解決了協同開發人員之間的程式碼衝突問題.

類似的,在部署應用系統的時候,會存在這元件之間的依賴問題,而系統所依賴的其他元件必然存在著與具體的平臺相容的問題.在每次遷移系統時都需要逐一處理這些依賴元件.而Docker提供了類似於Java虛擬機器的功能,相對於應用系統而言,Docker遮蔽了與平臺相關的具體細節.Docker像一個集裝箱,把應用系統及其依賴元件包裝起來.在遷移系統時,只要把這個"集裝箱"搬過去即可,而不必處理"集裝箱"裡面的具體細節.

Docker這個功能特性的實現,在於開發人員為不同平臺提供了相對應的映象檔案,映象檔案中包含了容器的內容,即應用系統以及依賴元件.既然是檔案,必然也存在著版本的問題,Docker同樣提供了基於Git的版本控制機制.

Docker的架構與組成

Docker是一個典型的C/S架構.

通過Docker客戶端可以與Docker伺服器進行互動,而Docker伺服器則負責構建,執行和分發Docker映象.

Docker中的基本概念:

映象:

映象Image是Docker中非常重要的一個概念.簡單地講,映象就是容器的模板.對於普通使用者來說,映象檔案通常都是只讀的.映象相當於構建和打包階段

容器:

容器是獨立執行的一個或者一組應用,是從映象建立的執行例項.容器是可讀可寫的.容器相當於啟動和執行階段.

可以把容器看作是一個簡易版的Linux環境,包括root使用者許可權,程式空間,使用者空間和網路空間等以及執行在其中的應用程式.

倉庫:

倉庫是集中存放映象檔案的地方.倉庫分為公有倉庫和私有倉庫兩種形式,如Docker Hub是最大的公有倉庫.

有時候會把倉庫和倉庫註冊伺服器混為一談,並不嚴格區分.實際上,倉庫註冊伺服器上往往存放著多個倉庫,每個倉庫中又包含了多個映象,每個映象都有不同的標籤.

為什麼使用Docker?

Docker的迅速發展,與雲端計算技術是密不可分的.

Docker的應用場景

Docker用於提供輕量級的虛擬化服務.它的應用場景非常廣泛,主要有以下幾種:

  1. 簡化配置:Docker將應用程式程式碼,執行環境以及配置進行打包,使用者在部署時,只要以該映象為模板,建立容器即可.實際上,這實現了應用環境和底層環境的解耦.
  2. 便於實現開發環境和生產環境的統一:開發人員可以讓每個服務執行在單獨的容器中,這樣能模擬生產環境的分散式部署.
  3. 應用隔離:隨著硬體技術的發展,在一臺機器上執行單個應用是非常罕見的了.為了使得各個應用之間不相互影響,需要解決各個應用系統之間的隔離問題,而Docker能輕鬆解決這個問題.
  4. 雲端計算環境:通過建立Docker容器,可以很好地解決雲端計算環境中多租戶的需求,快速靈活地為租戶提供服務.
  5. 快速部署:Docker可以快速地部署各種應用系統.

Docker可以解決那些問題?

簡化部署過程.

節省開支.雲端計算時代的到來,使開發者不必為了追求效能而配置高額的硬體,Docker改變了高效能必然高價格的思維定勢.Docker與雲端計算的結合,不僅解決了硬體管理的問題,也改變了虛擬化的方式.

Docker的應用成本

Docker的廣泛應用極大的降低了IT設施的運維成本.主要有:

  • 減少部署的時間成本和人力成本.
  • 標準化應用的釋出,可以跨平臺和跨主機使用.
  • 節約啟動的時間.
  • 節約儲存成本.