Docker Hub 最受歡迎的10大鏡像
Docker CEO Ben Golub在2014年的DockerCon上發(fā)布Docker Hub,并指出已經(jīng)有超過14,000個(gè)Docker化的應(yīng)用存儲(chǔ)在他們的publc registry中。而根據(jù)2015年的DockerCon上,Docker SVP Marianna Tessel公布的數(shù)據(jù),Docker Hub上的repos已經(jīng)超過150,000個(gè),僅一年就有了十倍的增長!
看到這些瘋狂增長的數(shù)字,筆者不禁想去探索這些數(shù)據(jù)背后的故事。所以決定從Docker Hub中挖掘數(shù)據(jù),通過調(diào)用Docker Registry API,研究這150,000個(gè)repos。
需要注意的是:Docker Hub中的repos和tag在不斷地被添加和刪除,所以文中的數(shù)據(jù)只是在某個(gè)特定時(shí)間點(diǎn)的數(shù)據(jù),當(dāng)你讀到這篇文章時(shí)可能它已經(jīng)發(fā)生了變化,但這些數(shù)字背后體現(xiàn)的規(guī)模還是基本準(zhǔn)確的。
鏡像倉庫(Repositories)
***統(tǒng)計(jì)顯示Docker Hub上有125,289個(gè)公共庫。這比在六月的DockerCon上提及的150,000略少(的確增長到過那個(gè)數(shù)字),可能因?yàn)橛幸恍┧接袔臁?/p>
在這些公有庫中,39,441(31%)是自動(dòng)構(gòu)建(automate build),也就是說這個(gè)鏡像是由Docker Hub,構(gòu)建一個(gè)已經(jīng)發(fā)布的Dockerfile生成的鏡像。剩下85,848個(gè)庫鏡像是通過docker push命令上傳的。
Docker Hub上目前有84個(gè)官方鏡像倉庫,涵蓋了Mysql,MongoDB和Redis等常用的服務(wù)。相比在14年DockerCon上公布的13個(gè),這也是相當(dāng)大的增幅。
機(jī)構(gòu)(Organizations)
以下是發(fā)布公共鏡像倉庫最多的10大機(jī)構(gòu)或個(gè)人:
不知道datdocker用那8261個(gè)庫做什么,看起來像是CI過程中生成的新庫,因?yàn)楹芏鄮烀技恿藬?shù)字后綴。
而imiell的擁有者是Ian Miell,曾寫過一本Docker的書,許多庫看起來都是書中的范例。
收藏?cái)?shù)(Stars)
通過Docker registry API獲取不了鏡像被pull的個(gè)數(shù),只能通過鏡像的star數(shù)量,來衡量鏡像的流行度。
毫無疑問,擁有***star數(shù)量的庫都是官方庫。排名***的10個(gè)官方庫是:
排名***的十個(gè)非官方庫是:
這張列表上最令人驚訝的是aspnet鏡像(ASP.NET的Docker鏡像),顯然有許多微軟開發(fā)人員對(duì)Docker很感興趣。
#p#
Tags
在這125,289個(gè)公共庫中,有243,966個(gè)被加了tag。平均每一個(gè)庫有1.9個(gè)tag。超過100,000個(gè)庫(82%)有唯一的tag,有少量庫擁有上千個(gè)tag。
tag最多的是rstiller/jetty,有2104個(gè)tag(他們似乎為每個(gè)可能組合的OS,JDK和Jetty版本都創(chuàng)建了鏡像tag)。所有庫中最常使用的tag:
最有趣的tag是”kitten”,73個(gè)不同的鏡像都使用了它,可能和這個(gè)Kubernetes Demo App(https://github.com/kubernetes/kubernetes/blob/master/docs/user-guide /update-demo/kitten-rc.yaml)有關(guān)。
排第1的是“lastest”,如果你不明確指定一個(gè)tag,默認(rèn)情況下就會(huì)是“lastest”。
有247個(gè)庫沒有tag,—它們都是沒有鏡像的空庫。
基礎(chǔ)鏡像(base image)
Docker的優(yōu)雅之處在于其分層鏡像格式,你不必從無到有構(gòu)建你的鏡像——你能使用任何公共鏡像作為基礎(chǔ),構(gòu)建自己的鏡像。那么哪些鏡像是最經(jīng)常被引用的基礎(chǔ)鏡像呢?以下是排名前十的基礎(chǔ)鏡像:
顯然,Ubuntu是極其受大家歡迎的基礎(chǔ)鏡像,前10中占了6個(gè),因?yàn)楹芏嚅_發(fā)人員都對(duì)Ubuntu很熟悉。但建議關(guān)注一下alpine,特別是出于精簡(jiǎn)鏡像的考慮。 scratch鏡像是當(dāng)之無愧的No.1.Docker 1.5以前,幾乎每個(gè)鏡像都將scratch作為基礎(chǔ)鏡像。
Alpine鏡像的大小是5MB(ubuntu鏡像大小是188MB),有一個(gè)很棒的包管理器。CenturyLink已經(jīng)將很多的基礎(chǔ)鏡像從Ubuntu遷移到了Alpine,顯著縮小了鏡像的大小。
Missing Tags
10個(gè)最經(jīng)常被引用的基礎(chǔ)鏡像中,6個(gè)沒有tag(被標(biāo)記為lastest),可能之前它們也被標(biāo)記為某一個(gè)值,但又變了。
比如,之前bf84c1d84a8f層被標(biāo)記為debian:latest(也是debian:jessie)。當(dāng)其它鏡像以其為基礎(chǔ)鏡像時(shí),會(huì)在Dockerfile中寫FROM debian或FROM debian:jessie。
如果Debian鏡像被重新構(gòu)建,tag會(huì)被指向到另外的層。所以,鏡像tag不是靜態(tài)的,它們可能指向到另外的鏡像。
如果你希望你的鏡像始終基于***版本的Debian Jessie或者Ubuntu構(gòu)建而成,你需要追蹤這些tag的變更,并根據(jù)情況重構(gòu)鏡像。Docker Hub的repository link特性可以幫你實(shí)現(xiàn)這一點(diǎn)。