上QQ阅读APP看书,第一时间看更新
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函数之后,程序继续往下执行。