這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Engine.Connect()方法用來完成對Docker engine的串連工作:
// Connect will initialize a connection to the Docker daemon running on the// host, gather machine specs (memory, cpu, ...) and monitor state changes.func (e *Engine) Connect(config *tls.Config) error { host, _, err := net.SplitHostPort(e.Addr) if err != nil { return err } addr, err := net.ResolveIPAddr("ip4", host) if err != nil { return err } e.IP = addr.IP.String() c, err := dockerclient.NewDockerClientTimeout("tcp://"+e.Addr, config, time.Duration(requestTimeout), setTCPUserTimeout) if err != nil { return err } // Use HTTP Client used by dockerclient to create engine-api client apiClient, err := engineapi.NewClient("tcp://"+e.Addr, "", c.HTTPClient, nil) if err != nil { return err } return e.ConnectWithClient(c, apiClient)}
Engine.Connect()利用了另外兩個Docker項目:dockerclient和engine-api。首先調用dockerclient.NewDockerClientTimeout("tcp://"+e.Addr, config, time.Duration(requestTimeout), setTCPUserTimeout)產生一個DockerClient結構體:
type DockerClient struct { URL *url.URL HTTPClient *http.Client TLSConfig *tls.Config monitorStats int32 eventStopChan chan (struct{})}
再把DockerClient.HTTPClient傳入engineapi.NewClient()函數,作為engine-api的http.Client,作為HTTP請求的傳輸載體。最後調用Engine.ConnectWithClient()串連Docker engine,獲得Docker資訊。