1. 程式人生 > >第一天 Docker 基本概念

第一天 Docker 基本概念

Docker學習歷程

Docker 基本概念

1. 什麼是容器?

  1. 一種虛擬化的方案。
  2. 作業系統級別的虛擬化。
  3. 只能執行相同或者相似的核心的作業系統。
  4. 依賴於Linux核心的特性:Namespace和 Cgroups(Control Group),即docker只能執行在linux系統之上。

2. 虛擬機器與Linux容器技術對比:

  1. 傳統虛擬機器通過中間層是將一臺或多臺獨立的機器虛擬執行在硬體之上,比如VM。
  2. 容器直接執行在作業系統核心之上的使用者空間,容器虛擬化也被稱為作業系統虛擬化。
  3. 傳統虛擬機器技術是虛擬出一套硬體後,在其上執行一個完整作業系統,在該系統上再執行所需應用程序;而容器內的應用程序直接運行於宿主的核心,容器內沒有自己的核心,而且也沒有進行硬體虛擬。因此容器要比傳統虛擬機器更為輕便。
    在這裡插入圖片描述

    在這裡插入圖片描述

3. 什麼是Docker?

  1. Docker是一個開源的容器引擎,它基於LXC容器技術,使用Go語言開發,基於 Linux 核心的cgroup,namespace,以及 AUFS 類的 Union FS 等技術,對程序進行封裝隔離,屬於作業系統層面的虛擬化技術。由於隔離的程序獨立於宿主和其它的隔離的程序,因此也稱其為容器。最初實現是基於 LXC,從 0.7 以後開始去除 LXC,轉而使用自行開發的 libcontainer,從 1.11 開始,則進一步演進為使用 runC 和containerd。
  2. 原始碼託管在Github上,並遵從Apache2.0協議。
  3. Docker 最初是在 Ubuntu 12.04 上開發實現的;Red Hat 則從 RHEL 6.5 開始對 Docker 進行支援;Google 也在其 PaaS 產品中廣泛應用Docker。
  4. Docker採用C/S架構,其可以輕鬆的為任何應用建立一個輕量級的、可移植的、自給自足的容器。
  5. 簡單來說:Docker是將應用程式自動部署到容器的開源引擎,是一種快速解決生產問題的一種技術手段。

4. Docker 特點:

  1. 提供簡單輕量的建模方式
  2. 職責的邏輯分離
  3. 快速高效的開發生命週期
  4. 鼓勵使用面向服務的架構(高內聚,低耦合,單一性)

5. Docker 的使用場景:

  1. 使用Docker容器開發、測試、部署服務
  2. 建立隔離的執行環境
  3. 搭建測試環境
  4. 構建多使用者的平臺即服務(PaaS)基礎設施
  5. 提供軟體及服務(PaaS)停用程式
  6. 高效能,超大規模的宿主機部署

6 Docker優勢:

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

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

  3. 提高開發效率
    這就帶來了一些額外的好處:Docker能提升開發者的開發效率。如果你想看一個詳細一點的例子,可以參考Aater在DevOpsDays Austin 2014 大會或者是DockerCon上的演講。
    不同的開發環境中,我們都想把兩件事做好。一是我們想讓開發環境儘量貼近生產環境,二是我們想快速搭建開發環境。
    理想狀態中,要達到第一個目標,我們需要將每一個服務都跑在獨立的虛擬機器中以便監控生產環境中服務的執行狀態。然而,我們卻不想每次都需要網路連線,每次重新編譯的時候遠端連線上去特別麻煩。這就是Docker做的特別好的地方,開發環境的機器通常記憶體比較小,之前使用虛擬的時候,我們經常需要為開發環境的機器加記憶體,而現在Docker可以輕易的讓幾十個服務在Docker中跑起來。

  4. 隔離應用
    有很多種原因會讓你選擇在一個機器上執行不同的應用,比如之前提到的提高開發效率的場景等。
    我們經常需要考慮兩點,一是因為要降低成本而進行伺服器整合,二是將一個整體式的應用拆分成鬆耦合的單個服務(譯者注:微服務架構)。如果你想了解為什麼鬆耦合的應用這麼重要,請參考Steve Yege的這篇論文,文中將Google和亞馬遜做了比較。

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

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

  7. 多租戶環境
    另外一個Docker有意思的使用場景是在多租戶的應用中,它可以避免關鍵應用的重寫。我們一個特別的關於這個場景的例子是為IoT(譯者注:物聯網)的應用開發一個快速、易用的多租戶環境。這種多租戶的基本程式碼非常複雜,很難處理,重新規劃這樣一個應用不但消耗時間,也浪費金錢。
    使用Docker,可以為每一個租戶的應用層的多個例項建立隔離的環境,這不僅簡單而且成本低廉,當然這一切得益於Docker環境的啟動速度和其高效的diff命令。
    你可以在這裡瞭解關於此場景的更多資訊。

  8. 快速部署
    在虛擬機器之前,引入新的硬體資源需要消耗幾天的時間。虛擬化技術(Virtualization)將這個時間縮短到了分鐘級別。而Docker通過為程序僅僅建立一個容器而無需啟動一個作業系統,再次將這個過程縮短到了秒級。這正是Google和Facebook都看重的特性。
    你可以在資料中心建立銷燬資源而無需擔心重新啟動帶來的開銷。通常資料中心的資源利用率只有30%,通過使用Docker並進行有效的資源分配可以提高資源的利用率。

7. docker 歷程:

自2013年開始出現以來,發展勢頭很猛,趕上了好時候。
docker 從1.13x開始,版本分為了社群版ce和企業版ee,並且基於年月的時間線行駛

官方資料:
Docker 官網:http://www.docker.com
Github Docker 原始碼:https://github.com/docker/docker