1. 程式人生 > 其它 >docker 基礎介紹

docker 基礎介紹

1. docker 是什麼

大家都知道虛擬機器吧,windows 上裝個 linux 虛擬機器是大部分程式設計師的常用方案。公司生產環境大多也是虛擬機器,虛擬機器將物理硬體資源虛擬化,按需分配和使用,虛擬機器使用起來和真實作業系統一模一樣,當廢棄不用時直接刪除虛擬機器檔案即可回收資源,很方便集中管理。

由於虛擬機器非常龐大,同時對硬體資源的消耗也大,linux 發展出了另一種虛擬化技術,即 linux 容器(Linux Containers,縮寫為 LXC),它並不像虛擬機器那樣模擬一個完整的作業系統,卻提供虛擬機器一樣的效果。如果說虛擬機器是作業系統級別的隔離,那麼容器就是程序級別的隔離,可以想象這種級別隔離的優點,無疑是快速的,節省資源的。

docker 就是對 linux 容器的封裝,提供簡單實用的使用者介面,是目前最流行的 linux容器解決方案。

下面是百科的定義:

docker 是基於 Go 語言的開源的應用容器引擎,並遵從Apache2.0協議,docker 讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。

2. docker 解決什麼問題

2.1. 解決虛擬機器資源消耗問題。

伺服器作業系統之上執行著虛擬機器,虛擬機器上執行著客戶作業系統,客戶作業系統之上執行著使用者的應用程式,一臺伺服器 80% 的資源開銷都花費在了硬體虛擬化和客戶機作業系統本身。

圖1. 虛擬機器架構與容器架構區別

如圖 1 所示,如果採用 docker 容器技術,容器上執行著虛擬伺服器,虛擬伺服器中執行著使用者的應用程式,虛擬伺服器和伺服器作業系統使用同一核心,虛擬伺服器的檔案系統使用物理伺服器的檔案系統,但做了隔離,看上去每個虛擬伺服器都有自己獨立的檔案系統;在物理伺服器上建立了虛擬網橋裝置,每個虛擬伺服器通過虛擬網橋裝置連線網路。虛擬伺服器直接使用物理伺服器的CPU、記憶體、硬碟,並不對硬體進行虛擬化,因此沒有硬體虛擬化和客戶機作業系統佔用的資源消耗,每一臺虛擬伺服器的效能接近於物理伺服器效能。

一臺普通家用電腦執行一個 Linux 虛擬機器可能已經非常卡,但是卻可以使用 docker 虛擬出幾十甚至上百臺虛擬的 linux 伺服器。如果換成效能強勁的伺服器,使用 docker 就可以提供私有云服務了。

2.2. 快速部署。

軟體開發的難題在於環境配置,在自己電腦上執行的軟體,換一臺機器可能就無法執行,除非保證作業系統的設定正確,各種元件和庫的正確安裝。比如部署一個 Java 開發的 web 系統,計算機必須安裝 Java 和正確的環境變數,可能還需要安裝 tomcat、nginx。換臺機器部署就要重來一次。

使用 docker 可以將應用程式及依賴打包在一個檔案裡(docker 映象檔案),執行這個檔案就會啟動虛擬伺服器,在虛擬伺服器啟動應用程式或服務,就像在真實在物理機上執行一樣,有了 docker,就可以一次部署,處處執行,也可以用於自動化釋出。

2.3. 提供一次性的環境。

比如,本地測試他人的軟體、持續整合的時候提供單元測試和構建的環境,啟動或關閉一個虛擬伺服器就像啟動或關閉一個程序一樣簡單和快速。

2.4. 提供彈性的雲服務。

因為 Docker 容器可以隨開隨關,很適合動態擴容和縮容。

2.5. 組建微服務架構。

通過多個容器,一臺機器可以跑很多個虛擬伺服器,因此在一臺機器上就可以模擬出微服務架構,也可以模擬出分散式架構。

3. 理解 docker架構

使用前先了解下 docker 的架構,如下圖所示:

 

docker 架構圖

  • docker 鏡象(image) 是存放在 docker 倉庫(Registry)的檔案,是用於建立 docker 容器 的模板。
  • docker 容器 是獨立執行的一個或一組應用,可以理解為前述介紹的虛擬伺服器。
  • docker 主機 是一個物理或者虛擬的機器用於執行 docker 守護程序和容器。
  • docker 客戶端 通過命令列或者其他工具使用 docker API 與 docker 的守護程序通訊。

作為使用者,我們直接使用的是 docker 客戶端。