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大機構或個人:
Rank | Organization | Repositories |
---|---|---|
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個官方庫是:
Rank | Repository | Stars |
---|---|---|
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 |
排名最高的十個非官方庫是:
Rank | Repository | Stars |
---|---|---|
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也是一個比較受歡迎的映象:
- 映象地址:https://hub.alauda.cn/repos/microsoft/aspnet
- pull命令:docker pull index.alauda.cn/microsoft/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:
Rank | Tag | Images |
---|---|---|
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的優雅之處在於其分層映象格式,你不必從無到有構建你的映象——你能使用任何公共映象作為基礎,構建自己的映象。那麼哪些映象是最經常被引用的基礎映象呢?以下是排名前十的基礎映象:
Rank | Layer ID | Tag | References |
---|---|---|---|
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,顯著縮小了映象的大小。
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特性可以幫你實現這一點。