您好,登錄后才能下訂單哦!
Docker的定義:
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。 --摘自《百度百科》
實際上,雖然介紹docker的書籍有很多,但鮮有給docker一個明確的定義,因為它很難概括成一個概念,而應該更多的被闡述它的特性和技術范疇。綜合一些網上的觀點,Docker就是虛擬化的一種輕量級替代技術。這種技術不依賴任何語言、框架或系統,可以將App變成一種標準化的、可移植的、自管理的組件,并脫離服務器硬件在任何主流系統中開發、調試和運行。
簡單的說就是,在 Linux 系統上迅速創建一個容器(類似虛擬機)并在容器上部署和運行應用程序,并通過配置文件可以輕松實現應用程序的自動化安裝、部署和升級,非常方便。因為使用了容器,所以可以很方便的把生產環境和開發環境分開,互不影響,這是 docker 最普遍的一個玩法
Docker核心技術:
Namespace是一種Linux內核技術,用來實現資源的隔離。資源,就是進程運行期間所看到的、使用的、依賴的周邊環境,資源有不同的種類,最典型的就是文件系統、網絡系統、進程PID、IPC資源等等。
Namespaces命名空間:
PID 進程隔離
NET 管理網絡接口
IPC 管理跨進程通信的訪問 InterProcess Communication
MNT 管理掛載點
UTS 隔離內核和版本標識 Unix Timesharing System
對于用戶態進程,通過Linux提供的系統調用來使用Namespace,這些系統調用包括:
clone() 創建進程的時候,將其限制在某個Namespace中
unshare() 使一個進程脫離某個Namespace
setns() 使一個進程加入到某個Namespace
CGroup最早叫做Process Container,由Google工程師在2006年提出,后在2007年更名為Control Groups,并被整合進Linux 2.6.24版內核。它用來對一組進程進行資源控制,包括如下功能:
資源限制(Resource Limitation):對進程組使用的資源總額進行限制
優先級控制(Prioritization):通過為進程組分配CPU時間片數量從而控制了進程運行的優先級
資源統計(Accounting):統計系統的資源使用量,如CPU使用時長、內存用量等等
進程控制(Control):對進程組執行掛起、恢復等操作
CGroup包括如下概念:
任務(Task):一個Task就是Linux系統中的一個進程
控制組(Control Group):資源控制的最小單位;資源限制、優先級控制等等都定義在控制組上。一個任務可以加入某個控制組,也可以從一個控制組遷移到其他控制組。
層級(Hierarchy):多個控制組形成樹狀的層次結構,叫做層級。
子系統(Subsystem):一個子系統就是一種類型的資源控制器。子系統必須附加到一個層級上才能起作用。
cpu:控制task對cpu的使用
cpuacct:生成task對cpu資源使用情況的報告
cpuset:為task分配獨立的cpu
blkio:為塊設備設定輸入/輸出限制
devices:開啟或關閉task對設備的訪問
freezer:掛起或恢復task
memory:設定task對內存使用量的限定,并且自動生成這些task對內存資源使用情況的報告
perfevent:使得task可以進行統一的性能測試
net_cls:通過使用等級識別符(classid)標記網絡數據包,從而允許Linux流量控制程序識別從具體cgroup中生成的數據包。
AuFS是一個能透明覆蓋一或多個現有文件系統的層狀文件系統。 支持將不同目錄掛載到同一個虛擬文件系統下,可以把不同的目錄聯合在一起,組成一個單一的目錄。這種是一種虛擬的文件系統,文件系統不用格式化,直接掛載即可。
Docker一直在用AuFS作為容器的文件系統。當一個進程需要修改一個文件時, AuFS創建該文件的一個副本。AuFS可以把多層合并成文件系統的單層表示。這個過程稱為寫入復制( copy on write ) 。AuFS允許Docker把某些鏡像作為容器的基礎。例如,你可能有一個可以作為很多不同容器的基礎的CentOS系統鏡像。多虧AuFS,只要一個CentOS鏡像的副本就夠了,這樣既節省了存儲和內存,也保證更快速的容器部署。
使用AuFS的另一個好處是Docker的版本容器鏡像能力。每個新版本都是一個與之前版本的簡單差異改動,有效地保持鏡像文件最小化。但,這也意味著你總是要有一個記錄該容器從一個版本到另一個版本改動的審計跟蹤。
Docker相關的基本概念:
Image:鏡像,容器(Container)時一個動態的概念,而鏡像時一個相對靜止的概念。鏡像其實就是容器中的文件系統,也可以說是一個極度精簡的Linux程序運行環境。
Container:容器,從根本形態上而言,容器(Container)其實就是運行在操作系統上的一個進程,只不過加入了對資源的隔離和限制。Docker Container是Image的實例化對象,共享操作系統內核。
Daemon:
Docker Daemon是創建和運行Container的Linux守護進程,也是Docker最主要的核心組件
Docker Daemon 可以理解為Docker Container的Container
Docker Daemon可以綁定本地端口并提供Rest API服務,用來遠程訪問和控制
Registry:docker鏡像倉庫,當docker請求使用一個未在當前系統中的Image時,docker會從鏡像倉庫中尋找并將其下載到系統中,這個docker獲取Image的地方就是Registry。默認情況下,registry是指的docker官方的倉庫,也就是Docker Hub Registry (https://hub.docker.com )。需要注意的是,Docker Hub是dotCloud公司私有的,目前國內只有一個DaoCloud提供代理緩存服務。當然,docker也提供了搭建私有Registry的方法,這個會在后續篇章中說明。
Docker的三大基礎組件:
倉庫Repository
鏡像Image
容器Container
這三者之間的關系為:首先,docker Repository提供各種各樣已經打包好的docker應用,也就是鏡像Image;其次,用戶可以在Repository中搜索自己需要的鏡像Image,下載到本地;最后,用戶使用下載好的Image創建docker Container。
Docker容器的能力:
文件系統隔離:每個容器都有自己的root文件系統
進程隔離:每個容器都運行在自己的進程環境中
網絡隔離:容器間的虛擬網絡接口和IP地址都是分開的
資源隔離和分組: 使用cgroups將CPU和內存之類的資源獨立分配給每個Docker容器
Docker的使用場景:
1、使用Docker容器開發、測試、部署服務
2、創建隔離的運行環境
3、搭建測試環境
4、構建多用戶的平臺即服務(PaaS)基礎設施
5、提供軟件即服務(SaaS)應用程序
6、高性能、超大規模的宿主機部署
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。