深入浅出Docker(三):Docker开源之路
背景
Docker从一开始的概念阶段就致力于使用开源驱动的方式来发展,它的成功缘于国外成熟的开源文化氛围,以及可借鉴的社区运营经验。通过本文详细的介绍,让大家可以全面了解一个项目亦或者一项技术是如何通过开源的方式发展起来的。为了更准确的描述Docker的社区状况,请先看一份来自Docker官方的数据:
图中数据的看点有:
- 超过500个代码贡献者。代码的贡献者在社区发展过程中是非常重要的催化剂,它会不断加快产品迭代的速度,让项目更快的交付到最终用户的手里。
- 20个全职开发。一般的开源项目一般都不会有如此多的全职开发人员,但是Docker却有20个全职开发人员来驱动一个社区项目。这也从侧面证明了国外公司对开源项目的支持力度,以至于一家初创公司都舍得投入20个全职开发来推动开源技术的发展。
- 超过8000个创建在GitHub上的Docker相关项目。通过这个规模可以看到围绕Docker可以使用的项目已经非常丰富。
- Docker技术聚会。30个国家超过90个城市举办超过250个Docker技术聚会,这样的技术聚会还在不断增加,Docker技术爱好者可以在线申请承办此类技术聚会。
- 50万次的boot2docker下载。boot2docker为Docker官方推荐客户端,50万次也代表当前潜在的用户群体。
Docker公司目前正式员工50多名,由开源老手Ben Golub(前GlusterFS CEO)主持运营。现在主要有以下几个赢利点:
- 印有蓝鲸的T恤和贴纸的品牌价值
- 通过Docker Hub服务提供SaaS的分发服务
- 提供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类人,
- 代码贡献者,详细指南看CONTRIBUTORS.md。
- 代码维护者,详细指南看MAINTAINERS.md。
- 程序打包者,详细指南看PACKAGERS.md。
- 负责发布版本的维护者,详细指南看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的集成测试部署方法,并结合众场景(数据库集成、测试、审查、部署)给出参考解决方案,敬请期待!
深入浅出Docker(三):Docker开源之路相关推荐
- docker(三)docker仓库
文章目录 Docker仓库 上传 拉取 registry 加密 远程主机怎么连接 docker-compose Docker仓库 仓库(Repository)是集中存放镜像的地方.以下介绍一下 Doc ...
- docker部署OpenVAS开源漏洞扫描系统——筑梦之路
OpenVAS 是一个全功能的漏洞扫描器.它的功能包括非认证测试.认证测试.各种高水平和低水平的互联网和工业协议.大规模扫描的性能调整和一个强大的内部编程语言来实现任何类型的漏洞测试. 用户需要一种自 ...
- 成长之路:Docker(三)使用
Hello World Docker允许在容器内运行应用程序. docker run:在容器内运行一个应用程序. [root@localhost ~]# docker run ubuntu:15.10 ...
- docker tag 删除images_深入浅出 Docker (二) —— Docker的基本概念和架构原理
1. Docker 的基本概念 Docker 有三个基本概念: 镜像(Image) 容器(Container) 仓库(Repository) 1.1 镜像(Image) 操作系统分为内核和用户空间.对 ...
- [跨平台系列三Docker篇]:ASP.NET Core应用
如果你是老张的忠实读者的话,如果是从博客园就开始看我的文章的话,如果后期也一直看我公众号的话,应该就知道其实我一直在根据一条无形的教学线路来讲解的,,如果你真的是想好好学的话,请好好看看我之前的文章吧 ...
- Docker 是一个开源的应用容器引擎
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...
- 【云原生之Docker实战】使用Docker部署Flarum开源论坛
[云原生之Docker实战]使用Docker部署Flarum开源论坛 一.Flarum介绍 1.Flarum简介 2.Flarum特点 二.检查宿主机系统版本 三.检查本地docker环境 1.检查d ...
- 【云原生之Docker实战】使用Docker部署Rap2开源接口管理工具
[云原生之Docker实战]使用Docker部署Rap2开源接口管理工具 一.Rap2介绍 二.检查宿主机系统版本 三.检查本地docker环境 1.检查docker服务状态 2.检查docker配置 ...
- 云原生之使用Docker部署Misskey开源社交媒体平台
云原生之使用Docker部署Misskey开源社交媒体平台 一.Misskey介绍 1.Misskey简介 2.Misskey特点 二.本地环境介绍 1. 本地环境规划 2. 本次实践介绍 三.本地环 ...
最新文章
- android studio 退出编译,Android studio用什么命令可以退出当前应用
- @html.ActionLink的几种参数格式
- linux之账号管理
- 有序序列中的i个最大数(算法导论思考题9-1)
- CSS链接四种状态注意顺序、UI伪类选择器的顺序
- python怎样创建桌面快捷方式_python创建桌面快捷方式的代码
- 人工智能与机器学习的关系---人工智能工作笔记0013
- 【linux笔记】vi和vim编辑器,重定向输出,系统命令,进程,管道
- 推荐系统-Task03离线物料系统的构建
- Oracle数据库安装及配置
- c 语言min max 归一化,归一化方法 Normalization Method
- 探索性测试在哪里适合?
- 自然语言理解发展历程
- WinRAR 4.01 key!注册文件 注册码
- 卡尔曼滤波最完整公式推导
- openCV+Python实战练习——银行卡号识别
- 递归方法实现最大公约数
- 老毛桃win10pe 启动显示B1InitializeLibrary failed 0xc000009a解决方法
- 生物化学《第二章糖类》
- 带你10分钟学会 Git Extensions