現(xiàn)在你已經(jīng)學(xué)習(xí)了如何利用命令行在本地運(yùn)行Docker,還學(xué)習(xí)了如何拉取鏡像用于從現(xiàn)成的鏡像中構(gòu)建容器,并且還學(xué)習(xí)了如何創(chuàng)建自己的鏡像。
接下來(lái),你將會(huì)學(xué)到如何利用Docker Hub簡(jiǎn)化和提高你的Docker工作流程。
Docker Hub是一個(gè)由Docker公司負(fù)責(zé)維護(hù)的公共注冊(cè)中心,它包含了超過(guò)15,000個(gè)可用來(lái)下載和構(gòu)建容器的鏡像,并且還提供認(rèn)證、工作組結(jié)構(gòu)、工作流工具(比如webhooks)、構(gòu)建觸發(fā)器以及私有工具(比如私有倉(cāng)庫(kù)可用于存儲(chǔ)你并不想公開(kāi)分享的鏡像)。
Docker通過(guò)docer search
、pull
、login
和push
等命令提供了連接Docker Hub服務(wù)的功能,本頁(yè)將展示這些命令如何工作的。
一般,你需要先在docker中心創(chuàng)建一個(gè)賬戶(hù)(如果您尚未有)。你可以直接在Docker Hub創(chuàng)建你的賬戶(hù),或通過(guò)運(yùn)行:
$ sudo docker login
這將提示您輸入用戶(hù)名,這個(gè)用戶(hù)名將成為你的公共存儲(chǔ)庫(kù)的命名空間名稱(chēng)。如果你的名字可用,docker會(huì)提示您輸入一個(gè)密碼和你的郵箱,然后會(huì)自動(dòng)登錄到Docker Hub,你現(xiàn)在可以提交和推送鏡像到Docker Hub的你的存儲(chǔ)庫(kù)。
注:你的身份驗(yàn)證憑證將被存儲(chǔ)在你本地目錄的
.dockercfg
文件中。
你可以通過(guò)使用搜索接口或者通過(guò)使用命令行接口在Docker Hub中搜索,可對(duì)鏡像名稱(chēng)、用戶(hù)名或者描述等進(jìn)行搜索:
$ sudo docker search centos
NAME DESCRIPTION STARS OFFICIAL TRUSTED
centos Official CentOS 6 Image as of 12 April 2014 88
tianon/centos CentOS 5 and 6, created using rinse instea... 21
...
這里你可以看到兩個(gè)搜索的示例結(jié)果:centos
和tianon/centos
。第二個(gè)結(jié)果是從名為tianon/
的用戶(hù)倉(cāng)儲(chǔ)庫(kù)搜索到的,而第一個(gè)結(jié)果centos
沒(méi)有用戶(hù)空間這就意味著它是可信的頂級(jí)命名空間。/
字符分割用戶(hù)鏡像和存儲(chǔ)庫(kù)的名稱(chēng)。
當(dāng)你發(fā)現(xiàn)你想要的鏡像時(shí),便可以用docker pull <imagename>
來(lái)下載它。
$ sudo docker pull centos
Pulling repository centos
0b443ba03958: Download complete
539c0211cd76: Download complete
511136ea3c5a: Download complete
7064731afe90: Download complete
現(xiàn)在你有一個(gè)鏡像,基于它你可以運(yùn)行容器。
任何人都可以從Docker Hub
倉(cāng)庫(kù)下載鏡像,但是如果你想要分享你的鏡像,你就必須先注冊(cè),就像你在第一部分的docker用戶(hù)指南看到的一樣。
為了推送到倉(cāng)庫(kù)的公共注冊(cè)庫(kù)中,你需要一個(gè)命名的鏡像或者將你的容器提到為一個(gè)命名的鏡像,正像這里我們所看到的。
你可以將此倉(cāng)庫(kù)推送到公共注冊(cè)庫(kù)中,并以鏡像名字或者標(biāo)簽來(lái)對(duì)其進(jìn)行標(biāo)記。
$ sudo docker push yourname/newimage
鏡像上傳之后你的團(tuán)隊(duì)或者社區(qū)的人都可以使用它。
讓我們?cè)龠M(jìn)一步看看Docker Hub的特色,這里你可以看到更多的信息。
有時(shí)候你不想公開(kāi)或者分享你的鏡像,所以Docker Hub允許你有私有倉(cāng)庫(kù),你可以在這里登錄設(shè)置它。
私人倉(cāng)庫(kù)一個(gè)較有用的地方在于你可以將倉(cāng)庫(kù)分享給你團(tuán)隊(duì)或者你的組織。Docker Hub支持創(chuàng)建組織,這樣你可以和你的同事來(lái)管理你的私有倉(cāng)庫(kù),在這里你可以學(xué)到如何創(chuàng)建和管理一個(gè)組織。
自動(dòng)構(gòu)建功能會(huì)自動(dòng)從Github和BitBucket直接將鏡像構(gòu)建或更新至Docker Hub,通過(guò)為Github或Bitbucket的倉(cāng)庫(kù)添加一個(gè)提交的hook來(lái)實(shí)現(xiàn),當(dāng)你推送提交的時(shí)候就會(huì)觸發(fā)構(gòu)建和更新。
設(shè)置一個(gè)自動(dòng)化構(gòu)建你需要:
Dockerfile
的Github或BitBucket項(xiàng)目master
分支)Dockerfile
的路徑,默認(rèn)是/
。一旦配置好自動(dòng)構(gòu)建,在幾分鐘內(nèi)就會(huì)自動(dòng)觸發(fā)構(gòu)建,你就會(huì)在Docker Hub倉(cāng)庫(kù)源看到你新的構(gòu)建,并且它將會(huì)和你的Github或者BitBucket保持同步更新直到你解除自動(dòng)構(gòu)建。
如果你想看到你自動(dòng)化構(gòu)建的狀態(tài),你可以去你的 Docker Hub 自動(dòng)化構(gòu)建頁(yè)面,它將會(huì)想你展示你構(gòu)建的狀態(tài)和構(gòu)建歷史。
一旦你創(chuàng)建了一個(gè)自動(dòng)化構(gòu)建,你可以禁用或刪除它。但是,你不能通過(guò)docker push
推送一個(gè)自動(dòng)化構(gòu)建,而只能通過(guò)在Github或者BitBucket提交你的代碼來(lái)管理它。
你可以在一個(gè)倉(cāng)庫(kù)中創(chuàng)建多個(gè)自動(dòng)構(gòu)建,配置它們只指定的Dockerfile
或Git 分支。
自動(dòng)構(gòu)建也可以通過(guò)Docker Hub的Url來(lái)觸發(fā),這樣你就可以通過(guò)命令重構(gòu)自動(dòng)構(gòu)建鏡像。
webhooks屬于你的存儲(chǔ)庫(kù)的一部分,當(dāng)一個(gè)鏡像更新或者推送到你的存儲(chǔ)庫(kù)時(shí)允許你觸發(fā)一個(gè)事件。當(dāng)你的鏡像被推送的時(shí)候,webhook可以根據(jù)你指定的url和一個(gè)有效的Json來(lái)遞送。