深入浅出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…

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

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

一个入门的学生选课系统

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

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

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

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

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

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

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

设计模式:状态模式

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

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

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

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

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

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

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

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

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

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

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

PS比狠大赛!看看谁家的照片更丑!

全世界只有3.14 % 的人关注了爆炸吧知识最近在网上看到一个“丑照片挑战”本来以为就是丑吧结果一看惊了张张都是文艺大片范儿一点都不丑至于为什么叫丑照片挑战赛来看看他们的实拍背景就知道了比如第一张小姐姐的酷拽镜头靠的竟然是餐桌上这盆小绿植第二张的帅气小哥哈哈哈对不…

.NET 6 数组拷贝性能对比

本文来对比多个不同的方法进行数组拷贝,和测试其性能测试性能必须采用基准(标准)性能测试方法,否则测试结果不可信。在 dotnet 里面,可以采用 BenchmarkDotNet 进行性能测试。详细请看 C# 标准性能测试拷贝某个数组的从…

python win32ui选取文件夹_最全 Python 算法实现资源汇总!

整理 | Rachel责编 | Jane出品 | Python大本营(ID:pythonnews)【导语】数据结构与算法是所有人都要学习的基础课程,自己写算法的过程可以帮助我们更好地理解算法思路,不要轻视每一个算法,一些虽然看似容易,但可能有很多…

兄弟,就你这智商就别出轨了吧?

1 这智商就别出轨了吧(没有聪明人就能出轨的意思)▼2 “俗话说得好”上一句是什么?▼3 这是什么诡异的老年运动?▼4 搞不懂时尚趋势在哪里.....▼5 聚餐的时候千万别拿着包去厕所▼6 一看就会一学就废▼7 聪明的狗子能有多…

requestmapping注解访问404_【框架】127:几个非常重要的注解

今天是刘小爱自学Java的第127天。感谢你的观看,谢谢你。今天的知识点有点多,有点记不过来了。学习内容安排如下:使用注解优化昨天写的springMVC入门程序。映射路径各种风格的学习,也就对应了注解RequestMapping中的参数。各种类型…

Dapr + .NET Core实战(二) 服务调用

服务调用是什么在分布式应用程序中的服务之间进行调用会涉及到许多挑战。例如:维护其他服务的地址。如何安全地调用服务。在发生短暂的 暂时性错误 时如何处理重试。分布式应用程序调用链路追踪。服务调用构建块通过使用 Dapr 挎斗作为服务的 反向代理 来解决这些难…

第五周项目2-对象作为数据成员

回想Engineer类的数据成员,有眼镜、背包等。某Engineer的眼镜、背包,是Glass、Bag类的对象。类中的数据成员,其类型可以是简单类型,也可以是类。通过这种方式,将某些类组合到另外的类中,当作其中的一个“部…

谷歌排名第一的编程语言,死磕它这两点,小白也能学的会!不信你看!

全世界只有3.14 % 的人关注了爆炸吧知识谷歌排名第一的编程语言时什么?毫无疑问:肯定是 Python。也难怪,作为大数据时代和人工智能时代的必备语言,Python 的优点太多了,语言简洁、易学、开发效率高、可移植性强......另…