79 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package main
 | 
						|
 | 
						|
import "time"
 | 
						|
 | 
						|
// This type represents the rootfs-key of the Docker image config.
 | 
						|
// It specifies the digest (i.e. usually SHA256 hash) of the tar'ed, but NOT
 | 
						|
// compressed image layers.
 | 
						|
type RootFs struct {
 | 
						|
	// The digests of the non-compressed FS layers.
 | 
						|
	DiffIds []string `json:"diff_ids"`
 | 
						|
 | 
						|
	// Type should always be set to "layers"
 | 
						|
	Type string `json:"type"`
 | 
						|
}
 | 
						|
 | 
						|
// This type represents an entry in the Docker image config's history key.
 | 
						|
// Every history element "belongs" to a filesystem layer.
 | 
						|
type History struct {
 | 
						|
	Created   time.Time `json:"created"`
 | 
						|
	CreatedBy string    `json:"created_by"`
 | 
						|
}
 | 
						|
 | 
						|
// This type represents runtime-configuration for the Docker image.
 | 
						|
// A lot of possible keys are omitted here, see:
 | 
						|
// https://github.com/docker/docker/blob/master/image/spec/v1.2.md#image-json-description
 | 
						|
type ImageConfig struct {
 | 
						|
	Cmd []string
 | 
						|
	Env []string
 | 
						|
}
 | 
						|
 | 
						|
// This type represents the Docker image configuration
 | 
						|
type Config struct {
 | 
						|
	Created time.Time `json:"created"`
 | 
						|
	Author  string    `json:"author"`
 | 
						|
 | 
						|
	// Architecture should be "amd64"
 | 
						|
	Architecture string `json:"architecture"`
 | 
						|
 | 
						|
	// OS should be "linux"
 | 
						|
	Os string `json:"os"`
 | 
						|
 | 
						|
	// Configuration can be set to 'nil', in which case all options have to be
 | 
						|
	// supplied at container launch time.
 | 
						|
	Config *ImageConfig `json:"config"`
 | 
						|
 | 
						|
	// Filesystem layers and history elements have to be in the same order.
 | 
						|
	RootFs  RootFs    `json:"rootfs"`
 | 
						|
	History []History `json:"history"`
 | 
						|
}
 | 
						|
 | 
						|
// This type represents any manifest
 | 
						|
type Element struct {
 | 
						|
	MediaType string `json:"mediaType"`
 | 
						|
	Size      int    `json:"size"`
 | 
						|
	Digest    string `json:"digest"`
 | 
						|
}
 | 
						|
 | 
						|
// This type represents a Docker image manifest as used by the registry
 | 
						|
// protocol V2.
 | 
						|
type Manifest struct {
 | 
						|
	SchemaVersion int       `json:"schemaVersion"` // Must be 2
 | 
						|
	MediaType     string    `json:"mediaType"`     // Use ManifestMediaType const
 | 
						|
	Config        Element   `json:"config"`
 | 
						|
	Layers        []Element `json:"layers"`
 | 
						|
}
 | 
						|
 | 
						|
// A really "dumb" representation of an image, with its data blob and related
 | 
						|
// metadata.
 | 
						|
// Note: This is not a registry API type.
 | 
						|
type Image struct {
 | 
						|
	Layer       []byte
 | 
						|
	LayerDigest string
 | 
						|
 | 
						|
	Manifest       []byte
 | 
						|
	ManifestDigest string
 | 
						|
 | 
						|
	Config       []byte
 | 
						|
	ConfigDigest string
 | 
						|
}
 |