Docker是一種針對(duì)于應(yīng)用程序的虛擬化技術(shù),能夠?qū)?yīng)用程序及其依賴的資源全部打包,以形成一種稱為鏡像的、可移植的單元。這樣就可以將整個(gè)應(yīng)用程序及其資源打包到一個(gè)獨(dú)立的容器中,任何環(huán)境下使用該容器都能夠快速的構(gòu)建和部署應(yīng)用。
Docker是建立在LXC(Container Based Virtualization)技術(shù)之上的一個(gè)輕量級(jí)的虛擬化技術(shù),它利用Linux內(nèi)核中的Cgroups、Namespace以及AUFS等機(jī)制來實(shí)現(xiàn)鏡像文件格式的打包、容器的創(chuàng)建、管理和隔離等功能。
Docker的核心是在一個(gè)中間容器層中虛擬化了一個(gè)應(yīng)用程序的沙箱環(huán)境,該沙箱環(huán)境隔離了應(yīng)用程序及其依賴的資源與底層系統(tǒng)之間的交互,使得多個(gè)應(yīng)用程序能夠共享一份操作系統(tǒng)資源,從而達(dá)到節(jié)省資源、加速構(gòu)建和部署的目的。
Docker Architecture +-------------------------------------------------------+ | Docker Host | | | | +-----------+ +-----------+ +-----------+ +-----------+ | | App | | App | | App | | App | | +-----------+ +-----------+ +-----------+ +-----------+ | | Image1 | | Image2 | | Image3 | | Image4 | | +-----------+ +-----------+ +-----------+ +-----------+ | | Docker | | Docker | | Docker | | Docker | | +-----------+ +-----------+ +-----------+ +-----------+ | | Docker | | Docker | | Docker | | Docker | | | Engine | | Engine | | Engine | | Engine | | +-----------+ +-----------+ +-----------+ +-----------+ | Container1 Container2 Container3 Container4 +-------------------------------------------------------+
上圖是Docker的體系結(jié)構(gòu),可以看出Docker的架構(gòu)十分簡(jiǎn)單,主要由三部分組成:鏡像、容器、Docker Engine。
鏡像:是Docker的核心組件,每個(gè)應(yīng)用要運(yùn)行在容器中,必須有一個(gè)對(duì)應(yīng)的鏡像,鏡像是一個(gè)輕量級(jí)、可移植和自包含的軟件包,它們包括運(yùn)行環(huán)境、代碼、依賴關(guān)系和配置等信息。
容器:是一種輕量級(jí)及便攜式的軟件包,能夠包含應(yīng)用程序及其依賴關(guān)系,與主機(jī)的操作系統(tǒng)隔離,采用Cgroups實(shí)現(xiàn)資源的隔離和管理,采用Namespace實(shí)現(xiàn)進(jìn)程、網(wǎng)絡(luò)、文件系統(tǒng)、IPC等的隔離和管理,容器的創(chuàng)建、啟動(dòng)、停止、刪除等操作都是通過Docker Engine來完成的。
Docker Engine:是Docker的運(yùn)行時(shí)環(huán)境,它將容器的創(chuàng)建、啟動(dòng)、停止、刪除等操作封裝成API接口,而且支持RESTful API,通過API接口,用戶可以對(duì)Docker進(jìn)行管理。