什么是Docker?
簡(jiǎn)介:Docker是一個(gè)開(kāi)源的引擎,可以輕松的為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的容器。開(kāi)發(fā)者在筆記本上編譯測(cè)試通過(guò)的容器可以批量地在生產(chǎn)環(huán)境中部署,包括VMs(虛擬機(jī))、bare metal、OpenStack 集群和其他的基礎(chǔ)應(yīng)用平臺(tái)。
Docker通常用于如下場(chǎng)景:
1.web應(yīng)用的自動(dòng)化打包和發(fā)布;
2.自動(dòng)化測(cè)試和持續(xù)集成、發(fā)布;
3.在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫(kù)或其他的后臺(tái)應(yīng)用;
4.從頭編譯或者擴(kuò)展現(xiàn)有的OpenShift或Cloud Foundry平臺(tái)來(lái)搭建自己的PaaS環(huán)境。
為什么要使用Docker
作為一種新興的虛擬化方式,Docker與傳統(tǒng)的虛擬化方式相比具有更多的優(yōu)勢(shì)。
首先,Docker容器啟動(dòng)可以秒級(jí)實(shí)現(xiàn),這相比傳統(tǒng)的虛擬機(jī)方式要快得多。其次,Docker對(duì)系統(tǒng)資源的利用率很高,一臺(tái)主機(jī)可以同時(shí)運(yùn)行數(shù)千個(gè)Docker容器
容器除了運(yùn)行其中應(yīng)用外,基本不消耗額外的系統(tǒng)資源,使得應(yīng)用性能很高,同時(shí)系統(tǒng)的開(kāi)銷盡量小。傳統(tǒng)虛擬機(jī)運(yùn)行10個(gè)不同的應(yīng)用就要起10個(gè)虛擬機(jī),而Docker,只需要啟動(dòng)10個(gè)隔離的應(yīng)用即可,具體來(lái)說(shuō)Docker具有如下幾個(gè)方面的優(yōu)勢(shì):
1.更快速的交付部署
對(duì)開(kāi)發(fā)和運(yùn)維人員來(lái)說(shuō),最希望就是一次創(chuàng)建或者部署,可以在任意地方運(yùn)行。
開(kāi)發(fā)者可以使用一個(gè)標(biāo)準(zhǔn)鏡像來(lái)構(gòu)建一套開(kāi)發(fā)容器,開(kāi)發(fā)完成之后,運(yùn)維人員可以直接使用這個(gè)容器來(lái)部署代碼。Docker可以快速創(chuàng)建容器,快速迭代應(yīng)用程序,并讓整個(gè)過(guò)程可見(jiàn),使團(tuán)隊(duì)中的其他成員更容易理解應(yīng)用程序是如何創(chuàng)建和工作的。Docker容器很輕很快!容器的啟動(dòng)時(shí)間是秒級(jí)的,大量節(jié)約了開(kāi)發(fā),測(cè)試,部署的時(shí)間。
2.更高效的虛擬化
Docker容器的運(yùn)行不需要額外的hypervisor支持,它是內(nèi)核級(jí)的虛擬化,因此可以實(shí)現(xiàn)更高的性能和效率。
3.更輕松的遷移和拓展
Docker容器幾乎可以在任意的平臺(tái)上運(yùn)行,包括物理機(jī),虛擬機(jī),公有云,私有云,個(gè)人電腦,服務(wù)器等。這種兼容性可以讓用戶把一個(gè)應(yīng)用程序從一個(gè)平臺(tái)直接遷移到另外一個(gè)。
4.更簡(jiǎn)單的管理
使用Docker,只需要小小的修改,就可以替代以往大量的更新工作,所有的修改都以增量的方式被分發(fā)和更新,從而實(shí)現(xiàn)自動(dòng)化并且高效的管理。
Docker的三個(gè)基本概念
鏡像(Image)
容器(Container)
倉(cāng)庫(kù)(Repository)
ps:了解這個(gè)3個(gè)概念,就理解了Docker的整個(gè)生命周期了
Docker鏡像
Docker鏡像就是一個(gè)只讀的版本
例如:一個(gè)鏡像可以包含一個(gè)完整的ubuntu操作系統(tǒng)環(huán)境,里面僅安裝了Apache或用戶需要的其他應(yīng)用程序。
鏡像可以用來(lái)創(chuàng)建Docker容器
Docker提供了一個(gè)很簡(jiǎn)單的機(jī)制來(lái)創(chuàng)建鏡像或者更新現(xiàn)有的鏡像,用戶甚至可以直接從其他人哪里下載一個(gè)鏡像來(lái)直接使用。
Docker容器
Docker利用容器來(lái)運(yùn)行應(yīng)用
容器是從鏡像創(chuàng)建的運(yùn)行實(shí)例,它可以被啟動(dòng),開(kāi)始,停止,刪除。每個(gè)容器都是相互隔離的,保證安全。
可以把容器看做一個(gè)簡(jiǎn)易版的Linux環(huán)境(包括root用戶權(quán)限,進(jìn)程空間,用戶空間和網(wǎng)絡(luò)空間等)和運(yùn)行其中的應(yīng)用程序。
注意:鏡像是只讀的,容器在啟動(dòng)的時(shí)候創(chuàng)建一層可寫(xiě)層作為最上層。
Docker倉(cāng)庫(kù)
倉(cāng)庫(kù)是集中存放鏡像文件的場(chǎng)所,有時(shí)候會(huì)把倉(cāng)庫(kù)和倉(cāng)庫(kù)注冊(cè)服務(wù)器混為一談,并不嚴(yán)格區(qū)分。實(shí)際上,倉(cāng)庫(kù)注冊(cè)服務(wù)器上往往存放著多個(gè)倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)又包含了多個(gè)鏡像,每個(gè)鏡像有不同的標(biāo)簽。
最大的公開(kāi)倉(cāng)庫(kù)是Docker Hub,存放了數(shù)量龐大的鏡像供用戶下載,國(guó)內(nèi)的公開(kāi)倉(cāng)庫(kù)包括 Docker Pool等,可以提供大陸用戶更穩(wěn)定快速的訪問(wèn)。
當(dāng)然,用戶也可以在本地網(wǎng)絡(luò)內(nèi)創(chuàng)建一個(gè)私有的倉(cāng)庫(kù)。
當(dāng)用戶創(chuàng)建了自己的鏡像之后就可以使用push命令將它上傳到公有倉(cāng)庫(kù)或者私有倉(cāng)庫(kù),這樣下次再另外一臺(tái)機(jī)器上使用這個(gè)鏡像的時(shí)候,只需要從倉(cāng)庫(kù)上pull下來(lái)就可以了。
注意:Docker倉(cāng)庫(kù)的概念跟GIt相似,注冊(cè)服務(wù)器可以理解為GitHub這樣的托管服務(wù)。