Docker Hub 最受歡迎的10大映象

Brian DeHamer發表於2015-09-07

DockerHub上有多少個映象?哪些基礎映象被引用最多?哪些映象最受歡迎?

來自CenturyLink實驗室部落格的一篇文章將為你解答這些問題,文中所有資料均來自2015年8月6日,Docker Registry API的呼叫。

Docker CEO Ben Golub在2014年的DockerCon上釋出Docker Hub,並指出已經有超過14,000個Docker化的應用儲存在他們的publc registry中。而根據2015年的DockerCon上,Docker SVP Marianna Tessel公佈的資料,Docker Hub上的repos已經超過150,000個,僅一年就有了十倍的增長!

看到這些瘋狂增長的數字,筆者不禁想去探索這些資料背後的故事。所以決定從Docker Hub中挖掘資料,通過呼叫Docker Registry API,研究這150,000個repos。

需要注意的是:Docker Hub中的repos和tag在不斷地被新增和刪除,所以文中的資料只是在某個特定時間點的資料,當你讀到這篇文章時可能它已經發生了變化,但這些數字背後體現的規模還是基本準確的。

映象倉庫(Repositories)

最新統計顯示Docker Hub上有125,289個公共庫。這比在六月的DockerCon上提及的150,000略少(的確增長到過那個數字),可能因為有一些私有庫。

在這些公有庫中,39,441(31%)是自動構建(automate build),也就是說這個映象是由Docker Hub,構建一個已經發布的Dockerfile生成的映象。剩下85,848個庫映象是通過docker push命令上傳的。

Docker Hub上目前有84個官方映象倉庫,涵蓋了Mysql,MongoDB和Redis等常用的服務。相比在14年DockerCon上公佈的13個,這也是相當大的增幅。

鑑於國內訪問Docker Hub的諸多不便,靈雀雲映象中心也是一個容器化服務釋出和共享的社群平臺,其中彙集了數以萬計的來自平臺、社群和第三方的優質映象,讓使用者組合、複用容器化服務,輕鬆搭建新一代雲端應用。

機構(Organizations)

以下是釋出公共映象倉庫最多的10大機構或個人:

RankOrganizationRepositories
1 Datdocker 8,261
2 Imiell 394
3 Bluemeric 299
4 Kollaglue 211
5 Armbuild 186
6 Hexletboy 180
7 Kiwenlau 122
8 Davidbliu 114
9 Fabric8 114
10 Turnkeylinux 100

不知道datdocker用那8261個庫做什麼,看起來像是CI過程中生成的新庫,因為很多庫名都加了數字字尾。

而imiell的擁有者是Ian Miell,曾寫過一本Docker的書,許多庫看起來都是書中的範例。 

收藏數(Stars)

通過Docker registry API獲取不了映象被pull的個數,只能通過映象的star數量,來衡量映象的流行度。

毫無疑問,擁有最高star數量的庫都是官方庫。排名最高的10個官方庫是:

RankRepositoryStars
1 Ubuntu 2,007
2 Centos 1,164
3 Nginx 1,163
4 Redis 957
5 Node 891
6 Postgres 889
7 Mysql 885
8 Mongo 796
9 Debian 573
10 Jenkins 508

排名最高的十個非官方庫是:

RankRepositoryStars
1 Phusion/Baseimage 775
2 Sameersbn/Gitlab 380
3 Jwilder/Nginx-Proxy 289
4 Microsoft/Aspnet 213
5 Sequenceiq/Hadoop-Docker 123
6 Kylemanna/Openvpn 121
7 Sameersbn/Redmine 117
8 Progrium/Consul 116
9 Jboss/Wildfly 109
10 Base/Archlinux 108

這張列表上最令人驚訝的是aspnet映象(ASP.NET的Docker映象),顯然有許多微軟開發人員對Docker很感興趣。

在靈雀雲,aspnet也是一個比較受歡迎的映象:

Tags

在這125,289個公共庫中,有243,966個被加了tag。平均每一個庫有1.9個tag。超過100,000個庫(82%)有唯一的tag,有少量庫擁有上千個tag。

tag最多的是rstiller/jetty,有2104個tag(他們似乎為每個可能組合的OS,JDK和Jetty版本都建立了映象tag)。所有庫中最常使用的tag:

RankTagImages
1 Latest 107,546
2 V1 2,512
3 V2 1,966
4 1.0 1,579
5 0.1 1,277
6 0.0.1 800
7 Devel 735
8 1.0.0 714
9 Master 707
10 V3 631

最有趣的tag是”kitten”,73個不同的映象都使用了它,可能和這個 Kubernetes Demo App有關。

排第1的是“lastest”,如果你不明確指定一個tag,預設情況下就會是“lastest”。

有247個庫沒有tag,—它們都是沒有映象的空庫。

基礎映象(base image)

Docker的優雅之處在於其分層映象格式,你不必從無到有構建你的映象——你能使用任何公共映象作為基礎,構建自己的映象。那麼哪些映象是最經常被引用的基礎映象呢?以下是排名前十的基礎映象:

RankLayer IDTagReferences
1 511136ea3c5a Scratch:latest 130,496
2 07f8e8c5e660 Ubuntu:trusty-20150427 7,541
3 878b6301beda Alpine:3.1 7,489
4 D0955f21bf24 Ubuntu:trusty, Ubuntu:14.04, Ubuntu:latest * 7,196
5 9a61b6b1315e Debian:8, Debian:8.1, Debian:jessie, Debian:latest 6,742
6 D2a0ecffe6fa Ubuntu:14.04, Ubuntu:14.04.2, Ubuntu:latest, Ubuntu:trusty, Ubuntu:trusty-20150630 6,301
7 B39b81afc8ca Ubuntu:trusty, Ubuntu:14.04, Ubuntu:latest * 5,766
8 6d4946999d4f Ubuntu:trusty-20150612 5,427
9 Bf84c1d84a8f Debian:jessie, Debian:latest * 5,395
10 5506de2b643b Ubuntu:trusty, Ubuntu:14.04, Ubuntu:latest * 5,342

顯然,Ubuntu是極其受大家歡迎的基礎映象,前10中佔了6個,因為很多開發人員都對Ubuntu很熟悉。但建議關注一下alpine,特別是出於精簡映象的考慮。 scratch映象是當之無愧的No.1。Docker 1.5以前,幾乎每個映象都將scratch作為基礎映象。

Alpine映象的大小是5MB(ubuntu映象大小是188MB),有一個很棒的包管理器。CenturyLink已經將很多的基礎映象從Ubuntu遷移到了Alpine,顯著縮小了映象的大小。

docker-images-alpine-vs-ubuntu

Missing Tags

10個最經常被引用的基礎映象中,6個沒有tag(被標記為lastest),可能之前它們也被標記為某一個值,但又變了。

比如,之前bf84c1d84a8f層被標記為debian:latest(也是debian:jessie)。當其它映象以其為基礎映象時,會在Dockerfile中寫FROM debian或FROM debian:jessie。

如果Debian映象被重新構建,tag會被指向到另外的層。所以,映象tag不是靜態的,它們可能指向到另外的映象。

如果你希望你的映象始終基於最新版本的Debian Jessie或者Ubuntu構建而成,你需要追蹤這些tag的變更,並根據情況重構映象。Docker Hub的repository link特性可以幫你實現這一點。

相關文章