Docker認識基礎

jopen 8年前發布 | 18K 次閱讀 Docker

一、Docker介紹

Docker是一個C/S架構的容器引擎,它包括鏡像、容器和庫這三個重要的概念。
Docker是一個開源平臺,它包含容器引擎和Docker Hub注冊服務器。

1)Docker容器引擎
此引擎可以讓開發者打包自己的應用和依賴包到一個可移植的容器中,然后將其發布到任何流行的Linux機器上。

2)Docker Hub注冊服務器
用戶可以在該服務器上創建自己的鏡像庫來存儲、管理和分享鏡像。利用Docker,可以實現軟件的一次配置、到處運行。
Docker是PaaS提供商dotCloud公司(后改名為Docker)開源的、基于LXC的高級容器引擎,源碼托管于GitHub,基于GoLang開發,以Apache 2.0許可證發布。

Docker的特性:

1)統一的打包格式
Docker定義了一種統一標準的打包格式,可將應用及其依賴打包到單個的鏡像。

2)交互式Shell
Docker可以分配一個虛擬終端并關聯到任何容器的標準輸入上,例如運行一個一次性交互shell。

3)版本控制
Docker的版本控制類似于Git,Docker可以跟蹤一個容器的版本信息,查看版本差異,提交或回滾版本等。

4)組件復用
Docker容器以組件的方式搭建,可以利用一個基礎鏡像構建更多的應用容器。

5)共享鏡像
Docker用于一個公共的注冊服務器,無數的開發者上傳了他們的鏡像,這些鏡像包羅萬象,基本上各種應用領域、應用場景都可以找到相應的鏡像。

6)內容的隔離
文件系統隔離:每個進程容器運行在完全獨立的根文件系統里;
資源隔離:可以使用cgroup為每個進程容器分配不同的系統資源;
網絡隔離:每個進程容器運行在自己的網絡命名空間里,擁有自己的虛擬接口和IP地址。

7)日志記錄
Docker將會收集和記錄每個進程容器的標準流,用于實時檢索或批量檢索。

8)寫時復制
Docker采用寫時復制方式創建根文件系統,這讓部署變得極其快捷,并且節省內存和硬盤空間.

二、容器vs.虛擬機

Docker是容器的一種,容器是一種輕量級的虛擬技術,重量級的虛擬技術就是虛擬機。
虛擬機是一種基于硬件的虛擬技術,它采用指令集的虛擬,完全虛擬一整套物理主機,包含CPU、內存、磁盤、網卡等硬件設備,呈現給用戶的是一個物理機的特性。
用戶可以在一臺主機上安裝多個虛擬機,每一個虛擬機實例都包含了完整的硬件虛擬層、OS、公共庫等。
容器是一種基于操作系統的虛擬技術,它運行于操作系統之上的用戶空間,所有的容器都共用一個系統內核,甚至是公共庫。容器引擎提供了進程級的隔離,讓每個容器都像是運行在單獨的系統之上,但又能共享很多底層的資源。
與虛擬機相比,容器更為輕量級、更快速、更易于管理、資源占用更小。
除了Docker,場景的容器還有Solaris Zones、BSD jails、OpenVZ和LXC等。

三、Docker的應用場景

下面列舉一些Docker典型的應用場景。
1)加速本地開發
2)自動打包和部署應用
3)創建輕量級、私有的PaaS環境
4)自動化測試和持續集成/部署
5)部署并擴展Web應用、數據庫和后端服務器
6)創建安全沙盒
7)輕量級的桌面虛擬化

四、Docker的組件

Docker采用C/S架構開發,整體架構如圖所示:
Docker架構

包括:

1)Docker客戶端
即Docker的可執行程序,它可以通過命令行和API的形式與Docker的守護進程進行通信。

2)Docker守護進程
Docker守護進程提供Docker服務。

五、Docker三大核心組件

Docker有三大核心組件:鏡像、容器和庫

1)鏡像
鏡像是一個只讀的靜態模板,保存了容器需要的環境和應用的執行代碼。鏡像采用分層機制,每個鏡像都是只讀的,但可以將寫數據的層通過聯合文件系統附加到原有的鏡像上。這樣鏡像就很易于存儲、傳輸和更新。

2)容器
容器是一個運行時環境,是鏡像的運行狀態,是鏡像執行的動態表現。容器提供了應用的統一的運行方式:創建、開始、停止、重啟、銷毀。

3)庫
Docker采用注冊服務器來存儲和共享用戶的鏡像,庫是某個特定用戶存儲鏡像的目錄。通常一個用戶可以建立多個庫來保存自己的鏡像。庫是注冊服務器的一部分,注冊服務器分公有的和私有的,公有的如Docker官方提供的Docker Hub。

六、Docker的度量

Docker是利用容器來實現的一種輕量級的虛擬技術,從而在保證隔離性的同時達到節省資源的目的。Docker的可移植性可以讓它一次建立,到處運行。Docker的度量可以從以下四個方面進行:

1)隔離性
Docker采用libcontainer作為默認容器,代替了以前的LXC。libcontainer的隔離性主要是通過內核的命名空間來實現的,有pid、net、ipc、mnt、uts命令空間,將容器的進程、網絡、消息、文件系統和主機名進行隔離。

2)可度量性
Docker主要通過cgroups控制組來控制資源的度量和分配。

3)移植性
Docker利用AUFS來實現對容器的快速更新。
AUFS是一種支持將不同目錄掛載到同一個虛擬文件系統下的文件系統,支持對每個目錄的讀寫權限管理。AUFS具有層的概念,每一次修改都是在已有的只寫層進行增量修改,修改的內容將形成新的文件層,不影響原有的層。

4)安全性
安全性可以分為容器內部之間的安全性;容器與托管主機之間的安全性。
容器內部之間的安全性主要是通過命名空間和cgroups來保證的。
容器與托管主機之間的安全性主要是通過內核能力機制的控制,可以防止Docker非法入侵托管主機。

Docker容器使用AUFS作為文件系統,有如下優勢:

1)節省存儲空間
多個容器可以共享同一個基礎鏡像存儲。

2)快速部署
如果部署多個來自同一個基礎鏡像的容器時,可以避免多次復制操作。

3)升級方便
升級一個基礎鏡像即可影響到所有基于它的容器。

4)增量修改
可以在不改變基礎鏡像的同時修改其目錄的文件,所有的更高都發生在最上層的寫操作層,增加了基礎鏡像的可共享內容。

來自: http://blog.csdn.net/chszs/article/details/48212081

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!