code: func (i *Image) fetchTags() (map[string]string, error) {
  	// There is a weird quirk about Docker API: if tags are requested from index.docker.io,
  	// it returns a list of short layer IDs, so it's impossible to use them to download actual layers.
  	// However, when we hit the endpoint returned by image index API response, it has an expected format.
  	var tags map[string]string
  	err := i.parseResponse(fmt.Sprintf("v1/repositories/%s/tags", i.Name), &tags)
  	if err != nil {
  		return nil, err
  	}
  	return tags, nil
  }
docs: // fetchTags fetches tags for the image and caches them in the Image struct,
  // so that other methods can look them up efficiently.