深入浅出Docker(三):Docker开源之路

 背景

Docker从一开始的概念阶段就致力于使用开源驱动的方式来发展,它的成功缘于国外成熟的开源文化氛围,以及可借鉴的社区运营经验。通过本文详细的介绍,让大家可以全面了解一个项目亦或者一项技术是如何通过开源的方式发展起来的。为了更准确的描述Docker的社区状况,请先看一份来自Docker官方的数据:

图中数据的看点有:

  1. 超过500个代码贡献者。代码的贡献者在社区发展过程中是非常重要的催化剂,它会不断加快产品迭代的速度,让项目更快的交付到最终用户的手里。
  2. 20个全职开发。一般的开源项目一般都不会有如此多的全职开发人员,但是Docker却有20个全职开发人员来驱动一个社区项目。这也从侧面证明了国外公司对开源项目的支持力度,以至于一家初创公司都舍得投入20个全职开发来推动开源技术的发展。
  3. 超过8000个创建在GitHub上的Docker相关项目。通过这个规模可以看到围绕Docker可以使用的项目已经非常丰富。
  4. Docker技术聚会。30个国家超过90个城市举办超过250个Docker技术聚会,这样的技术聚会还在不断增加,Docker技术爱好者可以在线申请承办此类技术聚会。
  5. 50万次的boot2docker下载。boot2docker为Docker官方推荐客户端,50万次也代表当前潜在的用户群体。

Docker公司目前正式员工50多名,由开源老手Ben Golub(前GlusterFS CEO)主持运营。现在主要有以下几个赢利点:

  1. 印有蓝鲸的T恤和贴纸的品牌价值
  2. 通过Docker Hub服务提供SaaS的分发服务
  3. 提供Docker技术支持和培训

通过了解Docker的社区现状和公司的运营状况,可以发现其在运营的方式上并没有什么特别的地方。除了支付公司员工的正常开支外,它并没有像一般商业公司那样在推广上投入很多资金。Docker在推广上主要是将开源社区和社交网络作为基础推广平台,结合全球范围的Docker技术聚会,形成了良好的良性的客户互动和口口相传的品牌效应。在Docker的开源历程中,通过分析观察用户社区、源代码管理、合作伙伴的生态圈这三种形式,梳理出一套实践经验的案例,方便大家参考学习。

2. 用户社区维护

Docker技术首先考虑的是在技术社区里通过各种渠道来找到它的用户,而当前最流行的技术社交网络不是Twitter,而是GitHub。所以Docker第一步是向GitHub上提交自己的代码开始吸引自己的用户的。我们总说万事开头难,那么Docker的第一个Commit应该是什么,它是否需要包括测试、用户文档、用户开发指南、设计理念等一系列的文档和代码呢?如果参照常规的开源项目,它们都考虑的都很周到,完善的代码文档结构会让用户第一眼就知道这是一个成熟的项目,我们只要用就可以了。但Docker公司却不按套路出牌,第一个Commit仅包括6个主文件:

没有README,没有开发环境指南,开始阶段用户无法有效的了解Docker项目。但是,这其实也是对的,因为在一个小众的开源项目的初期,很难吸引到社区用户来为它贡献代码。在接下来的很长一段时间,Docker主要是由Docker之父Solomon Hykes开发维护。在没有社区用户参与的情况下,他每天不分昼夜地提交代码,也许是为了生活,也许是为了爱好,Solomon Hykes在拼命的实现心中那个目标:让LXC创建的容器更容易使用。用当下时髦的那句话讲就是不忘初衷。

从 Solomon Hykes 贡献代码的趋势图,我们可以看到只有保证项目的活跃度(持续贡献代码)那么项目才有可能获得用户的认可和关注。试想,“三天打鱼,两天晒网”的开源项目会给用户怎么样的感觉?作者都不专注,用户怎么可能忠实?这种投入,并不是偶然性的,这是国外业界的开源文化,非常值得我们学习。

在代码贡献的同时,Docker.io的主站也在2013年的5月30日第一次提交到GitHub。这距离第一行代码提交到GitHub已经有5个月。总体来看,Docker从一开始仅仅是一个很酷的想法,到真正完成并可以对外发布版本,也是经历了小半年之久。开源的意义并不像国内大多数厂商发布开源项目一样,一定要在内部应用的很成功才发布到技术社区。我们通过以上数据,可以很容易的看出来,它一定是一个长期的、持续的过程。你越专注的投入,你的项目越有可能成功。

当然,如果仅仅Docker只在GitHub上提供代码来吸引用户,那也不会是最佳的实践。在网站建立后的下一步,它开始在全球各大城市的技术聚会上推广介绍Docker。Docker技术在全球推广的方法是通过线下的技术聚会,外加社交网络媒体传播才得到流行的。Docker官网通过发布“创建Docker技术聚会指南”,引导Docker技术的爱好者自发申请承办技术聚会。Docker官网主要通过类似Twitter、Docker周报、用户论坛等渠道,及时的把每个城市即将开始的技术聚会时间和联系人发布出来,就可以把Docker的技术推广做下去。并且这种形式的最大好处是口碑相传,其长尾效应的结果是Docker技术开始在当地的技术圈得到关注。像这样的技术聚会,一般都在30到200人之间,对于商业项目的推广是无法参照这样推广的。但这种形式就像一颗种子散落在城市中间,一旦有人介绍Docker技术到这个城市的技术圈,就会有更多的用户去GitHub上关注Docker的项目进展。

3. 源代码管理

Docker的源码是按照模块划分的,每一个模块都会单独放在一个目录里。并且每个目录都会包含一个MAINTAINERS.md。当你提交一个Pull Request的时候,子模块的维护者就会站出来回答“LGTM (Looks Good To Me)” 表示已经看了你的代码并接受你提交的代码。

每一个想参与Docker开发的开发者,你需要进入一个特殊的目录hack,这个目录包括了所有你想知道的开发相关信息。它把开发者分为4类人,

  1. 代码贡献者,详细指南看CONTRIBUTORS.md。
  2. 代码维护者,详细指南看MAINTAINERS.md。
  3. 程序打包者,详细指南看PACKAGERS.md。
  4. 负责发布版本的维护者,详细指南看RELEASE-CHECKLIST.md。

所有的指南文档都非常详细完整,可以做到看完此文档就可以开始相应角色的任务。除了这些文档之外,hack目录还包括了发布,开发,测试等环节需要的辅助脚本,让开发者可以得到很多开发上的便利。

Docker从一开始就是围绕LXC开发的,但在版本稳定后,使用Go重写了一套类LXC接口实现。也就是 libcontainer 项目。它的代码管理方式与上面的Docker源代码管理方式一样,开发者可以很容易的导入到子项目libcontainer的开发。一致的管理方法可以提高流程的复用,这种管理方式希望能得到大家的借鉴参考。

4. 创建合作伙伴生态圈

首先,Docker从一开始使用Ubuntu版本作为开发环境,主要是Ubuntu上支持aufs(advanced multi layered unification filesystem)文件系统。所以,Docker对Ubuntu的支持是最好的。

还有就是大家非常熟悉的Google的GCE,在没有Docker之前,就已经使用自己开发的类LXC容器。在有了Docker之后, Google开发了kubernetes来管理Docker。

商业版本Linux的领导者RedHat,也是Docker生态圈非常重要的合作伙伴。并且它支持的Fedora社区、CentOS社区会对推广Docker技术起到关键性作用。

还有就是OpenStack的建立者Rackspace,在混合云解决方案上具有全球领导地位。Docker与它的合作,可以帮助Docker技术在混合云的解决方案中得到推广。

最后就是开源PaaS项目DEIS,基于Docker和CoreOS技术构建的类如Heroku发布流程的PaaS应用。与它的合作,可以让更多的企业看到一个使用Docker技术的范本。

5. 结论

Docker的开源之路可以说是开源项目的最佳实践,它从屌丝瞬间变为高富帅的历程并不是偶然。Docker的开源之路还在进行中,从它的模式中我们可以学习到的东西并不仅仅局限于以上罗列的几点,读者可以在参与开源项目的过程中多体会,找到自己的“痛点”,然后参考Docker等开源项目的做法,相信可以很快解决你的问题。

6. 作者简介

肖德时, Red Hat Engineering Service/HSS 内部工具组Team Leader. Nodejs开源项目nodejs-cantas Lead Developer。擅长企业内部工具的设计以及实现。开源课程Rails Starter的发起人。rubygem: lazy_high_charts的Maintainer。twitter账号:xds2000,邮箱:xiaods@gmail.com

7.下期预告

Docker技术基本信息已经介绍的差不多了,接下来的系列将进入实战篇。下一篇将重点讲解Docker的集成测试部署方法,并结合众场景(数据库集成、测试、审查、部署)给出参考解决方案,敬请期待!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android activity解耦,Android与设计模式:用单一职责原则为Activity解耦

一、什么是单一职责原则单一职责原则(SRP:Single responsibility principle)又称单一功能原则,其定义为:一个类,应该只有一个可以导致变化的原因。光看概念一、什么是单一职责原则单一职责原则(SRP:Single responsibil…

python画图程序没有图_python画图 - v0

学了这么多年python了,还一直没有系统地了解过python的画图功能。 每次都是现学现用,但是某些比较紧急的场合,往往就会比较耗时又耗力,因为不成体系,还经常会忘记已经吸纳的新知识。 所以,我决定把这块的画…

利用Azure communication service实现跟Teams同样等级的沟通协作应用

大家都知道Teams是一个非常强大的沟通协作平台,包括聊天,团队协作,会议,以及应用集成等功能,现在在全世界拥有数以亿计的商业用户。作为Teams平台的一个延伸,产品组把一些核心功能变成了一个公开的服务&…

一个入门的学生选课系统

大三的时候写的一个学生选课系统,WinForm 的使用的SQL数据库。主要有学生,老师两类用户,老师查看选择自己课程的学生,学生进行选课(只能选5门课),登陆的时候要有登陆错误次数限制超过会锁定&…

python功能选择模块_python – 组合功能和功能模块

您的compose的实现对于python 3.2是有效的,如上述注释所述.你给出的图书馆的大部分功能都是在documentation中写的python等价物.诸如地图和过滤器的功能已经在python中实现,也可以简单地表示为列表推导. Python有一个id函数返回一个对象的身份(作为整数),但是该库的id函数可以表…

1574: [Usaco2009 Jan]地震损坏Damage

1574: [Usaco2009 Jan]地震损坏Damage Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 425 Solved: 232[Submit][Status][Discuss]Description 农夫John的农场遭受了一场地震.有一些牛棚遭到了损坏,但幸运地,所有牛棚间的路经都还能使用. FJ的农场有P(1 < P < 30,000)…

世界上最诡异的画,到底为何让无数人闻风丧胆?

全世界只有3.14 % 的人关注了爆炸吧知识也许只看到标题 &#xff0c;你一定想不到&#xff0c;传说中世界上最诡异的画是这张。《雨中女郎》这是乌克兰画家斯韦特兰娜捷列茨&#xff0c;绘画生涯中重要的一个作品。也许你会说哪里诡异呢&#xff1f;其实很多人看完这幅画以后&a…

谷歌街景新功能——帮警方抓毒贩

“地球上的毒贩子们&#xff0c;谷歌正在看你们呢。”11月11日的《纽约邮报》在题为《谷歌街景帮忙逮住嫌疑毒贩》的报道开篇这样写道。报道援引执法人员的话说&#xff0c;当时三个毒贩在纽约布鲁克林一处街角向人兜售他们的产品时&#xff0c;被谷歌街景拍个正着。 纽约警介绍…

pixel android8,谷歌Pixel 2更多信息:安卓8.1

给HTC手机团队注入11亿美元现金后&#xff0c;已经显示了谷歌要把硬件做下去的决心&#xff0c;特别是自家的Pixel系列&#xff0c;而10月4日新一代Pixel手机将正式来袭。据Android Police最新报道称&#xff0c;谷歌新的Pixel 2代手机将会提供一个新的功能名叫Always-On Song …

tftp 服务器 ip_360Stack裸金属服务器部署实践

女主宣言裸金属特性是一种将物理设备作为资源提供给租户的云计算服务&#xff0c;租户通过该服务可申请、管理和配置相应的物理设备资源&#xff0c;本文将介绍360Stack裸金属服务器的部署实践。PS&#xff1a;丰富的一线技术、多元化的表现形式&#xff0c;尽在“360云计算”&…

设计模式:状态模式

一、引子 状态模式自身结构非常简单——前面刚刚介绍了几个结构比较简单的设计模式&#xff0c;和他们 一样&#xff0c;状态模式在具体实现上留下了可变换的余地。我前面已经介绍过它的孪生兄妹策略模 式了&#xff0c;大家可以两者比较着阅读。本文将会讨论两者的区别。 二、…

python柱状图挨在一起_echarts多个柱状图展示问题(bar都挤到一起了)

设置bar的宽度也不行&#xff0c;增加区间长度也不行展示是这种情况附上option对象{"calculable": true,"dataZoom": [{"end": 50,"show": true,"start": 2,"type": "slider","xAxisIndex": …

织梦首页html在哪儿,dedecms织梦首页去index.html

如果首页中有index.html不利于SEO&#xff0c;蜘蛛用主域名跟踪到你网站的时候结果多了个index.html&#xff0c;结果导致分散了权重解决方法&#xff1a;将根目录下的index.php文件更改为&#xff1a;if(!file_exists(dirname(__FILE__)./data/common.inc.php)){header(Locati…

Google Chrome 总提示flash插件过期,用命令行模式解决

目标那改成&#xff1a;"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --args --allow-outdated-plugins chrome老提示插件已被阻止&#xff1a; chrome://plugins/ 进入插件 选择始终允许转载于:https://www.cnblogs.com/as3lib/p/4396418.html

Windows下的gcc/gc++编译环境配置

最近有很多算法设计的网络大赛&#xff0c;其中大部分的C/C都是采用Linux下的GCC/G编译器。配置GCC编译器大概有这几种途径&#xff1a;装Linux系统、装Linux虚拟机或者在Windows环境下模拟Linux编译环境。这里谈谈有关Windows下模拟Linux编译环境的方法。 说到Windows下模拟Li…

程序员苦逼了6年,选择在街边做鸭......

1 从入门到转行可太真实了▼2 干干巴巴&#xff0c;麻麻赖赖给我盘&#xff01;▼3 这位高人一看就是本科蓝翔&#xff0c;新东方硕博连读▼4 主要还是男人比较自信▼5 逻辑清晰&#xff0c;思维缜密▼6 妈妈&#xff0c;我就想听好听的▼7 如过全网都没有广告说不定会有…

uWSGI基础攻略

uWSGI的安装就不多说了、不懂的参考前面的文章、以下例子都是以http的形式来启动、比如莪的py文件名称叫做return_enviorn.py、那么便是这么来执行、如果迩想查看效果、请打开http://hostip:9090来查看 ./uwsgi --http :9090 --wsgi-file ../program/py_script/return_enviorn.…

sql语句ding_mybatis plus 写sql语句

一、api:public MapselectManagerList(ManagerBean managerBean){Page page new Page(managerBean.getPage()null ? 1:managerBean.getPage(),managerBean.getPageSize()null ? 10 :managerBean.getPageSize());try {return managerService.selectManagerList(page,managerB…

Resharper 和 Rider 的奇淫技巧,你知道多少?

.NET 开发中最令人印象深刻的生产力工具之一是ReSharper[1]。每次发布时&#xff0c;我都对它的功能感到震惊。不要误会我的意思&#xff0c;我喜欢 Visual Studio&#xff0c;而且它也变得越来越好。但每当我认为 Visual Studio 迎头赶上时&#xff0c;我就会发现一些令人惊叹…

流量节省模式 Android,这三种方法让你节省更多手机上网流量

大多数手机用户应该都知道最基本的流量管理方式——没有Wi-Fi可用时就不看视频、不玩在线游戏、或者下载大型应用——除非你拥有不限流量套餐。但如果你在使用流量时已经很节约&#xff0c;但每个月的用量依然会超出流量套餐&#xff0c;那下面这三种方法应该可以确保你不会浪费…