官术网_书友最值得收藏!

  • Docker源碼分析
  • 孫宏亮
  • 431字
  • 2018-12-31 20:27:03

2.2.3 如何創建Docker Client

Docker Client的創建其實就是在已有配置參數信息的情況下,通過Client包中的NewDockerCli方法創建一個Docker Clinet實例cli。具體源碼實現如下:

if *flTls || *flTlsVerify {
          cli = client.NewDockerCli(os.Stdin, os.Stdout, os.Stderr, protoAddrParts[0], protoAddrParts[1], &tlsConfig)
} else {
          cli = client.NewDockerCli(os.Stdin, os.Stdout, os.Stderr, protoAddrParts[0], protoAddrParts[1], nil)
     }

若flag參數flTls為真或者flTlsVerify為真,則說明需要使用TLS協議來保障傳輸的安全性,故創建Docker Client的時候,將tlsConfig參數傳入;否則,同樣創建Docker Client,只不過tlsConfig為nil。

關于Client包中的NewDockerCli函數的實現,可以具體參見./docker/api/client/cli.go。

func NewDockerCli(in io.ReadCloser, out, err io.Writer, proto, addr string, tlsConfig *tls.Config) *DockerCli {
var (
     isTerminal = false
     terminalFd uintptr
     scheme     = "http"
)

if tlsConfig != nil {
     scheme = "https"
}

if in != nil {
     if file, ok := out.(*os.File); ok {
          terminalFd = file.Fd()
          isTerminal = term.IsTerminal(terminalFd)
     }
}

if err == nil {
     err = out
}
return &DockerCli{
     proto:      proto,
     addr:       addr,
     in:         in,
     out:        out,
     err:        err,
     isTerminal: isTerminal,
     terminalFd: terminalFd,
     tlsConfig:  tlsConfig,
     scheme:     scheme,
     }
}

總體而言,創建DockerCli對象的過程比較簡單。較為重要的DockerCli的屬性有:proto,DockerClient與Docker Server的傳輸協議;addr,Docker Client需要訪問的host目標地址;tlsConfig,安全傳輸層協議的配置。若tlsConfig不為空,則說明需要使用安全傳輸層協議,DockerCli對象的scheme設置為“https”,另外還有關于輸入、輸出以及錯誤顯示的配置等。最終函數返回DockerCli對象。

通過調用client包中的NewDockerCli函數,程序最終創建了Docker Client,返回main包中的main函數之后,程序繼續往下執行。

主站蜘蛛池模板: 凤阳县| 四会市| 夏津县| 西贡区| 德安县| 湖南省| 鹤壁市| 大英县| 阳东县| 寻乌县| 海宁市| 永春县| 虹口区| 翼城县| 宜昌市| 岳普湖县| 山丹县| 水富县| 利川市| 深泽县| 盈江县| 慈利县| 左权县| 南充市| 海安县| 汝州市| 宜宾市| 桃园市| 河西区| 蒲城县| 京山县| 南充市| 普兰县| 张北县| 响水县| 湖北省| 剑川县| 富源县| 和政县| 汉源县| 贵定县|