写点什么

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

2014 年 8 月 29 日

【编者按】Docker 是 PaaS 供应商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于 Go 语言开发并遵从 Apache 2.0 协议开源。Docker 提供了一种在安全、可重复的环境中自动部署软件的方式,它的出现拉开了基于云计算平台发布产品方式的变革序幕。为了更好的促进 Docker 在国内的发展以及传播,我们决定开设《深入浅出Docker 》专栏,邀请Docker 相关的布道师、开发人员、技术专家来讲述Docker 的各方面内容,让读者对Docker 有更深入的了解,并且能够积极投入到新技术的讨论和实践中。另外,欢迎加入InfoQ Docker 技术交流群交流Docker 的最佳实践,QQ 群号:124378115。

1. 背景

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 的集成测试部署方法,并结合众场景(数据库集成、测试、审查、部署)给出参考解决方案,敬请期待!


感谢郭蕾对本文的审校和策划。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014 年 8 月 29 日 10:0015895

评论

发布
暂无评论
  • Docker 周报:Docker 这一年

    2014年最后一期Docker周报,从8月8日开始,InfoQ中文站就推出Docker周报,以期推动国内Docker的发展。转眼间Docker周报已经走过5个月,这周Docker周报为大家盘点2014年Docker相关的大事件以及优秀的Docker教程。

  • 从 0 到 1:搭建一个完整的 Kubernetes 集群

    今天,我们从0开始,在Bare-metal环境下使用kubeadm工具部署了一个完整的Kubernetes集群。

    2018 年 9 月 17 日

  • 容器时代的全球游戏运维

    演讲嘉宾Jack Xie RIOT GAMES 资深架构工程师内容介绍本专题将共同探讨,对于需要全球发布的游戏公司, 在容器时代怎么更好地利用容器来达到: 高效运维; 即时冗余; 节省资源; 顺利地与合作伙伴兼容; 高效高能利用多种云平台来达到产品更好更快发布。 未来展望:AI 运维在游戏运维场景中的应用。内容大纲 容器CI/CD生成 (Jenkins+容器来编译、打包、生成、发布容器); 混合云搭建; 容器的全球同步; Mesos + BlueKing BCS的混合发布。

    2018 年 12 月 26 日

  • 预习篇 · 小鲸鱼大事记(一):初出茅庐

    Docker项目,用近乎完美地解决了Pass项目的打包问题。于是,它开源不久便从脱颖而出,迅速占领了所有云计算领域头条。

    2018 年 8 月 28 日

  • 微软与 Docker 发布 Windows Server 容器预览版

    现在可以在容器内运行针对Windows的软件了。Windows Server 2016技术预览版3是第一个支持该项技术的Windows版本。Windows Server容器提供了和Linux容器非常类似的功能,但它需要在Windows生态系统的上下文中。Docker也发布了它的技术预览版,展示它是如何管理Windows容器的。

  • Docker 开源容器运行时组件 Containerd

    不久前,Docker宣布开源他们的容器运行时组件Containerd(发音是container-D)。目前的Containerd版本是0.2.4,Docker计划在2017年第二季度基于Open Container Initiative(OCI)发布1.0版本。

  • Docker 加入裁员大军,关键时期 Docker 将何去何从?

    上周Docker公司传出正在裁员。曾经一度是容器代名词的Docker,如今发展到了关键时期,从开源创新者到转向企业用户,输掉容器编排战的Docker未来将如何发展?

  • VMware 在最近的 2014 年 VMworld 大会上宣布了其在推动云计算和开源方面的相关行动和规划

    在2014年VMworld大会上,VMware宣布了他们将会发布一款VMware自己集成的OpenStack产品,它使用了VMware自身的一些软件组件用于存储、网络和管理。

  • Docker 周报:Docker 1.3 发布

    Docker 1.3 发布、Docker容器在VMware vSphere中的性能测试、微软宣布下一代Windows Server将引入Docker原生支持、PaaS,不是银弹,更多Docker资讯以及教程,请看本期Docker周报

  • Docker 周报:Docker 1.2.0 发布

    Docker1.2.0发布、VMware 收购虚拟机应用交付技术公司 CloudVolumes、虚拟机和Linux Container的性能比较、十大基于Docker的开发工具、Docker火爆的五大原因、Docker 容器托管服务Tutum获得融资,Docker一周新闻汇总,请看Docker周报。

  • 谈谈 Kubernetes 开源社区和未来走向

    我为你详细讲述了 CNCF 和 Kubernetes 社区的关系,以及 Kubernetes 社区的运作方式。

    2018 年 12 月 19 日

  • QClub 之 Docker 专场精彩回顾和总结

    3月29日,由InfoQ主办的QClub之Docker专场在北京成功举办。本期QClub聚焦国内Docker创业以及最佳实践案例,来自新浪微博、华为、IBM、七牛、雪球、数人科技、NiceScale、企事录等公司的技术专家分享了Docker如何在企业内部“落地生根”,以及Docker创业公司将如何利用这一支点来撬动新的市场。

  • 深入浅出 Docker(四):Docker 的集成测试部署之道

    Docker在实际的软件开发环境里非常适合DevOps开发模式,并且支持“持续发布”的开发流程。当我们熟悉了Docker的环境配置后,就需要考虑如何应用Docker技术到生产环境中。通常在研究参考国外实践经验的同时,我们会考虑二次定制开发的难度,还有项目上手的进度。所以,DevOps并不是让我们把架构图设计的如何漂亮,重点在于如何快速应用。Docker的工具链多达几百个,本文重点探讨如何选好一套适合自己的工具集,并搭建出适合自己的发布框架。

  • Docker 周报:Microsoft 发布全新的容器技术

    微软正式对外发布了针对云环境的新一代的容器技术:Hyper-V容器和Nano Server。Hyper-V容器是一个新的容器技术,它通过Hyper-V虚拟化技术提供高级隔离特性。Nano Server是最小化的Windows Server的footprint安装包,它针对云环境高度优化,是容器运行的理想环境。

  • “从此社区再无 Docker?” 那 “Moby” 又是什么?

    DockerCon 上重点发布的“Moby”,在国内技术圈引起了不小的震动。厂商们普遍为 Docker 公司释放 Moby 项目拍手称赞,一线技术圈(GitHub,HN)却掀起了一阵 “口诛笔伐” 的小波澜。容器圈内一位多年的 Docker 项目贡献者甚至直接感慨:“从此社区再无 Docker!”这件事,究竟该如何解读与看待?

  • 基于 Kubernetes 的 DevOps

    演讲嘉宾倪朋飞 Microsoft Azure Senior Software Engineer内容介绍随着 Kubernetes 的蓬勃发展,越来越多的应用迁移到了 Kubernetes 中。那么如何用 Kubernetes 管好这些应用?如何调整应用架构适应 Kubernetes 环境?又如何实施 CI/CD 简化这些流程呢?本次演讲将从 Kubernetes 的核心架构开始,介绍 Kubernetes 的设计理念,解析构建于 Kubernetes 之上的 DevOps 的生态特别是 CI/CD 工具链,并以 Azure 容器服务(AKS)为例介绍基于 Kubernetes 的 CI/CD 落地实践。最后还会介绍基于 Kubernetes 构建 DevOps 系统时会碰到的挑战,以及如何应用最佳实践解决这些问题。内容大纲 Kubernetes 核心架构简介; Kubernetes DevOps 生态; 基于 Azure 容器服务(AKS)的 CI/CD 实践; 挑战以及最佳实践。

    2019 年 1 月 2 日

  • Docker 联手微软:Container 的跨平台应用开发

    10月15日,微软公司宣布与Docker公司进行战略合作,在即将发布的Windows Server中,将会为Docker提供新的Container技术。微软相关开发者和组织者将会使用Docker开发全新的Container应用,以能够在Docker技术欣欣向荣的生态系统中与Linux齐头并进。

  • 特别放送(四)| Jenkins 产品经理是如何设计产品的?

    这是一期临时的特别放送。我想把我前两天参加DevOps World | Jenkins World大会时的收获分享给你。

    2019 年 12 月 12 日

发现更多内容

源码分析 | 咋嘞?你的IDEA过期了吧!加个Jar包就破解了,为什么?

小傅哥

Java 字节码插桩 asm bytebuddy

Python中的单下划线和双下划线使用场景

王坤祥

Python Python基础知识 Python基础

手把手教你从零开始使用python编写大型冒险类游戏01之游戏介绍

Geek_8dbdc1

用故事去理解「文件 I/O」

小林coding

操作系统 异步 文件系统 同步 非阻塞网络I/O

Git命令可视化展示,代码管理再也不愁了,建议收藏!

诸葛小猿

git git merge git rebase git fetch git reset

MySQL-技术专题-共享锁与排他锁

李浩宇/Alex

架构师训练营 - 第十周作业

坂田吴奇隆

图解23种设计模式——前方高能,前端切图仔请务必抓好方向盘

执鸢者

typescript 前端 设计模式

微博基于 Flink 的机器学习实践

Apache Flink

flink

中本聪原始比特币论文解读:点对点的电子现金系统

韩超

比特币 区块链

Serverless:为我们到底带来了什么

刘宇

Serverless 云原生

为什么修改hosts不立即生效?--浏览器DNS缓存机制分析

陈磊@Criss

从北京降雨的复盘中,我发现了企业SD-WAN网络的秘密

脑极体

非科班学习编程一定得知道这几个网站!

我是程序员小贱

Windows AD 保姆级配置NTP服务器教程

Young先生

时间 AD ntp Windows Server 2012 R2

芯片破壁者(十二.下):青瓦台魔咒与半导体“死亡谷”

脑极体

Git设置分支保护实现CodeReview卡点

陈磊@Criss

数据治理第一步,摆脱“手工作坊”

KAMI

大数据 数据治理 数据开发 数据平台

office 365激活,总是自动变成专业版2019

wood

Office Office 365

Flink 中的应用部署:当前状态与新应用模式

Apache Flink

flink

Go: Goroutine, 系统线程和CPU管理

陈思敏捷

go golang mpg

契约测试:解决微服务测试的问题

陈磊@Criss

Dubbo2.7试用

心平气和

dubbo 灰度 hessian

MySQL-技术专题-InnoDB存储引擎

李浩宇/Alex

goalng写的IM服务器

Alber

golang IM

手撕二分查找及其变种,就是干!

我是程序员小贱

一文了解对称加密与非对称加密

我是程序员小贱

安全

想要成功,你需要的是目标与动机,目标是你的助攻,动机是你的爱人。

叶小鍵

成功学 心理学 海蒂·格兰特·霍尔沃森

MySQL 架构与历史

多选参数

MySQL 数据库 MySQL优化

区块链一新基建 新动能 新发展大会将在南昌举办

CECBC区块链专委会

新基建 区块链技术

记一次腾讯云(西安)后台开发面试经历

z小赵

面试 分布式 高并发

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

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