認識 Docker 的世界

Docker 簡介:

  • Docker 是一種運行於 Linux 和 Windows 上的軟件,用於創建、管理和編排容器。
  • Docker 是在 GitHub 上開發的 Moby 開源項目的一部分。
  • Docker 公司,位於舊金山,是整個 Moby 開源項目的維護者。Docker 公司還提供商業版和社區版。

 Dockeræ å¿

 

Docker 運行時與編排引擎:

  • Docker 引擎是用於運行和編排容器的基礎設施工具。有 VMware 管理經驗的讀者可以將其類比爲 ESXi。
  • ESXi 是運行虛擬機的核心管理程序,而 Docker 引擎是運行容器的核心容器運行時。
  • 其他 Docker 公司或第三方的產品都是圍繞 Docker 引擎進行開發和集成的。

å´ç»Dockerå¼æè¿è¡å¼ååéæç产å

 

 

Docker 開源項目(Moby):

 Moby is an open-source project created by Docker to enable and accelerate software containerization.

It provides a "Lego set" of toolkit components, the framework for assembling them into custom container-based systems, and a place for all container enthusiasts and professionals to experiment and exchange ideas. Components include container build tools, a container registry, orchestration tools, a runtime and more, and these can be used as building blocks in conjunction with other tools and projects.

Docker 首席技術官 Solomon Hykes 對於此舉的解釋是:

按照設計,Moby 面向的是希望基於容器構建自己的系統的系統構建者,而不是可以使用 Docker 或其他容器平臺的應用程序開發人員。Moby 項目的參與者可以從源於 Docker 的組件庫中選擇,或者他們也可以選擇“帶來自己的組件”(BYOC),包括可以打包成容器,然後混合搭配所有組件,創建一個定製化的容器系統。

 

Docker 應用場景:

  • 【微服務架構】通過對特定的業務領域進行分析和業務建模,將複雜的業務邏輯剝離成小而專一、耦合度低並且高度自治的一組服務,原生容器輕量級、統一部署的特性爲解決各個微服務統一管理、調度、部署帶來了全新的思路,並且大大降低了服務和服務之間、版本和版本之間的依賴關係,讓同一個微服務在不同環境中保持良好的一致性。

  • 【持續集成(CI)與持續交付/部署(CD)】基於原生容器的DevOps平臺爲用戶提供基礎的開發環境,使開發者只需要關注代碼開發減少相關工具的安裝和配置工作量。同時豐富的容器鏡像,可以讓運維人員在平臺上快速部署開發所需要的服務,支持通過環境變量綁定服務。實現開發環境、測試環境以及生產環境的隔離以及環境的快速搭建和回收,提高了整體效率。

  • 【快速彈性伸縮】藉助容器快速啓動、快速部署、海量併發的能力,對於需求變化量大,並且需要快速啓動幾百甚至上千臺機器的應用,容器可以非常好地滿足業務的突發需求。

 

Docker VS VM(虛擬機):

容器和虛擬機都依賴於【宿主機】才能運行。宿主機可以是 =》【筆記本】,【PC主機】,【樹莓派】,【數據中心的物理服務器】,【公有云的某個實例】。

在上面的示例中,假設宿主機是一臺需要運行 4 個業務應用的物理服務器。

  • 【Docker容器模型】服務器啓動之後,所選擇的操作系統會啓動。在 Docker 世界中可以選擇 Linux,或者內核支持內核中的容器原語的新版本 Windows。 與虛擬機模型相同,OS 也佔用了全部硬件資源。在 OS 層之上,需要安裝容器引擎(如 Docker)。 容器引擎可以獲取系統資源,比如進程樹、文件系統以及網絡棧,接着將資源分割爲安全的互相隔離的資源結構,稱之爲容器。 每個容器看起來就像一個真實的操作系統,在其內部可以運行應用。按照前面的假設,需要在物理機上運行 4 個應用。 因此,需要劃分出 4 個容器並在每個容器中運行一個應用,如上圖(左側)所示。
  • 【VM模型】在虛擬機模型中,首先要開啓物理機並啓動 Hypervisor 引導程序。一旦 Hypervisor 啓動,就會佔有機器上的全部物理資源,如 CPU、RAM、存儲和 NIC。 Hypervisor 接下來就會將這些物理資源劃分爲虛擬資源,並且看起來與真實物理資源完全一致。 然後 Hypervisor 會將這些資源打包進一個叫作虛擬機(VM)的軟件結構當中。這樣用戶就可以使用這些虛擬機,並在其中安裝操作系統和應用。 前面提到需要在物理機上運行 4 個應用,所以在 Hypervisor 之上需要創建 4 個虛擬機並安裝 4 個操作系統,然後安裝 4 個應用。當操作完成後,結構如上圖(右側)所示。

Docker 總結:

  • Docker 是一個開源應用容器引擎,支持第三方開發和集成;
  • Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的鏡像中,然後發佈部署到任何流行的Linux機器上,也可以實現虛擬化;
  • Docker 容器通過 Docker 鏡像來創建。
  • Docker 容器之間不會有任何接口衝突,實現進程級隔離;
  • Docker 容器的性能開銷極其低,佔用資源少,啓動速度快,相對 VM 更加輕量級;

 

【Docker核心體系】:

  • 容器:集裝箱 ---集裝箱模塊 《==》 對象 --- 獨立運行的應用;
  • 鏡像:集裝箱模塊 類 《==》 獨立運行的應用程序;
  • 倉庫:碼頭,程序集 《==》存儲鏡像;

 

【Docker外部運行架構圖】

Docker 是典型的客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器,其中客戶端常用工具有:

  1. Bash Shell (Linux默認)
  2. XShell (是一個強大的安全終端模擬軟件)
  3. PowerShell(是開源,跨平臺的構建於 .net core 上基於任務的命令行 shell 和腳本語言,兼容 cmd) 
  4. Windows PowerShell (Windows 平臺,基於.net 構建,兼容 cmd)

【Docker的組成關係】

 注:pwsh 更多參考=》https://docs.microsoft.com/zh-cn/powershell/scripting/overview?view=powershell-7

Docker 鏡像(Images) Docker 鏡像是用於創建 Docker 容器的模板。
Docker 容(Container) 容器是獨立運行的一個或一組應用。
Docker 客戶端(Client) Docker 客戶端通過命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 與 Docker 的守護進程通信。
Docker 主機(Host) 一個物理或者虛擬的機器用於執行 Docker 守護進程和容器。
Docker 倉庫(Registry)

Docker 倉庫用來保存鏡像,可以理解爲代碼控制中的代碼倉庫。

Docker Hub(https://hub.docker.com) 提供了龐大的鏡像集合供使用。

Docker Machine Docker Machine是一個簡化Docker安裝的命令行工具,通過一個簡單的命令行即可在相應的平臺上安裝Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

 

【Docker daemon 通信與安全客戶端】

é置客æ·ç«¯åæå¡ç«¯éè¿ç½ç»è¿è¡éä¿¡

Docker 使用了客戶端—服務端模型。客戶端使用 CLI,同時服務端(daemon)實現功能,並對外提供 REST API。 

客戶端叫作 docker(在 Windows 上是 docker.exe),daemon 叫作 dockerd(在 Windows 上是 dockerd.exe)。默認安裝方式將客戶端和服務端安裝在同一臺主機上,並且配置通過本地安全 PIC Socket 進行通信。

  • Linux:/var/run/docker.sock。
  • Windows://./pipe/docker_engine。

默認使用 2375 作爲客戶端和服務端之間未加密通信方式的端口,而 2376 則用於加密通信。在實驗室這樣還可以,但是生產環境卻是不能接受的。TLS 就是解決之道!
Docker 允許用戶配置客戶端和 daemon 間只接收安全的 TLS 方式連接。生產環境中推薦這種配置,即使在可信內部網絡中,也建議如此配置!
Docker 爲客戶端與 daemon 間使用基於 TLS 的安全通信提供了兩種模式。

  • daemon 模式:Docker daemon 只接收認證客戶端的鏈接。
  • 客戶端模式:Docker 客戶端只接收擁有證書的 Docker daemon 發起的鏈接,其中證書需要由可信 CA 簽發。

同時使用兩種模式能提供最高的安全等級。下面會使用簡單的實驗環境來完成 Docker 的 daemon 模式和客戶端模式 TLS 的配置過程。

 

【應用容器化構建過程】:

以上資料部分參考:

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