code: func NewDockerGoClient(sdkclientFactory sdkclientfactory.Factory,
  	cfg *config.Config, ctx context.Context) (DockerClient, error) {
  	// Ensure SDK client can connect to the Docker daemon.
  	sdkclient, err := sdkclientFactory.GetDefaultClient()
  
  	if err != nil {
  		seelog.Errorf("DockerGoClient: Docker SDK client unable to connect to Docker daemon. "+
  			"Ensure Docker is running: %v", err)
  		return nil, err
  	}
  
  	// Even if we have a DockerClient, the daemon might not be running. Ping from both clients
  	// to ensure it's up.
  	_, err = sdkclient.Ping(ctx)
  	if err != nil {
  		seelog.Errorf("DockerGoClient: Docker SDK client unable to ping Docker daemon. "+
  			"Ensure Docker is running: %v", err)
  		return nil, err
  	}
  
  	var dockerAuthData json.RawMessage
  	if cfg.EngineAuthData != nil {
  		dockerAuthData = cfg.EngineAuthData.Contents()
  	}
  	return &dockerGoClient{
  		sdkClientFactory: sdkclientFactory,
  		auth:             dockerauth.NewDockerAuthProvider(cfg.EngineAuthType, dockerAuthData),
  		ecrClientFactory: ecr.NewECRFactory(cfg.AcceptInsecureCert),
  		ecrTokenCache:    async.NewLRUCache(tokenCacheSize, tokenCacheTTL),
  		config:           cfg,
  		context:          ctx,
  		imagePullBackoff: retry.NewExponentialBackoff(minimumPullRetryDelay, maximumPullRetryDelay,
  			pullRetryJitterMultiplier, pullRetryDelayMultiplier),
  	}, nil
  }
docs: // NewDockerGoClient creates a new DockerGoClient
  // TODO Remove clientfactory parameter once migration to Docker SDK is complete.