builder/builder.go
e0ef11a4
 // Package builder defines interfaces for any Docker builder to implement.
 //
 // Historically, only server-side Dockerfile interpreters existed.
 // This package allows for other implementations of Docker builders.
 package builder
 
 import (
 	"io"
cfdf84d5
 
91e197d6
 	"github.com/docker/docker/api/types"
93e02efa
 	"github.com/docker/docker/api/types/backend"
91e197d6
 	"github.com/docker/docker/api/types/container"
cfdf84d5
 	containerpkg "github.com/docker/docker/container"
bd5f92d2
 	"github.com/docker/docker/layer"
7a7357da
 	"github.com/docker/docker/pkg/containerfs"
19f3b071
 	"golang.org/x/net/context"
e0ef11a4
 )
 
312f5e43
 const (
 	// DefaultDockerfileName is the Default filename with Docker commands, read by docker build
 	DefaultDockerfileName string = "Dockerfile"
 )
 
d1faf3df
 // Source defines a location that can be used as a source for the ADD/COPY
 // instructions in the builder.
 type Source interface {
 	// Root returns root path for accessing source
7a7357da
 	Root() containerfs.ContainerFS
e0ef11a4
 	// Close allows to signal that the filesystem tree won't be used anymore.
 	// For Context implementations using a temporary directory, it is recommended to
 	// delete the temporary directory in Close().
 	Close() error
d1faf3df
 	// Hash returns a checksum for a file
 	Hash(path string) (string, error)
e0ef11a4
 }
 
c70f8b3c
 // Backend abstracts calls to a Docker Daemon.
 type Backend interface {
6c28e8ed
 	ImageBackend
19f3b071
 	ExecBackend
e0ef11a4
 
 	// Commit creates a new Docker image from an existing Docker container.
93e02efa
 	Commit(string, *backend.ContainerCommitConfig) (string, error)
b83076bf
 	// ContainerCreateWorkdir creates the workdir
286ab6d6
 	ContainerCreateWorkdir(containerID string) error
c70f8b3c
 
ce8e529e
 	CreateImage(config []byte, parent string) (Image, error)
19f3b071
 
 	ImageCacheBuilder
e0ef11a4
 }
 
6c28e8ed
 // ImageBackend are the interface methods required from an image component
 type ImageBackend interface {
 	GetImageAndReleasableLayer(ctx context.Context, refOrID string, opts backend.GetImageAndLayerOptions) (Image, ReleaseableLayer, error)
 }
 
19f3b071
 // ExecBackend contains the interface methods required for executing containers
 type ExecBackend interface {
 	// ContainerAttachRaw attaches to container.
 	ContainerAttachRaw(cID string, stdin io.ReadCloser, stdout, stderr io.Writer, stream bool, attached chan struct{}) error
 	// ContainerCreate creates a new Docker container and returns potential warnings
 	ContainerCreate(config types.ContainerCreateConfig) (container.ContainerCreateCreatedBody, error)
 	// ContainerRm removes a container specified by `id`.
 	ContainerRm(name string, config *types.ContainerRmConfig) error
 	// ContainerKill stops the container execution abruptly.
 	ContainerKill(containerID string, sig uint64) error
 	// ContainerStart starts a new container
 	ContainerStart(containerID string, hostConfig *container.HostConfig, checkpoint string, checkpointDir string) error
 	// ContainerWait stops processing until the given container is stopped.
 	ContainerWait(ctx context.Context, name string, condition containerpkg.WaitCondition) (<-chan containerpkg.StateStatus, error)
 }
 
0296797f
 // Result is the output produced by a Builder
 type Result struct {
 	ImageID   string
 	FromImage Image
 }
 
690882c2
 // ImageCacheBuilder represents a generator for stateful image cache.
 type ImageCacheBuilder interface {
 	// MakeImageCache creates a stateful image cache.
ce8e529e
 	MakeImageCache(cacheFrom []string) ImageCache
690882c2
 }
 
 // ImageCache abstracts an image cache.
e0ef11a4
 // (parent image, child runconfig) -> child image
 type ImageCache interface {
ee8a3eee
 	// GetCache returns a reference to a cached image whose parent equals `parent`
e0ef11a4
 	// and runconfig equals `cfg`. A cache miss is expected to return an empty ID and a nil error.
690882c2
 	GetCache(parentID string, cfg *container.Config) (imageID string, err error)
e0ef11a4
 }
b3bc7b28
 
 // Image represents a Docker image used by the builder.
 type Image interface {
 	ImageID() string
 	RunConfig() *container.Config
bd5f92d2
 	MarshalJSON() ([]byte, error)
0380fbff
 	OperatingSystem() string
b3bc7b28
 }
 
 // ReleaseableLayer is an image layer that can be mounted and released
 type ReleaseableLayer interface {
 	Release() error
7a7357da
 	Mount() (containerfs.ContainerFS, error)
afd305c4
 	Commit() (ReleaseableLayer, error)
bd5f92d2
 	DiffID() layer.DiffID
b3bc7b28
 }