| 
									
										
										
										
											2017-04-12 04:25:13 +08:00
										 |  |  | package docker | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  Types extracted from Docker
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"time" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-16 01:31:54 +08:00
										 |  |  | 	"github.com/containers/image/pkg/strslice" | 
					
						
							| 
									
										
										
										
											2017-04-12 04:25:13 +08:00
										 |  |  | 	"github.com/opencontainers/go-digest" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-18 23:23:17 +08:00
										 |  |  | // github.com/moby/moby/image/rootfs.go
 | 
					
						
							| 
									
										
										
										
											2017-04-12 04:25:13 +08:00
										 |  |  | const TypeLayers = "layers" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-17 05:07:31 +08:00
										 |  |  | // github.com/docker/distribution/manifest/schema2/manifest.go
 | 
					
						
							|  |  |  | const V2S2MediaTypeUncompressedLayer = "application/vnd.docker.image.rootfs.diff.tar" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-18 23:23:17 +08:00
										 |  |  | // github.com/moby/moby/image/rootfs.go
 | 
					
						
							| 
									
										
										
										
											2019-01-09 06:00:41 +08:00
										 |  |  | // V2S2RootFS describes images root filesystem
 | 
					
						
							| 
									
										
										
										
											2017-04-12 04:25:13 +08:00
										 |  |  | // This is currently a placeholder that only supports layers. In the future
 | 
					
						
							|  |  |  | // this can be made into an interface that supports different implementations.
 | 
					
						
							| 
									
										
										
										
											2017-05-17 05:07:31 +08:00
										 |  |  | type V2S2RootFS struct { | 
					
						
							| 
									
										
										
										
											2017-04-12 04:25:13 +08:00
										 |  |  | 	Type    string          `json:"type"` | 
					
						
							|  |  |  | 	DiffIDs []digest.Digest `json:"diff_ids,omitempty"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-18 23:23:17 +08:00
										 |  |  | // github.com/moby/moby/image/image.go
 | 
					
						
							| 
									
										
										
										
											2019-01-09 06:00:41 +08:00
										 |  |  | // V2S2History stores build commands that were used to create an image
 | 
					
						
							| 
									
										
										
										
											2017-05-17 05:07:31 +08:00
										 |  |  | type V2S2History struct { | 
					
						
							| 
									
										
										
										
											2017-04-12 04:25:13 +08:00
										 |  |  | 	// Created is the timestamp at which the image was created
 | 
					
						
							|  |  |  | 	Created time.Time `json:"created"` | 
					
						
							|  |  |  | 	// Author is the name of the author that was specified when committing the image
 | 
					
						
							|  |  |  | 	Author string `json:"author,omitempty"` | 
					
						
							|  |  |  | 	// CreatedBy keeps the Dockerfile command used while building the image
 | 
					
						
							|  |  |  | 	CreatedBy string `json:"created_by,omitempty"` | 
					
						
							|  |  |  | 	// Comment is the commit message that was set when committing the image
 | 
					
						
							|  |  |  | 	Comment string `json:"comment,omitempty"` | 
					
						
							|  |  |  | 	// EmptyLayer is set to true if this history item did not generate a
 | 
					
						
							|  |  |  | 	// layer. Otherwise, the history item is associated with the next
 | 
					
						
							|  |  |  | 	// layer in the RootFS section.
 | 
					
						
							|  |  |  | 	EmptyLayer bool `json:"empty_layer,omitempty"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-18 23:23:17 +08:00
										 |  |  | // github.com/moby/moby/image/image.go
 | 
					
						
							| 
									
										
										
										
											2017-04-12 04:25:13 +08:00
										 |  |  | // ID is the content-addressable ID of an image.
 | 
					
						
							|  |  |  | type ID digest.Digest | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-18 23:23:17 +08:00
										 |  |  | // github.com/moby/moby/api/types/container/config.go
 | 
					
						
							| 
									
										
										
										
											2017-05-16 01:31:54 +08:00
										 |  |  | // HealthConfig holds configuration settings for the HEALTHCHECK feature.
 | 
					
						
							|  |  |  | type HealthConfig struct { | 
					
						
							|  |  |  | 	// Test is the test to perform to check that the container is healthy.
 | 
					
						
							|  |  |  | 	// An empty slice means to inherit the default.
 | 
					
						
							|  |  |  | 	// The options are:
 | 
					
						
							|  |  |  | 	// {} : inherit healthcheck
 | 
					
						
							|  |  |  | 	// {"NONE"} : disable healthcheck
 | 
					
						
							|  |  |  | 	// {"CMD", args...} : exec arguments directly
 | 
					
						
							|  |  |  | 	// {"CMD-SHELL", command} : run command with system's default shell
 | 
					
						
							|  |  |  | 	Test []string `json:",omitempty"` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Zero means to inherit. Durations are expressed as integer nanoseconds.
 | 
					
						
							| 
									
										
										
										
											2018-08-21 03:24:20 +08:00
										 |  |  | 	Interval    time.Duration `json:",omitempty"` // Interval is the time to wait between checks.
 | 
					
						
							|  |  |  | 	Timeout     time.Duration `json:",omitempty"` // Timeout is the time to wait before considering the check to have hung.
 | 
					
						
							|  |  |  | 	StartPeriod time.Duration `json:",omitempty"` // Time to wait after the container starts before running the first check.
 | 
					
						
							| 
									
										
										
										
											2017-05-16 01:31:54 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Retries is the number of consecutive failures needed to consider a container as unhealthy.
 | 
					
						
							|  |  |  | 	// Zero means inherit.
 | 
					
						
							|  |  |  | 	Retries int `json:",omitempty"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // github.com/docker/go-connections/nat/nat.go
 | 
					
						
							|  |  |  | // PortSet is a collection of structs indexed by Port
 | 
					
						
							|  |  |  | type PortSet map[Port]struct{} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // github.com/docker/go-connections/nat/nat.go
 | 
					
						
							|  |  |  | // Port is a string containing port number and protocol in the format "80/tcp"
 | 
					
						
							|  |  |  | type Port string | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-18 23:23:17 +08:00
										 |  |  | // github.com/moby/moby/api/types/container/config.go
 | 
					
						
							| 
									
										
										
										
											2017-05-16 01:31:54 +08:00
										 |  |  | // Config contains the configuration data about a container.
 | 
					
						
							|  |  |  | // It should hold only portable information about the container.
 | 
					
						
							|  |  |  | // Here, "portable" means "independent from the host we are running on".
 | 
					
						
							|  |  |  | // Non-portable information *should* appear in HostConfig.
 | 
					
						
							|  |  |  | // All fields added to this struct must be marked `omitempty` to keep getting
 | 
					
						
							|  |  |  | // predictable hashes from the old `v1Compatibility` configuration.
 | 
					
						
							|  |  |  | type Config struct { | 
					
						
							|  |  |  | 	Hostname        string              // Hostname
 | 
					
						
							|  |  |  | 	Domainname      string              // Domainname
 | 
					
						
							|  |  |  | 	User            string              // User that will run the command(s) inside the container, also support user:group
 | 
					
						
							|  |  |  | 	AttachStdin     bool                // Attach the standard input, makes possible user interaction
 | 
					
						
							|  |  |  | 	AttachStdout    bool                // Attach the standard output
 | 
					
						
							|  |  |  | 	AttachStderr    bool                // Attach the standard error
 | 
					
						
							|  |  |  | 	ExposedPorts    PortSet             `json:",omitempty"` // List of exposed ports
 | 
					
						
							|  |  |  | 	Tty             bool                // Attach standard streams to a tty, including stdin if it is not closed.
 | 
					
						
							|  |  |  | 	OpenStdin       bool                // Open stdin
 | 
					
						
							|  |  |  | 	StdinOnce       bool                // If true, close stdin after the 1 attached client disconnects.
 | 
					
						
							|  |  |  | 	Env             []string            // List of environment variable to set in the container
 | 
					
						
							|  |  |  | 	Cmd             strslice.StrSlice   // Command to run when starting the container
 | 
					
						
							|  |  |  | 	Healthcheck     *HealthConfig       `json:",omitempty"` // Healthcheck describes how to check the container is healthy
 | 
					
						
							|  |  |  | 	ArgsEscaped     bool                `json:",omitempty"` // True if command is already escaped (Windows specific)
 | 
					
						
							|  |  |  | 	Image           string              // Name of the image as it was passed by the operator (e.g. could be symbolic)
 | 
					
						
							|  |  |  | 	Volumes         map[string]struct{} // List of volumes (mounts) used for the container
 | 
					
						
							|  |  |  | 	WorkingDir      string              // Current directory (PWD) in the command will be launched
 | 
					
						
							|  |  |  | 	Entrypoint      strslice.StrSlice   // Entrypoint to run when starting the container
 | 
					
						
							|  |  |  | 	NetworkDisabled bool                `json:",omitempty"` // Is network disabled
 | 
					
						
							|  |  |  | 	MacAddress      string              `json:",omitempty"` // Mac Address of the container
 | 
					
						
							|  |  |  | 	OnBuild         []string            // ONBUILD metadata that were defined on the image Dockerfile
 | 
					
						
							|  |  |  | 	Labels          map[string]string   // List of labels set to this container
 | 
					
						
							|  |  |  | 	StopSignal      string              `json:",omitempty"` // Signal to stop a container
 | 
					
						
							|  |  |  | 	StopTimeout     *int                `json:",omitempty"` // Timeout (in seconds) to stop a container
 | 
					
						
							|  |  |  | 	Shell           strslice.StrSlice   `json:",omitempty"` // Shell for shell-form of RUN, CMD, ENTRYPOINT
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-17 05:07:31 +08:00
										 |  |  | // github.com/docker/distribution/manifest/schema1/config_builder.go
 | 
					
						
							|  |  |  | // For non-top-level layers, create fake V1Compatibility strings that
 | 
					
						
							|  |  |  | // fit the format and don't collide with anything else, but don't
 | 
					
						
							|  |  |  | // result in runnable images on their own.
 | 
					
						
							|  |  |  | type V1Compatibility struct { | 
					
						
							|  |  |  | 	ID              string    `json:"id"` | 
					
						
							|  |  |  | 	Parent          string    `json:"parent,omitempty"` | 
					
						
							|  |  |  | 	Comment         string    `json:"comment,omitempty"` | 
					
						
							|  |  |  | 	Created         time.Time `json:"created"` | 
					
						
							|  |  |  | 	ContainerConfig struct { | 
					
						
							|  |  |  | 		Cmd []string | 
					
						
							|  |  |  | 	} `json:"container_config,omitempty"` | 
					
						
							|  |  |  | 	Author    string `json:"author,omitempty"` | 
					
						
							|  |  |  | 	ThrowAway bool   `json:"throwaway,omitempty"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-18 23:23:17 +08:00
										 |  |  | // github.com/moby/moby/image/image.go
 | 
					
						
							| 
									
										
										
										
											2017-04-12 04:25:13 +08:00
										 |  |  | // V1Image stores the V1 image configuration.
 | 
					
						
							|  |  |  | type V1Image struct { | 
					
						
							|  |  |  | 	// ID is a unique 64 character identifier of the image
 | 
					
						
							|  |  |  | 	ID string `json:"id,omitempty"` | 
					
						
							|  |  |  | 	// Parent is the ID of the parent image
 | 
					
						
							|  |  |  | 	Parent string `json:"parent,omitempty"` | 
					
						
							|  |  |  | 	// Comment is the commit message that was set when committing the image
 | 
					
						
							|  |  |  | 	Comment string `json:"comment,omitempty"` | 
					
						
							|  |  |  | 	// Created is the timestamp at which the image was created
 | 
					
						
							|  |  |  | 	Created time.Time `json:"created"` | 
					
						
							|  |  |  | 	// Container is the id of the container used to commit
 | 
					
						
							|  |  |  | 	Container string `json:"container,omitempty"` | 
					
						
							|  |  |  | 	// ContainerConfig is the configuration of the container that is committed into the image
 | 
					
						
							| 
									
										
										
										
											2017-05-16 01:31:54 +08:00
										 |  |  | 	ContainerConfig Config `json:"container_config,omitempty"` | 
					
						
							| 
									
										
										
										
											2017-04-12 04:25:13 +08:00
										 |  |  | 	// DockerVersion specifies the version of Docker that was used to build the image
 | 
					
						
							|  |  |  | 	DockerVersion string `json:"docker_version,omitempty"` | 
					
						
							|  |  |  | 	// Author is the name of the author that was specified when committing the image
 | 
					
						
							|  |  |  | 	Author string `json:"author,omitempty"` | 
					
						
							|  |  |  | 	// Config is the configuration of the container received from the client
 | 
					
						
							| 
									
										
										
										
											2017-05-16 01:31:54 +08:00
										 |  |  | 	Config *Config `json:"config,omitempty"` | 
					
						
							| 
									
										
										
										
											2017-04-12 04:25:13 +08:00
										 |  |  | 	// Architecture is the hardware that the image is build and runs on
 | 
					
						
							|  |  |  | 	Architecture string `json:"architecture,omitempty"` | 
					
						
							|  |  |  | 	// OS is the operating system used to build and run the image
 | 
					
						
							|  |  |  | 	OS string `json:"os,omitempty"` | 
					
						
							|  |  |  | 	// Size is the total size of the image including all layers it is composed of
 | 
					
						
							|  |  |  | 	Size int64 `json:",omitempty"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-18 23:23:17 +08:00
										 |  |  | // github.com/moby/moby/image/image.go
 | 
					
						
							| 
									
										
										
										
											2019-01-09 06:00:41 +08:00
										 |  |  | // V2Image stores the image configuration
 | 
					
						
							| 
									
										
										
										
											2017-05-17 05:07:31 +08:00
										 |  |  | type V2Image struct { | 
					
						
							| 
									
										
										
										
											2017-04-12 04:25:13 +08:00
										 |  |  | 	V1Image | 
					
						
							| 
									
										
										
										
											2017-05-17 05:07:31 +08:00
										 |  |  | 	Parent     ID            `json:"parent,omitempty"` | 
					
						
							|  |  |  | 	RootFS     *V2S2RootFS   `json:"rootfs,omitempty"` | 
					
						
							|  |  |  | 	History    []V2S2History `json:"history,omitempty"` | 
					
						
							|  |  |  | 	OSVersion  string        `json:"os.version,omitempty"` | 
					
						
							|  |  |  | 	OSFeatures []string      `json:"os.features,omitempty"` | 
					
						
							| 
									
										
										
										
											2017-04-12 04:25:13 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// rawJSON caches the immutable JSON associated with this image.
 | 
					
						
							|  |  |  | 	rawJSON []byte | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// computedID is the ID computed from the hash of the image config.
 | 
					
						
							|  |  |  | 	// Not to be confused with the legacy V1 ID in V1Image.
 | 
					
						
							|  |  |  | 	computedID ID | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-05-17 05:07:31 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | // github.com/docker/distribution/manifest/versioned.go
 | 
					
						
							| 
									
										
										
										
											2019-01-09 06:00:41 +08:00
										 |  |  | // V2Versioned provides a struct with the manifest schemaVersion and mediaType.
 | 
					
						
							| 
									
										
										
										
											2017-05-17 05:07:31 +08:00
										 |  |  | // Incoming content with unknown schema version can be decoded against this
 | 
					
						
							|  |  |  | // struct to check the version.
 | 
					
						
							|  |  |  | type V2Versioned struct { | 
					
						
							|  |  |  | 	// SchemaVersion is the image manifest schema that this image follows
 | 
					
						
							|  |  |  | 	SchemaVersion int `json:"schemaVersion"` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// MediaType is the media type of this schema.
 | 
					
						
							|  |  |  | 	MediaType string `json:"mediaType,omitempty"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // github.com/docker/distribution/manifest/schema1/manifest.go
 | 
					
						
							| 
									
										
										
										
											2019-01-09 06:00:41 +08:00
										 |  |  | // V2S1FSLayer is a container struct for BlobSums defined in an image manifest
 | 
					
						
							| 
									
										
										
										
											2017-05-17 05:07:31 +08:00
										 |  |  | type V2S1FSLayer struct { | 
					
						
							|  |  |  | 	// BlobSum is the tarsum of the referenced filesystem image layer
 | 
					
						
							|  |  |  | 	BlobSum digest.Digest `json:"blobSum"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // github.com/docker/distribution/manifest/schema1/manifest.go
 | 
					
						
							| 
									
										
										
										
											2019-01-09 06:00:41 +08:00
										 |  |  | // V2S1History stores unstructured v1 compatibility information
 | 
					
						
							| 
									
										
										
										
											2017-05-17 05:07:31 +08:00
										 |  |  | type V2S1History struct { | 
					
						
							|  |  |  | 	// V1Compatibility is the raw v1 compatibility information
 | 
					
						
							|  |  |  | 	V1Compatibility string `json:"v1Compatibility"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // github.com/docker/distribution/manifest/schema1/manifest.go
 | 
					
						
							| 
									
										
										
										
											2019-01-09 06:00:41 +08:00
										 |  |  | // V2S1Manifest provides the base accessible fields for working with V2 image
 | 
					
						
							| 
									
										
										
										
											2017-05-17 05:07:31 +08:00
										 |  |  | // format in the registry.
 | 
					
						
							|  |  |  | type V2S1Manifest struct { | 
					
						
							|  |  |  | 	V2Versioned | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Name is the name of the image's repository
 | 
					
						
							|  |  |  | 	Name string `json:"name"` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Tag is the tag of the image specified by this manifest
 | 
					
						
							|  |  |  | 	Tag string `json:"tag"` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Architecture is the host architecture on which this image is intended to
 | 
					
						
							|  |  |  | 	// run
 | 
					
						
							|  |  |  | 	Architecture string `json:"architecture"` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// FSLayers is a list of filesystem layer blobSums contained in this image
 | 
					
						
							|  |  |  | 	FSLayers []V2S1FSLayer `json:"fsLayers"` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// History is a list of unstructured historical data for v1 compatibility
 | 
					
						
							|  |  |  | 	History []V2S1History `json:"history"` | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // github.com/docker/distribution/blobs.go
 | 
					
						
							| 
									
										
										
										
											2019-01-09 06:00:41 +08:00
										 |  |  | // V2S2Descriptor describes targeted content. Used in conjunction with a blob
 | 
					
						
							| 
									
										
										
										
											2017-05-17 05:07:31 +08:00
										 |  |  | // store, a descriptor can be used to fetch, store and target any kind of
 | 
					
						
							|  |  |  | // blob. The struct also describes the wire protocol format. Fields should
 | 
					
						
							|  |  |  | // only be added but never changed.
 | 
					
						
							|  |  |  | type V2S2Descriptor struct { | 
					
						
							|  |  |  | 	// MediaType describe the type of the content. All text based formats are
 | 
					
						
							|  |  |  | 	// encoded as utf-8.
 | 
					
						
							|  |  |  | 	MediaType string `json:"mediaType,omitempty"` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Size in bytes of content.
 | 
					
						
							|  |  |  | 	Size int64 `json:"size,omitempty"` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Digest uniquely identifies the content. A byte stream can be verified
 | 
					
						
							|  |  |  | 	// against against this digest.
 | 
					
						
							|  |  |  | 	Digest digest.Digest `json:"digest,omitempty"` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// URLs contains the source URLs of this content.
 | 
					
						
							|  |  |  | 	URLs []string `json:"urls,omitempty"` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// NOTE: Before adding a field here, please ensure that all
 | 
					
						
							|  |  |  | 	// other options have been exhausted. Much of the type relationships
 | 
					
						
							|  |  |  | 	// depend on the simplicity of this type.
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // github.com/docker/distribution/manifest/schema2/manifest.go
 | 
					
						
							| 
									
										
										
										
											2019-01-09 06:00:41 +08:00
										 |  |  | // V2S2Manifest defines a schema2 manifest.
 | 
					
						
							| 
									
										
										
										
											2017-05-17 05:07:31 +08:00
										 |  |  | type V2S2Manifest struct { | 
					
						
							|  |  |  | 	V2Versioned | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Config references the image configuration as a blob.
 | 
					
						
							|  |  |  | 	Config V2S2Descriptor `json:"config"` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Layers lists descriptors for the layers referenced by the
 | 
					
						
							|  |  |  | 	// configuration.
 | 
					
						
							|  |  |  | 	Layers []V2S2Descriptor `json:"layers"` | 
					
						
							|  |  |  | } |