docker有三個(gè)基本的概念?鏡像,容器和倉(cāng)庫(kù)。
Docker鏡像
Docker的鏡像概念類(lèi)似于虛擬機(jī)里的鏡像,是一個(gè)只讀的模板,一個(gè)獨(dú)立的文件系統(tǒng),包括運(yùn)行容器所需的數(shù)據(jù),可以用來(lái)創(chuàng)建新的容器。
例如:一個(gè)鏡像可以包含一個(gè)完整的 ubuntu 操作系統(tǒng)環(huán)境,里面僅安裝了Mysql或用戶需要的其它應(yīng)用程序。
Docker的鏡像實(shí)際上由一層一層的文件系統(tǒng)組成,這種層級(jí)的文件系統(tǒng)被稱(chēng)為UnionFS。鏡像可以基于Dockerfile構(gòu)建,Dockerfile是一個(gè)描述文件,里面包含若干條命令,每條命令都會(huì)對(duì)基礎(chǔ)文件系統(tǒng)創(chuàng)建新的層次結(jié)構(gòu)。
Docker 提供了一個(gè)很簡(jiǎn)單的機(jī)制來(lái)創(chuàng)建鏡像或者更新現(xiàn)有的鏡像,用戶甚至可以直接從其他人那里下載一個(gè)已經(jīng)做好的鏡像來(lái)直接使用。
注:鏡像是只讀的,可以理解為靜態(tài)文件。
Docker容器
Docker 利用容器來(lái)運(yùn)行應(yīng)用。
Docker容器是由Docker鏡像創(chuàng)建的運(yùn)行實(shí)例。Docker容器類(lèi)似虛擬機(jī),可以支持的操作包括啟動(dòng),停止,刪除等。每個(gè)容器間是相互隔離的,容器中會(huì)運(yùn)行特定的應(yīng)用,包含特定應(yīng)用的代碼及所需的依賴文件。
可以把容器看做是一個(gè)簡(jiǎn)易版的 Linux 環(huán)境(包括root用戶權(quán)限、進(jìn)程空間、用戶空間和網(wǎng)絡(luò)空間等)和運(yùn)行在其中的應(yīng)用程序。
注:相對(duì)于鏡像來(lái)說(shuō)容器是動(dòng)態(tài)的,容器在啟動(dòng)的時(shí)候創(chuàng)建一層可寫(xiě)層作為最上層。
Docker倉(cāng)庫(kù)
如果你使用過(guò)git和github就很容易理解Docker的倉(cāng)庫(kù)概念。Docker 倉(cāng)庫(kù)的概念跟Git 類(lèi)似,注冊(cè)服務(wù)器可以理解為 GitHub 這樣的托管服務(wù)。
Docker 倉(cāng)庫(kù)是用來(lái)包含鏡像的位置,Docker提供一個(gè)注冊(cè)服務(wù)器(Register)來(lái)保存多個(gè)倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)又可以包含多個(gè)具備不同tag的鏡像。Docker運(yùn)行中使用的默認(rèn)倉(cāng)庫(kù)是 Docker Hub 公共倉(cāng)庫(kù)。
倉(cāng)庫(kù)支持的操作類(lèi)似git,當(dāng)用戶創(chuàng)建了自己的鏡像之后就可以使用 push 命令將它上傳到公有或者私有倉(cāng)庫(kù),這樣下次在另外一臺(tái)機(jī)器上使用這個(gè)鏡像時(shí)候,只需要從倉(cāng)庫(kù)上 pull 下來(lái)就可以了。.