docker官网下载步骤_成为优质Docker贡献者的5个步骤

docker官网下载步骤

为诸如Docker这样的流行开源项目做出贡献有很多好处:

  • 您因改进许多人使用的项目而获得认可。
  • 您可以与开源社区中其他非常聪明的人合作。
  • 通过理解和改进重要系统的过程,您自己将成为一名更好的程序员。

但是开始使用新的代码库可能会令人生畏。 Docker有很多行代码。 解决即使是最小的问题也可能需要通读大量代码并了解各个部分如何组合在一起。

但这也没有您想像的那么困难。 您可以按照Docker的贡献者指南来设置开发环境。 然后按照以下5个简单步骤进入新的代码库(带有交互式代码段,以指导您进行开发)。 在编程过程中遇到的每个新项目中,您磨练的技能都会派上用场。 那你还在等什么? 他们来了:

步骤1:从“ func main()”开始

俗话说得好,先从您所知道的开始。 如果您像大多数Docker用户一样,则可能主要使用Docker CLI。 因此,让我们从该程序的入口开始: “ main”函数

在本文的其余部分中,我们将使用一个名为Sourcegraph的站点,Docker团队将使用该站点来搜索和浏览Web上的代码,就像在智能IDE中一样。 为了跟进,最简单的方法是打开第二个浏览器窗口到Sourcegraph ,然后在该窗口和这篇文章之间来回跳转。

在Sourcegraph上,让我们在Docker仓库中 搜索'func main()'

Sourcegraph search example

我们正在寻找与“ docker”命令相对应的“ main”功能,该功能是“ docker / docker / docker.go”文件中的功能。 单击该搜索结果,我们跳到其定义(如下所示)。 花一些时间来阅读此功能:

在“主要”功能的顶部,我们看到许多与设置日志记录,读取命令标志以及初始化默认值相关的代码。 在底部,我们找到了对“ client.NewDockerCli”的调用,该调用似乎负责创建结构,该结构的方法可以完成所有实际工作。 让我们发布一个搜索查询'NewDockerCli'

步骤2:深入核心

在许多应用程序和库中,有一个或两个关键接口来描述核心功能或本质。 让我们尝试从现在的位置到达那里。

单击“ NewDockerCli”搜索结果,我们得到函数的定义。 由于我们感兴趣的是函数返回的结构“ DockerCli”,因此让我们单击返回类型以跳转到其定义。

单击“ DockerCli”将带到定义 。 向下滚动此文件,我们看到其方法“ getMethod”,“ Cmd”,“ Subcmd”和“ LoadConfigFile”。 “ Cmd”看起来值得注意。 这是唯一具有文档字符串的方法,并且文档字符串表明这是执行每个Docker命令的核心方法。

步骤3:深入研究

现在,我们已经找到了Docker客户端的核心“控制器” “ DockerCli” ,让我们深入研究其中一个特定Docker命令的工作方式。 让我们放大“ docker build”。

阅读'DockerCli.Cmd'的实现表明,它调用'DockerCli.getMethod'来调用与每个Docker命令相对应的函数。

在“ DockerCli.getMethod”中,我们看到这是通过动态调用名称为字符串“ Cmd”的方法的动态调用来完成的,该方法的名称是字符串“ Cmd”在Docker命令的名称之前。 因此,对于“ docker build”,我们正在寻找“ DockerCli.CmdBuild”。 在此文件中未定义此类方法,因此让我们搜索'CmdBuild'

确实,搜索结果显示“ DockerCli”上有一个“ CmdBuild”方法,因此让我们选择结果以跳转至其定义。 'DockerCli.CmdBuild'方法主体在此博客文章中很长,无法内联,但此处仅供参考

这里有很多事情。 在该方法的顶部,我们看到处理Dockerfile和配置的各种输入方法的代码。 通常,通过长方法阅读的好策略是倒退。 从底部开始,最后看一下该方法的作用。 在许多情况下,这就是方法的重点,而之前的所有内容只是为了完成该核心操作而设置。

在'CmdBuild'的底部,我们看到通过'cli.stream'发出的'POST'请求。 跳过一些定义,我们到达'DockerCli.clientRequest' ,它构建一个HTTP请求,其中包含您通过'docker build'传递给Docker的信息。 因此,最终,所有“ docker build”要做的就是向Docker守护进程发出一个奇特的“ POST”请求。 如果确实需要,可以尝试使用“ curl”复制其行为。

既然我们已经完全理解了单个Docker客户端命令,您可能有兴趣进一步深入研究,找到守护程序在何处接收请求,并一直跟踪到与LXC和内核的交互。 这当然是一条有效的路线,但我们暂时将其作为练习留给读者。 相反,让我们对客户端的关键组件有更广泛的了解。

步骤4:查看用法示例

更好地理解一段代码的一种方法是查看该代码的用法示例。 让我们回到“ DockerCli.clientRequest”方法。 在Sourcegraph的右侧面板中,我们可以翻阅此方法的使用示例。 事实证明,此方法已在多个地方使用,因为大多数Docker客户端命令都会导致向守护程序发出HTTP请求。

Sourcegraph client request example

为了完全理解一段代码,您需要同时了解它的工作方式和用法。 跳转到定义让我们通过向前浏览代码图来了解前者,而在查看用法示例时,则通过向后浏览来涵盖后者。

试试看更多的功能和方法,以了解它们如何相互连接。 如果有帮助,请画一幅图,说明应用程序的各个组件之间如何交互。

步骤5:选择一个问题并开始编码!

现在,您对Docker代码库有了一个整体的了解,现在看一下问题跟踪器 ,看看有什么需要解决的问题 ,并向Docker社区的成员提出您无法回答自己的问题。 因为您已经花了时间来探索和理解代码,所以您将能够更好地提出聪明的问题,并知道具体问题在更广泛的范围内适合什么。

而且,如果您对此感到满意,请一路上记笔记,记录您的经验,并将其写成这样的博客文章。 Docker团队很乐意听到您深入研究其代码的经验。

有效贡献

常常使人们无法参与项目的误解之一,是跳入庞大的国外代码库的任务令人生畏。 作为程序员,我们通常认为艰苦的工作在于编写代码 ,但是,至关重要的第一步通常是阅读和理解他人的代码。 认识到并以有原则的方式完成任务,并配备了执行任务的良好工具,将帮助您克服深陷于代码的心理障碍。

因此,请飞跃并立即查看Docker的源代码 。 一个充满活力的开源社区和代码库正等着您!

翻译自: https://opensource.com/business/15/6/contributing-to-docker

docker官网下载步骤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值