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
 | |
| }
 |