云計(jì)算的主流容器平臺(tái)Docker架構(gòu)分析
掃描二維碼
隨時(shí)隨地手機(jī)看文章
Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,基于 Go 語(yǔ)言 并遵從 Apache2.0 協(xié)議開(kāi)源。
Docker 可以讓開(kāi)發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)
布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。
首先我們先了解一下什么是容器。如果需要通俗的描述容器的話,我覺(jué)得容器就是一個(gè)存放東西的地方,就像書(shū)包可以裝各種文具、衣柜可以放各種衣服、鞋架可以放各種鞋子一樣。我們現(xiàn)在所說(shuō)的容器存放的東西可能更偏向于應(yīng)用比如網(wǎng)站、程序甚至是系統(tǒng)環(huán)境。假如以現(xiàn)實(shí)舉例,真實(shí)的物理機(jī)相當(dāng)于一棟樓的一戶人家有獨(dú)立花園有獨(dú)立地基,虛擬機(jī)相當(dāng)于一棟樓包含多套房,一套房一戶人家,共享地基,共享花園但有獨(dú)立衛(wèi)生間、廚房和寬帶,容器相當(dāng)于一套房隔成多個(gè)小隔間,每個(gè)小隔間住一個(gè)租戶,共享花園、地基還共享衛(wèi)生間、廚房和寬帶。
在傳統(tǒng)的部署模式下,如果有非常多的服務(wù)器,運(yùn)維工程師需要在每一臺(tái)服務(wù)器上進(jìn)行相當(dāng)復(fù)雜的操作才能夠完成部署。安裝->配置->部署。但是Docker的出現(xiàn)顛覆了這種傳統(tǒng)的模式。我們看一下,Docker只需要把整個(gè)開(kāi)發(fā)環(huán)境打包成一個(gè)docker image,也就是Docker鏡像給運(yùn)維團(tuán)隊(duì),而運(yùn)維團(tuán)隊(duì)直接運(yùn)行就可以了,整個(gè)過(guò)程就變成打包、傳送、運(yùn)行即可,非常的簡(jiǎn)單。因?yàn)镈ocker鏡像包含了所有的環(huán)境依賴關(guān)系,可以保證開(kāi)發(fā)與生產(chǎn)環(huán)境一致,對(duì)于開(kāi)發(fā)和運(yùn)維工作,Docker技術(shù)可以讓開(kāi)發(fā)和運(yùn)維豁免很多預(yù)想之外的工作和相互推脫。此外,容器可以重復(fù)運(yùn)行在任何地方,簡(jiǎn)單化了運(yùn)維人員的工作 。 Docker的這種在安全、可重復(fù)的環(huán)境中可移植,跨平臺(tái)的快速部署軟件的方式也方便做持續(xù)集成,所以說(shuō)Docker出現(xiàn)拉開(kāi)了基于云計(jì)算平臺(tái)發(fā)布產(chǎn)品方式的變革序幕,是運(yùn)維人員的解放,廣受開(kāi)發(fā)者和運(yùn)維人員的歡迎。
目前主流的云服務(wù)器平臺(tái)亞馬遜AWS、微軟Azure 、阿里云、騰訊云都支持Docker容器服務(wù)。
Docker 包括三個(gè)基本概念:
鏡像(Image):Docker 鏡像(Image),就相當(dāng)于是一個(gè) root 文件系統(tǒng)。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統(tǒng)的 root 文件系統(tǒng)。
容器(Container):鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè) 計(jì)中的類和實(shí)例一樣,鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時(shí)的實(shí)體。容器可以被創(chuàng)建、啟 動(dòng)、停止、刪除、暫停等。
倉(cāng)庫(kù)(Repository):倉(cāng)庫(kù)可看著一個(gè)代碼控制中心,用來(lái)保存鏡像。
Docker 使用客戶端-服務(wù)器 (C/S) 架構(gòu)模式,使用遠(yuǎn)程API來(lái)管理和創(chuàng)建Docker容器。
Docker 容器通過(guò) Docker 鏡像來(lái)創(chuàng)建。
容器與鏡像的關(guān)系類似于面向?qū)ο缶幊讨械膶?duì)象與類。
Docker 鏡像(Images)
Docker 鏡像是用于創(chuàng)建 Docker 容器的模板,比如 Ubuntu 系統(tǒng)。
Docker 容器(Container)
容器是獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用,是鏡像運(yùn)行時(shí)的實(shí)體。
Docker 客戶端(Client)
Docker 客戶端通過(guò)命令行或者其他工具使用 Docker SDK 與 Docker 的守護(hù)進(jìn)程通信。
Docker 主機(jī)(Host)
一個(gè)物理或者虛擬的機(jī)器用于執(zhí)行 Docker 守護(hù)進(jìn)程和容器。
Docker Registry
Docker 倉(cāng)庫(kù)用來(lái)保存鏡像,可以理解為代碼控制中的代碼倉(cāng)庫(kù)。提供了龐大的鏡像集合供使用。一個(gè) Docker Registry 中可以包含多個(gè)倉(cāng)庫(kù)(Repository);每個(gè)倉(cāng)庫(kù)可以包含多個(gè)標(biāo)簽(Tag);每個(gè)標(biāo)簽對(duì)應(yīng)一個(gè)鏡像。通常,一個(gè)倉(cāng)庫(kù)會(huì)包含同一個(gè)軟件不同版本的鏡
像,而標(biāo)簽就常用于對(duì)應(yīng)該軟件的各個(gè)版本。我們可以通過(guò) <倉(cāng)庫(kù)名>:<標(biāo)簽> 的格式來(lái)指
定具體是這個(gè)軟件哪個(gè)版本的鏡像。如果不給出標(biāo)簽,將以 latest 作為默認(rèn)標(biāo)簽。
Docker Machine
Docker Machine是一個(gè)簡(jiǎn)化Docker安裝的命令行工具,通過(guò)一個(gè)簡(jiǎn)單的命令行即可在相應(yīng)的平臺(tái)上安裝Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。