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特性可以帮你实现这一点。
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/47336.html