1. 程式人生 > >001.Docker簡介及原理

001.Docker簡介及原理

一 簡介

Docker最初是dotCloud公司的一個內部專案,誕生於 2013 年初,由google公司開源的Go語言開發。 Docker是一個開源的引擎,可以輕鬆的為任何應用建立一個輕量級的、可移植的、自給自足的容器。開發者在筆記本上編譯測試通過的容器可以批量地在生產環境中部署,包括VMs(虛擬機器)、bare metal、OpenStack 叢集和其他的基礎應用平臺。

二 特性

2.1 docker特性

  • 標準化
    • 保證一致的執行環境
    • 彈性伸縮,快速擴容
    • 方便遷移
    • 持續整合、持續交付與持續部署
  • 高效能
    • 不需要進行硬體虛擬以及執行完整的作業系統
  • 輕量級
    • 快速啟動
    • 隔離性
    • 程序隔離

2.2 容器的組成

容器=cgroup+namespace+rootfs+容器引擎(使用者態工具)
  • Cgroup:資源控制
  • Namespace:訪問隔離
  • rootfs:檔案系統隔離
  • 容器引擎:生命週期控制

2.2 docker與KVM

虛擬化技術依賴物理CPU和記憶體,是硬體級別的; 而docker構建在作業系統上,利用作業系統的containerization技術,所以docker甚至可以在虛擬機器上執行。 虛擬化系統一般都是指作業系統映象,比較複雜,稱為“系統”; 而docker開源而且輕量,稱為“容器”,單個容器適合部署少量應用,比如部署一個redis、一個memcached。 傳統的虛擬化技術使用快照來儲存狀態; 而docker在儲存狀態上不僅更為輕便和低成本,而且引入了類似原始碼管理機制,將容器的快照歷史版本一一記錄,切換成本很低。 傳統的虛擬化技術在構建系統的時候較為複雜,需要大量的人力;
而docker可以通過Dockfile來構建整個容器,重啟和構建速度很快。更重要的是Dockfile可以手動編寫,這樣應用程式開發人員可以通過釋出Dockfile來指導系統環境和依賴,這樣對於持續交付十分有利。
特性 容器 虛擬機器
部署難度 簡單 部署相對複雜
啟動 秒級 分鐘級
硬碟使用 一般為MB 一般為GB
效能 原生 弱於
系統支援量 單機支援上千個容器 一般幾十個
管理效率 管理簡單 管理複雜

三 場景

Docker通常用於如下場景:
  • web應用的自動化打包和釋出;
  • 自動化測試和持續整合、釋出;
  • 在服務型環境中部署和調整資料庫或其他的後臺應用;
  • 從頭編譯或者擴充套件現有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環境。

四 架構

  • Docker客戶端 – Docker
docker客戶端則扮演著docker服務端的遠端控制器,可以用來控制docker的服務端程序。
  • Docker服務端 – Docker Daemon
docker服務端是一個服務程序,管理著所有的容器。 提示:大部分情況下,docker服務端和客戶端執行在一臺機器上。
  • Docker映象 – Image
docker映象,一個能夠執行在docker容器上的一組程式檔案,是一個只讀的模板。
  • Docker容器 – Docker Container
docker容器,就是執行程式的載體。映象(Image)是靜態的定義,容器是映象執行時的實體。docker容器是從映象建立的執行例項。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。
  • Docker映象倉庫 -- Registry
Docker倉庫是集中存放映象檔案的場所,Docker倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。Docker映象是一個特殊的檔案系統,除了提供容器執行時所需的程式、庫、資源、配置等檔案外,還包含了一些為執行時準備的一些配置引數(如匿名卷、環境變數、使用者等),映象不包含任何動態資料。 04