《精通Docker第三版》完整目录:
第一章 Docker概览
第二章 创建容器镜像
第三章 存储和发布镜像
第四章 管理容器
第五章 Docker Compose
第六章 Windows容器
第七章 Docker Machine
第八章 Docker Swarm
第九章 Docker和Kubernetes
第十章 在公有云上运行Docker
第十一章 Portainer – 一个Docker的GUI
第十二章 Docker安全
第十三章 Docker工作流
第十四章 Docker进阶
恭喜你学习到本书的最后一章,你坚持到了最后!本章中我们会来讲解Moby项目,以及如何向Docker及其社区作出贡献。最后我们会快速地概览下云原生计算基金会(Cloud Native Computing Foundation)。让我们以Moby项目的讨论来开启本章吧。
Moby项目
DockerCon 2017上发的一个Moby项目的公告。在宣布这个项目时,我有来自同事的一些关于这个项目是什么的疑问,因为从表面上,Docker好像是发布了另一套容器系统。
那么,我是如何回答的呢?经过几天的疑惑之后,我们通过如下回答进行了解答:
Moby项目是一个开源项目的统称,收录用于构建基于容器系统的多个库。该项目带有其自身的框架,将这些库合并到一个可用的系统以及一个名为Moby Origin的参考系统;将其看作一个让你可以构建甚至是自定义自己Docker的”Hello World”。
在我给出这个回答后发生了两种情况中的一种,显然人们的反应是但实际的含义是什么?我的回复是:
Moby项目是一个Docker(公司)的开源playground,任何其他人可对项目做贡献来开发新的功能并扩展库和框架的已有功能,在公共论坛中构成了各个基于容器的系统。其中的一个输出是称为Moby Origin的前沿试验容器系统,另一个为Docker(软件),以开源社区版或商业支持的企业版对外发布。
任何询问由前沿实验版本、稳定开源发行版和企业支持版的类似项目,我们通过 Red Hat企业版Linux来说明Red Hat所做的事:
将其看作Red Hat对Red Hat企业版Linux所采取的方法。有Fedora,这是Red Hat操作系统对开发人员的前沿实验版本开发playground,引入新包、新功能并删除老的、过时的组件 。通常,Fedora会比Red Hat企业版Linux的功能早一到两年,企业版是基于Fedora项目中工作的商业支持的长期发行版,这一发行版之后,你还有社区支持版本CentOS。
你可能会在想,为什么只在本书的最后提到这件事呢?在写本书时,这个项目仍处于襁褓之中。事实上,从主Docker项目中转换Moby项目所需的所有组件的工作仍在进行中。
在我写本书时,该项目唯一真实、可用的组件,是LinuxKit,它是整合所有库并输出一个可运行容器的启动系统那个框架。
因为这个项目有极其快速的节奏,我不会给出如何使用LinuxKit的示例或深入Moby的其它细节,因为在读者读到本书时很有可能都发生了变化,我的建议是收藏如下页面来跟进这一激动人心的开发的最新动态:
- 该项目的主站:https://mobyproject.org/
- Moby项目GitHub页面:https://github.com/moby/
- Moby项目Twitter账号,获取新闻和操作指南的很好的资源:https://twitter.com/moby/
- LinuxKit的首页,包含如何入门的示例和指南:https://github.com/linuxkit/
对Docker进行贡献
那你想要帮助Docker并做出贡献呢?你是否有一个好的想法,想要在Docker或其中一个组件中实现?我们来获取实现它所需的信息和工具。如果你不是一个编程人员,还有其它帮助贡献的方式。Docker有大量的受从,另一组贡献的方式是帮助对其它用户服务的支持。我们也来了解要如何做。
贡献代码
对Docker贡献的一种最大的方式是对Docker代码提供帮助。因为Docker是完全开源的,你可以下载代码到本机并开发新功能,以拉取请求再展示给Docker。这些请求会被定期审核,如果审核人员觉得你所贡献的代码应该出现在服务中,他们会同意这一拉取请求。如果你知道所编写的代码被接受了会觉得受宠若惊的。
首先你需要知道如何进行贡献前的设置:这基本上是Docker (https://github.com/docker/)和Moby项目 (https://github.com/moby/)的全部内容,我们在前面的部分中已经讲到了。但我们要如何准备做出帮助和贡献呢?起步最好的地方是遵循Docker官方文档中的指南:https://docs.docker.com/opensource/ways/。
你可能已经猜到了,无需做很多来启动和运行开发环境,因为大部分开发都在容器中完成了。例如,除拥有GitHub账号外,Docker列出了如下三个软件来作为最小的骨架:
- Git: https://git-scm.com/
- Make: https://www.gnu.org/software/make/
- Docker: 如果你已经到这一步了,应该无需提供链接了
你可以在后面的链接中找到如何准备自己的Docker开发的更多信息,Mac和Linux:https://docs.docker.com/opensource/project/software-required/,Windows用户:https://docs.docker.com/opensource/project/software-req-win/。
要成为一个成功的开源项目,必须要有一些社区指南。我推荐推荐阅读这一个快速启动指南:https://docs.docker.com/opensource/code/,以及更详细的贡献工作流文档:https://docs.docker.com/opensource/workflow/make-a-contribution/。
Docker有一个行为准则,涵盖了他们的员工以及社区作为一个整体应该做的事。它是开源的并使用知识共享署名3.0进行许可,内容如下:
完整的行为准则请见https://github.com/docker/code-of-conduct/。
提供Docker支持服务
你也可以通过贡献Docker代码或功能集以外的方式来做出贡献。你可以通过所获取的知识来在他们的支持渠道帮助其它人。社区非常开始,总有人愿意提供帮助。我在碰到问题抓耳挠腮时发现它总是很有帮助。获取帮助和回馈贡献帮助一样的棒,这是非常好的礼尚往来。也是一个收获想法供你使用的一个很好的地方。你可以看到其他人其于他们的配置所问的问题,这可能会激发你在自己环境中使用的一些想法。
你也可以关注GitHub上有关该服务产生的issues。这些可能是功能请求以及Docker如何实现它们,或者可能是通过服务的使用出现的问题。你可以测试其他人经历的问题来看你是否可以重现问题或者为他们的问题找到可能的解决方案。
Docker有一个非常活跃的社区:https://community.docker.com/,在这里,你不仅可以看到最新的社区新闻和事件,还能与Docker用户和开发人员在他们的Slack频道中进行交谈。在写本书时,有80个频道涵盖各类主题,如Dockerfor Mac, Docker for Windows, Alpine Linux, Swarm, 存储和网络,这只是其中的很少一部分,随时都有数百个用户在线。
最后,还有Docker论坛,地址为https://forums.docker.com/。如果你想要搜索主题、问题或关键词,这些都是很好的去处。
其它贡献
还有其它的对Docker贡献的方式。你还可以推广服务或在你的机构中激发兴趣等。你可以通过你们机构自己的通过方式来开始,不论是email分发列表、群聊、IT圆桌,还是常规的会议。
你还在自己的组织中组成会面来让其他人讨论。这些会面可设计为不仅包含你自己的组织,还有你组织所处的城市的其它成员,来获取更广泛的交流和服务的推广。
你可以通过访问https://www.docker.com/community/meetup-groups/.来查看在你的区域是否已经有组织好的会面。
云原生计算基金会(CNCF)
我们在第九章 Docker和Kubernetes中简短的讨论了云原生计算基金会(CNCF)。云原生计算基金会,或简称CNCF,的成立旨在提供厂牌中立的项目之家,来让你管理你的容器和微服务架构。
它的成员包括Docker, Amazon Web Services, Google Cloud, Microsoft Azure, Red Hat, Oracle, VMWare和Digital Ocean等等。2018年6月,Linux基金会报道称CNCF有238个成员。这些成员不仅贡献项目,还贡献工程时间、代码和资源。
毕业项目
在写本书时,已有两个毕业项目,这此前章节中均已讨论。这两个无疑也是所有项目该基金会维护的项目中最知名的两个项目,分别为:
- Kubernetes (https://kubernetes.io):这是捐赠给该基金会的第一个项目。我们已讨论过,它最初由Google开发,现在由基金会成员及其它开源社区的2300位以上的贡献者共同维护。
- Prometheus (https://prometheus.io):这个项目由SoundCloud捐赠给基金会。在第十三章 Docker工作流中我们已了解到,它是一个由强大的时间序列数据库引擎作为支撑的实时监控和报警系统。
项目要达到如下要求才能毕业:
- 采用CNCF行为准则,类似于Docker所公布的那个。完整的行为准则请见https://github.com/cncf/foundation/blob/master/code-of-conduct.md。
- 获取一个Linux基金会 (LF)核心基础设施倡议(Core Infrastructure Initiative (CII))最佳实践徽章,这表明该项目使用确定的最佳实践集合进行开发,完整的标准参见https://github.com/coreinfrastructure/best-practices-badge/blob/master/doc/criteria.md。
- 项目至少获取两个组织的提交者。
- 通过GOVERNANCE.md和OWNERS.md文件公司的定义了提交者流程和项目管理方法。
- 公开的在ADOPTERS.md中或在项目网站上通过 Logo列出项目的采纳者。
- 获得技术监督委员会(Technical Oversight Committee (TOC))的绝大多数投票。有关该委会员的更多信息请见https://github.com/cncf/toc。
同时还有其它项目状态,这也是其它大部分项目当前所处的状态。
孵化项目
处于孵化阶段的项目最终应会有一个毕业状态。下面的项目都做了如下的事:
- 显示该项目至少有三个独立的终端用户使用(除项目的创始人之外)
- 在内部及外部都获取了一个良性的贡献者数量
- 显示了增长以及很好的成熟级别
TOC重度的参与这些项目来确保活跃级别足以满足前述的标准,因为每个项目的指标都会不同。
当前的项目列表如下:
- OpenTracing (https://opentracing.io/):这是CNCF羽翼之下的两个追踪项目中的第一个。它不是你可以下载并使用的一个应用,它是一组库和 API,让你可以在你的微务服应用中构建行为追踪和监控。
- Fluentd (https://www.fluentd.org):这个工具允许你从大量数据源收集日志数据并路由日志数据到一些日志管理、数据库、存档和警告系统,仅列出极少的一部分,如 Elastic Search, AWS S3, MySQL, SQL Server, Hadoop, Zabbix,和DataDog。
- gRPC (https://grpc.io):和Kubernetes一样,gRPC由Google捐赠给CNCF。它是一个开源、可扩展以及性能优化过的RPC框架,它已经在Netflix, Cisco和Juniper Networks等公司用于生产环境。
- Containerd (https://containerd.io):我们在第一章 Docker概览中简短地提到了它,是Docker在运作的开源项目之一。它是标准的容器运行时,允许开发人员内嵌一个运行时,来在他们的平台或应用上管理Docker以及符合OCI的镜像。
- Rkt (https://github.com/rkt/rkt):Rkt是Docker容器引擎的一个替代。不使用守护进程来在主机系统上管理容器,Rkt使用命令行来启动和管理容器。它由目前已属于Red Hat的CoreOS捐赠给CNCF。
- CNI (https://github.com/containernetworking):CNI是容器网络接口(Container Networking Interface)的缩写,同样不是一个你下载和使用的。而是一个标准的网络接口,设计用于内嵌到容器运行时中,如Kubernetes, Rkt和Mesos。拥有一个通用接口和API集合通过第三方插件和扩展允许这些运行时中高级网络功能更一致的支持。
- Envoy (https://www.envoyproxy.io)::最初在Lyft中创建,并由Apple, Netflix和Google等公司使用,Envoy是一个高度优化的服务网络(mesh),提供负载均衡、追踪和数据库及跨越我们环境的网络活动的观测性分析。
- Jaeger (https://jaegertracing.io):这是列表中的第二个追踪系统。不同于OpenTracing,它是一个完全分布式的追踪系统,最初由Uber开发来监控它的广泛的微服务环境。现由Red Hat等公司使用,它带有现代的UI和对OpenTracing以及各种后台存储引擎的原生支持。它设计来集成其它的CNCF项目,如Kubernetes和Prometheus。
- Notary (https://github.com/theupdateframework/notary):这个项目最初由Docker编写,是一个下面会讲到的TUF的实现。它设计用于允许开发人员通过给镜像加密工具来提供一个验证它们的容器镜像和内容来源的机制来给他们的容器镜像签名。
- TUF (https://theupdateframework.github.io):更新构架(Update Framework (TUF))是一个标准,允许软件产品,通过加密密钥的使用,来在安装和更新时保护他们自己。它由NYU工程学院开发。
- Vitess (https://vitess.io):Vitess曾是YouTube自2011年的MySQL数据库基础设施的一个核心组件。它是一个通过分片(sharding)横向扩展MySQL的一个集群系统。
- CoreDNS (https://coredns.io):这是一个由Go编写小型、弹性、可扩展并且调试优化的DNS服务器,从头开始设计来在可运行数千个容器的基础设施上运行。
- NATS (https://nats.io):这里我们有一个信息系统,设计用于运行微服务或支持IoT(物联网)设备架构的环境。
- Linkerd (https://linkerd.io):由Twitter所创建,Linkerd是一个服务网格,设计用于扩展并处理每秒成千上万个安全请求。
- Helm (https://www.helm.sh):为Kubernetes而创建,Helm是一个包管理器,允许用户以易于分页的格式打包他们的Kubernetes应用,并且快速的成为了一个标准。
- Rook (https://rook.io):当前Rook还处于早期开发阶段,聚焦于提供一个在Kubernetes上管理Ceph, Red Hat的分布式存储系统的编排层。最终,它会扩展到支持其它分布式区块和对象存储系统。
我们已经在本书的不同章节中使用了其中的几个项目,我相信你在解决路由到容器和在你的环境中监控自己的应用等问题时其它项目也会引起你的兴趣。
CNCF全景
CNCF提供了一个由他们和他们的成员管理的的所有项目的交互地图,请见https://landscape.cncf.io/。其中一个重要的信息如下:
You are viewing 590 cards with a total of 1,227,036 stars, a market cap of $6.52T, and funding of $16.3B
译者注:保留了原文,数量在持续增长,下面增加了一张交互地图的图片版
我相信你会同意这些数字很可观,但意义是什么呢?感谢CNCF所做的工作,我们有了Kubernetes等项目,提供一套标准化的工作集、API 和方法来在多个云基础设施供应商平台上以及自有平台和裸机服务-提供基石来供你创建和部署自己的高可用、可扩展和高性能容器及微服务应用。
总结
我希望本章给你了一些下一步进阶容器之旅的想法。我发现的一件事情是虽然使用这些服务很简单,但成为一个巨大、友好且热情的开发人员和其它像你一样涌现在不同软件和项目中的用户的社区的一部分会大有裨益。
这种社区感和协助由云原生计算基金会这种形式又进一步进行了强化。这聚集了很多大企业,在几年前,他们还不会想到对外与其它在大规模项目上视作竞争对手的其它企业产生协作。