Docker——詳細介紹

Docker——詳細介紹

Docker是什麼?

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。

  • Docker的組成:
  1. dockerClient客戶端
  2. Docker Daemon守護進程
  3. Docker Image鏡像
  4. DockerContainer容器
Docker——詳細介紹

Docker的優勢

  • docker 啟動快速屬於秒級別。虛擬機通常需要幾分鐘去啟動
  • docker 需要的資源更少, docker 在操作系統級別進行虛擬化, docker 容器和內核交互,幾乎沒有性能損耗,性能優於通過 Hypervisor 層與內核層的虛擬化
  • docker 更輕量, docker 的架構可以共用一個內核與共享應用程序庫,所佔內存極小。同樣的硬件環境, Docker 運行的鏡像數遠多於虛擬機數量,對系統的利用率非常高
  • 與虛擬機相比, docker 隔離性更弱, docker 屬於進程之間的隔離,虛擬機可實現系統級別隔離
  • 安全性: docker 的安全性也更弱。 Docker 的租戶 root 和宿主機 root 等同,一旦容器內的用戶從普通用戶權限提升為root權限,它就直接具備了宿主機的root權限,進而可進行無限制的操作。虛擬機租戶 root 權限和宿主機的 root 虛擬機權限是分離的,並且虛擬機利用如 Intel 的 VT-d 和 VT-x 的 ring-1 硬件隔離技術,這種隔離技術可以防止虛擬機突破和彼此交互,而容器至今還沒有任何形式的硬件隔離,這使得容器容易受到攻擊
  • 可管理性: docker 的集中化管理工具還不算成熟。各種虛擬化技術都有成熟的管理工具,例如 VMware vCenter 提供完備的虛擬機管理能力
  • 高可用和可恢復性: docker 對業務的高可用支持是通過快速重新部署實現的。虛擬化具備負載均衡,高可用,容錯,遷移和數據保護等經過生產實踐檢驗的成熟保障機制, VMware 可承諾虛擬機 99.999% 高可用,保證業務連續性
  • 快速創建、刪除:虛擬化創建是分鐘級別的, Docker 容器創建是秒級別的, Docker 的快速迭代性,決定了無論是開發、測試、部署都可以節約大量時間
  • 交付、部署:虛擬機可以通過鏡像實現環境交付的一致性,但鏡像分發無法體系化。 Docker 在 Dockerfile 中記錄了容器構建過程,可在集群中實現快速分發和快速部署
Docker——詳細介紹

Docker鏡像

Docker鏡像是一個只讀的模板。舉個例子,一個鏡像可以包含一個運行在Apache上的Web應用和其使用的Ubuntu操作系統。

鏡像是用來創建容器的。Docker提供了簡單的放來來建立新的鏡像或者升級現有的鏡像,你也可以下載別人已經創建好的鏡像。Docker鏡像是Docker的 構造 部分。

Docker倉庫

Docker倉庫用來保存鏡像。可以理解為代碼控制中的代碼倉庫。同樣的,Docker倉庫也有公有和私有的概念。公有的Docker倉庫名字是Docker Hub。Docker Hub提供了龐大的鏡像集合供使用。這些鏡像可以是你自己創建的,或者你也可以在別人的鏡像基礎上創建。Docker倉庫是Docker的 分發 部分。

Docker容器

Docker容器和文件夾很類似。一個Docker容器包含了所有的某個應用運行所需要的環境。每一個Docker容器都是從Docker鏡像創建 的。Docker容器可以運行、開始、停止、移動和刪除。每一個Docker容器都是獨立和安全的應用平臺。Docker容器是Docker的 運行

部分。

Docker——詳細介紹

Docker的真實應用場景

  • 簡化配置

這是Docker公司宣傳的Docker的主要使用場景。虛擬機的最大好處是能在你的硬件設施上運行各種配置不一樣的平臺(軟件、系統),Docker在降低額外開銷的情況下提供了同樣的功能。它能讓你將運行環境和配置放在代碼中然後部署,同一個Docker的配置可以在不同的環境中使用,這樣就降低了硬件要求和應用環境之間耦合度。

  • 代碼流水線(Code Pipeline)管理

前一個場景對於管理代碼的流水線起到了很大的幫助。代碼從開發者的機器到最終在生產環境上的部署,需要經過很多的中間環境。而每一箇中間環境都有自己微小的差別,Docker給應用提供了一個從開發到上線均一致的環境,讓代碼的流水線變得簡單不少。

  • 提高開發效率

這就帶來了一些額外的好處:Docker能提升開發者的開發效率。如果你想看一個詳細一點的例子,可以參考Aater在DevOpsDays Austin 2014 大會或者是DockerCon上的演講。

不同的開發環境中,我們都想把兩件事做好。一是我們想讓開發環境儘量貼近生產環境,二是我們想快速搭建開發環境。

理想狀態中,要達到第一個目標,我們需要將每一個服務都跑在獨立的虛擬機中以便監控生產環境中服務的運行狀態。然而,我們卻不想每次都需要網絡連接,每次重新編譯的時候遠程連接上去特別麻煩。這就是Docker做的特別好的地方,開發環境的機器通常內存比較小,之前使用虛擬的時候,我們經常需要為開發環境的機器加內存,而現在Docker可以輕易的讓幾十個服務在Docker中跑起來。

  • 隔離應用

有很多種原因會讓你選擇在一個機器上運行不同的應用,比如之前提到的提高開發效率的場景等。

我們經常需要考慮兩點,一是因為要降低成本而進行服務器整合,二是將一個整體式的應用拆分成松耦合的單個服務(譯者注:微服務架構)。如果你想了解為什麼松耦合的應用這麼重要,請參考Steve Yege的這篇論文,文中將Google和亞馬遜做了比較。

Docker——詳細介紹

  • 整合服務器

正如通過虛擬機來整合多個應用,Docker隔離應用的能力使得Docker可以整合多個服務器以降低成本。由於沒有多個操作系統的內存佔用,以及能在多個實例之間共享沒有使用的內存,Docker可以比虛擬機提供更好的服務器整合解決方案。

  • 調試能力

Docker提供了很多的工具,這些工具不一定只是針對容器,但是卻適用於容器。它們提供了很多的功能,包括可以為容器設置檢查點、設置版本和查看兩個容器之間的差別,這些特性可以幫助調試Bug。你可以在《Docker拯救世界》的文章中找到這一點的例證。

  • 多租戶環境

另外一個Docker有意思的使用場景是在多租戶的應用中,它可以避免關鍵應用的重寫。我們一個特別的關於這個場景的例子是為IoT(譯者注:物聯網)的應用開發一個快速、易用的多租戶環境。這種多租戶的基本代碼非常複雜,很難處理,重新規劃這樣一個應用不但消耗時間,也浪費金錢。

使用Docker,可以為每一個租戶的應用層的多個實例創建隔離的環境,這不僅簡單而且成本低廉,當然這一切得益於Docker環境的啟動速度和其高效的diff命令。

你可以在這裡瞭解關於此場景的更多信息。

  • 快速部署

在虛擬機之前,引入新的硬件資源需要消耗幾天的時間。虛擬化技術(Virtualization)將這個時間縮短到了分鐘級別。而Docker通過為進程僅僅創建一個容器而無需啟動一個操作系統,再次將這個過程縮短到了秒級。這正是Google和Facebook都看重的特性。

Docker——詳細介紹


分享到:


相關文章: