docker 代码阅读记录 -- docker cli 组件

本文介绍了docker cli组件,详细讲述了如何编译使用docker cli,重点探讨了Cobra命令行库的应用,并解析了docker cli的目录结构,特别是docker.go的main入口函数和DockerClient类。同时,通过docker build命令展示了cobra.Command的使用方法。
摘要由CSDN通过智能技术生成

docker cli 组件

docker 在主要的组件有cli、server、register、image、container 等,其中 cli 便是 docker 的客户端的。它的源代码也即 docker/cli 目录下,主要用于解析用户通过 “docker” 命令行的操作。

编译使用

通过以下步骤可以单独编译 cli 组件。

  1. 首先下载 cli 源码,docker 相关的组件被整理到了 git clone https://github.com/docker/ 下,其中包括 cli 部分的源代码。

     cd $GOPATH/src/github.com/docker/cli/cmd/docker
     git clone https://github.com/docker/cli.git
    
  2. 进入 docker cli 组件的入口目录

     cd cli/cmd/docker
    
  3. 编译(需要 golang 环境,这里使用最新版本 golang 1.11 进行编译)

     go build .
    

    将在目录下生成 docker 二进制文件,可以直接运行。若本机已经安装过 docker 并启动了 server, 则可以用该二进制文件操作本机的 docker 服务。

  4. 使用编译出的命令行工具

     ./docker --help
    

Cobra 命令行库

如果直接看 cli 的代码,可能并不简单。这里首先了解下 Cobra 的使用,可以帮助更快了解 docker cli 的源码结构。
cobra 是 golang 语言中一个命令行库,用 cobra 可以快速的构建命令行及对应的执行函数。 kubernetes 、 etcd 、 docker 、OpenShift 等工具都用它构建命令行。
它的源代码在 https://github.com/spf13/cobra。
下面是用 cobra 构建一个命令行的例子。

  1. 安装 cobra

      go get -v github.com/spf13/cobra/cobra
    
  2. 使用 cobra 创建一个 demo

    cobra init demo
    
  3. 自动生成了代码,目录结构如下

     demo
     ▾ cmd/
             root.go
      main.go 
    
  4. 如下所示
    Alt

cli 目录结构分析

接下来,看看 docker/cli 的目录结构,根目录下的文件、目录可以首先了解 cli 和 cmd 目录,其中 cmd 目录是入口代码的目录,熟悉 golang 的一定不陌生,而 cmd 便包含大量使用 cobra 库构建的子命令。

├── appveyor.yml
├── AUTHORS
├── circle.yml
├── cli
├── cmd
├── codecov.yml
├── contrib
├── CONTRIBUTING.md
├── dockerfiles
├── docker.Makefile
├── docs
├── e2e
├── experimental
├── gometalinter.json
├── internal
├── Jenkinsfile
├── kubernetes
├── LICENSE
├── MAINTAINERS
├── Makefile
├── man
├── NOTICE
├── opts
├── poule.yml
├── README.md
├── scripts
├── serv

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值