Documentation ¶
Overview ¶
Package registry is an API wrapper for the Docker Registry v1 API and supports all of the documented operations, including: getting/putting images, retrieving repository tags, and executing searches.
Full documentation for the Docker Registry API can be found here:
https://docs.docker.com/reference/api/registry_api/
Usage ¶
There are two different usage models for the registry client depending on whether you are trying to interact with a private Docker registry or the Docker Hub.
When using the client with a private Docker registry you can simply pass basic auth credentials to the functions you are invoking and the appropriate authentication headers will be passed along with the request:
c := registry.NewClient() c.BaseURL, _ = url.Parse("http://my.registry:8080/v1/") auth := registry.BasicAuth{"user", "pass"} err := c.Repository.SetTag("foo/bar", "abc123", "1.0", auth)
When using the client to interact with the Docker Hub there is an extra call that you need to make. You need to use your basic auth credentials to first retrieve a token and then you can use that token when interacting with the Registry API:
c := registry.NewClient() basicAuth := registry.BasicAuth{"user", "pass"} tokenAuth, err := c.Hub.GetWriteToken("foo/bar", basicAuth) err := c.Repository.SetTag("foo/bar", "abc123", "1.0", tokenAuth)
Depending on the API you're trying to use, you may need to first retreive either a read, write or delete token.
For more details about interacting with the Docker Hub, see the Docker Hub and Registry Spec:
https://docs.docker.com/reference/api/hub_registry_spec/
Note: If your Docker Hub repository has been setup as an Automated Build repositry you will not be able to make any changes to it (setting tags, etc...) via the Registry API. You can only make changes to an Automated Build repository through the Docker Hub UI.
Index ¶
- type Access
- type Authenticator
- type BasicAuth
- type Client
- type ContainerConfig
- type HubService
- func (h *HubService) GetDeleteToken(repo string, auth Authenticator) (*TokenAuth, error)
- func (h *HubService) GetReadToken(repo string) (*TokenAuth, error)
- func (h *HubService) GetReadTokenWithAuth(repo string, auth Authenticator) (*TokenAuth, error)
- func (h *HubService) GetWriteToken(repo string, auth Authenticator) (*TokenAuth, error)
- type ImageMetadata
- type ImageService
- func (i *ImageService) AddLayer(imageID string, layer io.Reader, auth Authenticator) error
- func (i *ImageService) AddMetadata(imageID string, metadata *ImageMetadata, auth Authenticator) error
- func (i *ImageService) GetAncestry(imageID string, auth Authenticator) ([]string, error)
- func (i *ImageService) GetLayer(imageID string, layer io.Writer, auth Authenticator) error
- func (i *ImageService) GetMetadata(imageID string, auth Authenticator) (*ImageMetadata, error)
- type NilAuth
- type RegistryError
- type RepositoryService
- func (r *RepositoryService) Delete(repo string, auth Authenticator) error
- func (r *RepositoryService) DeleteTag(repo, tag string, auth Authenticator) error
- func (r *RepositoryService) GetImageID(repo, tag string, auth Authenticator) (string, error)
- func (r *RepositoryService) ListTags(repo string, auth Authenticator) (TagMap, error)
- func (r *RepositoryService) SetTag(repo, imageID, tag string, auth Authenticator) error
- type SearchResult
- type SearchResults
- type SearchService
- type TagMap
- type TokenAuth
Examples ¶
- ImageService.GetAncestry (DockerHub)
- ImageService.GetAncestry (PrivateRegistry)
- ImageService.GetLayer (DockerHub)
- ImageService.GetLayer (PrivateRegistry)
- ImageService.GetMetadata (DockerHub)
- ImageService.GetMetadata (PrivateRegistry)
- RepositoryService.Delete (DockerHub)
- RepositoryService.Delete (PrivateRegistry)
- RepositoryService.DeleteTag (PrivateRegistry)
- RepositoryService.GetImageID (DockerHub)
- RepositoryService.GetImageID (PrivateRegistry)
- RepositoryService.ListTags (DockerHub)
- RepositoryService.ListTags (PrivateRegistry)
- RepositoryService.SetTag (DockerHub)
- RepositoryService.SetTag (PrivateRegistry)
- SearchService.Query (DockerHub)
- SearchService.Query (PrivateRegistry)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Access ¶
type Access int
Access is an enum type representing the access type provided by a TokenAuth authenticator.
type Authenticator ¶
Authenticator is the interface used to abstract various HTTP authentication methods.
ApplyAuthentication accepts an http.Request and will apply the appropriate authentication headers to the request.
type BasicAuth ¶
BasicAuth is an Authenticator implementation which can be used for HTTP basic authentication.
func (BasicAuth) ApplyAuthentication ¶
Sets the Authorization header on the request to use HTTP Basic Authentication with the username and password provided.
type Client ¶
type Client struct { // BaseURL represents the base URL for the Registry API. // Defaults to "https://index.docker.io/v1/". BaseURL *url.URL // Hub gives access to the Docker Hub API for retrieving auth tokens. Hub *HubService // Image gives access to the /images part of the Registry API. Image *ImageService // Repository gives access to the /repositories part of the Registry API. Repository *RepositoryService // Search gives access to the /search part of the Registry API. Search *SearchService // contains filtered or unexported fields }
Client manages communication with the Docker Registry API.
type ContainerConfig ¶
type ContainerConfig struct { HostName string `json:"Hostname"` DomainName string `json:"Domainname"` User string `json:"User"` Memory int64 `json:"Memory"` MemorySwap int64 `json:"MemorySwap"` CPUSet string `json:"Cpuset"` AttachStdin bool `json:"AttachStdin"` AttachStdout bool `json:"AttachStdout"` AttachStderr bool `json:"AttachStderr"` PortSpecs []string `json:"PortSpecs"` ExposedPorts map[string]struct{} `json:"ExposedPorts"` TTY bool `json:"Tty"` OpenStdin bool `json:"OpenStdin"` StdinOnce bool `json:"StdinOnce"` Env []string `json:"Env"` Cmd []string `json:"Cmd"` DNS []string `json:"Dns"` Image string `json:"Image"` Volumes map[string]struct{} `json:"Volumes"` VolumesFrom string `json:"VolumesFrom"` WorkingDir string `json:"WorkingDir"` Entrypoint []string `json:"Entrypoint"` NetworkDisabled bool `json:"NetworkDisabled"` SecurityOpts []string `json:"SecurityOpts"` OnBuild []string `json:"OnBuild"` }
ContainerConfig is the list of configuration options used when creating a container.
type HubService ¶
type HubService struct {
// contains filtered or unexported fields
}
HubService gives acess to the Docker Hub API used to retrieve authentication tokens.
func (*HubService) GetDeleteToken ¶
func (h *HubService) GetDeleteToken(repo string, auth Authenticator) (*TokenAuth, error)
Retrieves a write-only token from the Docker Hub for the specified repo. The auth argument should be the user's basic auth credentials.
func (*HubService) GetReadToken ¶
func (h *HubService) GetReadToken(repo string) (*TokenAuth, error)
Retrieves a read-only token from the Docker Hub for the specified repo.
func (*HubService) GetReadTokenWithAuth ¶
func (h *HubService) GetReadTokenWithAuth(repo string, auth Authenticator) (*TokenAuth, error)
Retrieves a read-only token from the Docker Hub for the specified private repo.
func (*HubService) GetWriteToken ¶
func (h *HubService) GetWriteToken(repo string, auth Authenticator) (*TokenAuth, error)
Retrieves a write-only token from the Docker Hub for the specified repo. The auth argument should be the user's basic auth credentials.
type ImageMetadata ¶
type ImageMetadata struct { ID string `json:"id"` Parent string `json:"parent"` Comment string `json:"Comment"` Created time.Time `json:"created"` Container string `json:"container"` ContainerConfig ContainerConfig `json:"container_config"` DockerVersion string `json:"docker_version"` Author string `json:"author"` Config *ContainerConfig `json:"config"` Architecture string `json:"architecture"` OS string `json:"os"` Size int64 `json:"Size"` }
ImageMetadata represents metadata about an image layer.
type ImageService ¶
type ImageService struct {
// contains filtered or unexported fields
}
ImageService gives access to the /images portion of the Registry API.
func (*ImageService) AddLayer ¶
func (i *ImageService) AddLayer(imageID string, layer io.Reader, auth Authenticator) error
Upload the layer for a given image ID. Contents of the layer will be read from the provided io.Reader.
Docker Registry API docs: https://docs.docker.com/reference/api/registry_api/#put-image-layer
func (*ImageService) AddMetadata ¶
func (i *ImageService) AddMetadata(imageID string, metadata *ImageMetadata, auth Authenticator) error
Upload the layer metadata for a given image ID.
Docker Registry API docs: https://docs.docker.com/reference/api/registry_api/#put-image-layer_1
func (*ImageService) GetAncestry ¶
func (i *ImageService) GetAncestry(imageID string, auth Authenticator) ([]string, error)
Retrieve the ancestry for an image given an image ID.
Docker Registry API docs: https://docs.docker.com/reference/api/registry_api/#get-image-ancestry
Example (DockerHub) ¶
c := NewClient() auth, err := c.Hub.GetReadToken("ubuntu") images, err := c.Image.GetAncestry("ubuntu", auth) if err != nil { panic(err) } for _, imageID := range images { fmt.Println(imageID) }
Output:
Example (PrivateRegistry) ¶
c := NewClient() c.BaseURL, _ = url.Parse("http://my.registry:8080/v1/") auth := BasicAuth{"user", "pass"} images, err := c.Image.GetAncestry("ubuntu", auth) if err != nil { panic(err) } for _, imageID := range images { fmt.Println(imageID) }
Output:
func (*ImageService) GetLayer ¶
func (i *ImageService) GetLayer(imageID string, layer io.Writer, auth Authenticator) error
Retrieve the layer for a given image ID. Contents of the layer will be written to the provided io.Writer.
Docker Registry API docs: https://docs.docker.com/reference/api/registry_api/#get-image-layer
Example (DockerHub) ¶
c := NewClient() auth, err := c.Hub.GetReadToken("ubuntu") buffer := &bytes.Buffer{} imageID := "2427658c75a1e3d0af0e7272317a8abfaee4c15729b6840e3c2fca342fe47bf1" err = c.Image.GetLayer(imageID, buffer, auth) if err != nil { panic(err) } fmt.Println(buffer)
Output:
Example (PrivateRegistry) ¶
c := NewClient() c.BaseURL, _ = url.Parse("http://my.registry:8080/v1/") auth := BasicAuth{"user", "pass"} buffer := &bytes.Buffer{} imageID := "2427658c75a1e3d0af0e7272317a8abfaee4c15729b6840e3c2fca342fe47bf1" err := c.Image.GetLayer(imageID, buffer, auth) if err != nil { panic(err) } fmt.Println(buffer)
Output:
func (*ImageService) GetMetadata ¶
func (i *ImageService) GetMetadata(imageID string, auth Authenticator) (*ImageMetadata, error)
Retrieve the layer metadata for a given image ID.
Docker Registry API docs: https://docs.docker.com/reference/api/registry_api/#get-image-layer_1
Example (DockerHub) ¶
c := NewClient() auth, err := c.Hub.GetReadToken("ubuntu") imageID := "2427658c75a1e3d0af0e7272317a8abfaee4c15729b6840e3c2fca342fe47bf1" meta, err := c.Image.GetMetadata(imageID, auth) if err != nil { panic(err) } fmt.Printf("%#v", meta)
Output:
Example (PrivateRegistry) ¶
c := NewClient() c.BaseURL, _ = url.Parse("http://my.registry:8080/v1/") auth := BasicAuth{"user", "pass"} imageID := "2427658c75a1e3d0af0e7272317a8abfaee4c15729b6840e3c2fca342fe47bf1" meta, err := c.Image.GetMetadata(imageID, auth) if err != nil { panic(err) } fmt.Printf("%#v", meta)
Output:
type NilAuth ¶
type NilAuth struct{}
NilAuth is an Authenticator implementation that can be used when no authentication is required.
func (NilAuth) ApplyAuthentication ¶
No-op implementation. Makes NO changes to the specified request.
type RegistryError ¶
type RegistryError struct { Code int // contains filtered or unexported fields }
RegistryError encapsulates any errors which result from communicating with the Docker Registry API
func (RegistryError) Error ¶
func (e RegistryError) Error() string
type RepositoryService ¶
type RepositoryService struct {
// contains filtered or unexported fields
}
ImageService gives access to the /repositories portion of the Registry API.
func (*RepositoryService) Delete ¶
func (r *RepositoryService) Delete(repo string, auth Authenticator) error
Deletes the specified repository.
Docker Registry API docs: https://docs.docker.com/reference/api/registry_api/#delete-a-repository
Example (DockerHub) ¶
c := NewClient() basicAuth := BasicAuth{"user", "pass"} tokenAuth, err := c.Hub.GetDeleteToken("foo/bar", basicAuth) err = c.Repository.Delete("foo/bar", tokenAuth) if err != nil { panic(err) }
Output:
Example (PrivateRegistry) ¶
c := NewClient() c.BaseURL, _ = url.Parse("http://my.registry:8080/v1/") auth := BasicAuth{"user", "pass"} err := c.Repository.Delete("foo/bar", auth) if err != nil { panic(err) }
Output:
func (*RepositoryService) DeleteTag ¶
func (r *RepositoryService) DeleteTag(repo, tag string, auth Authenticator) error
Deletes a tag from the specified repository.
Docker Registry API docs: https://docs.docker.com/reference/api/registry_api/#delete-a-repository-tag
Example (PrivateRegistry) ¶
c := NewClient() c.BaseURL, _ = url.Parse("http://my.registry:8080/v1/") auth := BasicAuth{"user", "pass"} err := c.Repository.DeleteTag("foo/bar", "1.0", auth) if err != nil { panic(err) }
Output:
func (*RepositoryService) GetImageID ¶
func (r *RepositoryService) GetImageID(repo, tag string, auth Authenticator) (string, error)
Retrieves the ID of the image identified by the given repository and tag.
Docker Registry API docs: https://docs.docker.com/reference/api/registry_api/#get-image-id-for-a-particular-tag
Example (DockerHub) ¶
c := NewClient() auth, err := c.Hub.GetReadToken("ubuntu") imageID, err := c.Repository.GetImageID("ubuntu", "latest", auth) if err != nil { panic(err) } fmt.Println(imageID)
Output:
Example (PrivateRegistry) ¶
c := NewClient() c.BaseURL, _ = url.Parse("http://my.registry:8080/v1/") auth := BasicAuth{"user", "pass"} imageID, err := c.Repository.GetImageID("ubuntu", "latest", auth) if err != nil { panic(err) } fmt.Println(imageID)
Output:
func (*RepositoryService) ListTags ¶
func (r *RepositoryService) ListTags(repo string, auth Authenticator) (TagMap, error)
Retrieves a list of tags for the specified repository.
Docker Registry API docs: https://docs.docker.com/reference/api/registry_api/#list-repository-tags
Example (DockerHub) ¶
c := NewClient() auth, err := c.Hub.GetReadToken("ubuntu") tags, err := c.Repository.ListTags("ubuntu", auth) if err != nil { panic(err) } for tag, imageID := range tags { fmt.Printf("%s = %s", tag, imageID) }
Output:
Example (PrivateRegistry) ¶
c := NewClient() c.BaseURL, _ = url.Parse("http://my.registry:8080/v1/") auth := BasicAuth{"user", "pass"} tags, err := c.Repository.ListTags("ubuntu", auth) if err != nil { panic(err) } for tag, imageID := range tags { fmt.Printf("%s = %s", tag, imageID) }
Output:
func (*RepositoryService) SetTag ¶
func (r *RepositoryService) SetTag(repo, imageID, tag string, auth Authenticator) error
Sets a tag for the the specified repository and image ID.
Docker Registry API docs: https://docs.docker.com/reference/api/registry_api/#set-a-tag-for-a-specified-image-id
Example (DockerHub) ¶
c := NewClient() basicAuth := BasicAuth{"user", "pass"} tokenAuth, err := c.Hub.GetWriteToken("foo/bar", basicAuth) imageID := "2427658c75a1e3d0af0e7272317a8abfaee4c15729b6840e3c2fca342fe47bf1" err = c.Repository.SetTag("foo/bar", imageID, "1.0", tokenAuth) if err != nil { panic(err) }
Output:
Example (PrivateRegistry) ¶
c := NewClient() c.BaseURL, _ = url.Parse("http://my.registry:8080/v1/") auth := BasicAuth{"user", "pass"} imageID := "2427658c75a1e3d0af0e7272317a8abfaee4c15729b6840e3c2fca342fe47bf1" err := c.Repository.SetTag("foo/bar", imageID, "1.0", auth) if err != nil { panic(err) }
Output:
type SearchResult ¶
type SearchResult struct { Name string `json:"name"` IsAutomated bool `json:"is_automated"` IsTrusted bool `json:"is_trusted"` IsOfficial bool `json:"is_official"` StarCount int `json:"star_count"` Description string `json:"description"` }
SearchResult represents a single result returned from a search against the registry.
type SearchResults ¶
type SearchResults struct { NumPages int `json:"num_pages"` NumResults int `json:"num_results"` Results []SearchResult `json:"results"` PageSize int `json:"page_size"` Query string `json:"query"` Page int `json:"page,string"` }
SearchResults represents the list of SearchResult structs returned from a search against the registry.
type SearchService ¶
type SearchService struct {
// contains filtered or unexported fields
}
SearchService gives access to the /search portion of the Registry API
func (*SearchService) Query ¶
func (s *SearchService) Query(query string, page, num int) (*SearchResults, error)
Searches the registry for the given term. The page argument is the page number for the desired results. The num argument is the number of results to be returned per page.
Docker Registry API docs: https://docs.docker.com/reference/api/registry_api/#search
Example (DockerHub) ¶
c := NewClient() results, err := c.Search.Query("mysql", 1, 25) if err != nil { panic(err) } for _, result := range results.Results { fmt.Println(result.Name) }
Output:
Example (PrivateRegistry) ¶
c := NewClient() c.BaseURL, _ = url.Parse("http://my.registry:8080/v1/") results, err := c.Search.Query("mysql", 1, 25) if err != nil { panic(err) } for _, result := range results.Results { fmt.Println(result.Name) }
Output:
type TokenAuth ¶
TokenAuth is an Authenticator implementation which implements the token authentication scheme used by the Docker Hub.
func (TokenAuth) ApplyAuthentication ¶
Sets the Authorization header on the request to use the provided token. Will also re-write the host value of the request URL to use the value provided in the TokenAuth.