builder

package
v1.4.2-0...-33d4191 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 24, 2015 License: Apache-2.0 Imports: 20 Imported by: 0

Documentation

Overview

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.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Builder

type Builder interface {
	// Build builds a Docker image referenced by an imageID string.
	//
	// Note: Tagging an image should not be done by a Builder, it should instead be done
	// by the caller.
	//
	// TODO: make this return a reference instead of string
	Build() (imageID string)
}

Builder abstracts a Docker builder whose only purpose is to build a Docker image referenced by an imageID.

type Context

type Context interface {
	// 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
	// Stat returns an entry corresponding to path if any.
	// It is recommended to return an error if path was not found.
	Stat(path string) (FileInfo, error)
	// Open opens path from the context and returns a readable stream of it.
	Open(path string) (io.ReadCloser, error)
	// Walk walks the tree of the context with the function passed to it.
	Walk(root string, walkFn WalkFunc) error
}

Context represents a file system tree.

type Docker

type Docker interface {

	// LookupImage looks up a Docker image referenced by `name`.
	LookupImage(name string) (*image.Image, error)
	// Pull tells Docker to pull image referenced by `name`.
	Pull(name string) (*image.Image, error)

	// Container looks up a Docker container referenced by `id`.
	Container(id string) (*daemon.Container, error)
	// Create creates a new Docker container and returns potential warnings
	// TODO: put warnings in the error
	Create(*runconfig.Config, *runconfig.HostConfig) (*daemon.Container, []string, error)
	// Remove removes a container specified by `id`.
	Remove(id string, cfg *daemon.ContainerRmConfig) error
	// Commit creates a new Docker image from an existing Docker container.
	Commit(*daemon.Container, *daemon.ContainerCommitConfig) (*image.Image, error)
	// Copy copies/extracts a source FileInfo to a destination path inside a container
	// specified by a container object.
	// TODO: make an Extract method instead of passing `decompress`
	// TODO: do not pass a FileInfo, instead refactor the archive package to export a Walk function that can be used
	// with Context.Walk
	Copy(c *daemon.Container, destPath string, src FileInfo, decompress bool) error

	// Retain retains an image avoiding it to be removed or overwritten until a corresponding Release() call.
	// TODO: remove
	Retain(sessionID, imgID string)
	// Release releases a list of images that were retained for the time of a build.
	// TODO: remove
	Release(sessionID string, activeImages []string)
}

Docker abstracts calls to a Docker Daemon.

type DockerIgnoreContext

type DockerIgnoreContext struct {
	ModifiableContext
}

DockerIgnoreContext wraps a ModifiableContext to add a method for handling the .dockerignore file at the root of the context.

func (DockerIgnoreContext) Process

func (c DockerIgnoreContext) Process(filesToRemove []string) error

Process reads the .dockerignore file at the root of the embedded context. If .dockerignore does not exist in the context, then nil is returned.

It can take a list of files to be removed after .dockerignore is removed. This is used for server-side implementations of builders that need to send the .dockerignore file as well as the special files specified in filesToRemove, but expect them to be excluded from the context after they were processed.

For example, server-side Dockerfile builders are expected to pass in the name of the Dockerfile to be removed after it was parsed.

TODO: Don't require a ModifiableContext (use Context instead) and don't remove files, instead handle a list of files to be excluded from the context.

type FileInfo

type FileInfo interface {
	os.FileInfo
	Path() string
}

FileInfo extends os.FileInfo to allow retrieving an absolute path to the file. TODO: remove this interface once pkg/archive exposes a walk function that Context can use.

type Hashed

type Hashed interface {
	// Hash returns the hash of a file.
	Hash() string
	SetHash(string)
}

Hashed defines an extra method intended for implementations of os.FileInfo.

type HashedFileInfo

type HashedFileInfo struct {
	FileInfo
	// FileHash represents the hash of a file.
	FileHash string
}

HashedFileInfo is a convenient struct that augments FileInfo with a field.

func (HashedFileInfo) Hash

func (fi HashedFileInfo) Hash() string

Hash returns the hash of a file.

func (*HashedFileInfo) SetHash

func (fi *HashedFileInfo) SetHash(h string)

SetHash sets the hash of a file.

type ImageCache

type ImageCache interface {
	// GetCachedImage returns a reference to a cached image whose parent equals `parent`
	// and runconfig equals `cfg`. A cache miss is expected to return an empty ID and a nil error.
	GetCachedImage(parentID string, cfg *runconfig.Config) (imageID string, err error)
}

ImageCache abstracts an image cache store. (parent image, child runconfig) -> child image

type ModifiableContext

type ModifiableContext interface {
	Context
	// Remove deletes the entry specified by `path`.
	// It is usual for directory entries to delete all its subentries.
	Remove(path string) error
}

ModifiableContext represents a modifiable Context. TODO: remove this interface once we can get rid of Remove()

func MakeGitContext

func MakeGitContext(gitURL string) (ModifiableContext, error)

MakeGitContext returns a Context from gitURL that is cloned in a temporary directory.

func MakeRemoteContext

func MakeRemoteContext(remoteURL string, contentTypeHandlers map[string]func(io.ReadCloser) (io.ReadCloser, error)) (ModifiableContext, error)

MakeRemoteContext downloads a context from remoteURL and returns it.

If contentTypeHandlers is non-nil, then the Content-Type header is read along with a maximum of maxPreambleLength bytes from the body to help detecting the MIME type. Look at acceptableRemoteMIME for more details.

If a match is found, then the body is sent to the contentType handler and a (potentially compressed) tar stream is expected to be returned. If no match is found, it is assumed the body is a tar stream (compressed or not). In either case, an (assumed) tar stream is passed to MakeTarSumContext whose result is returned.

func MakeTarSumContext

func MakeTarSumContext(tarStream io.Reader) (ModifiableContext, error)

MakeTarSumContext returns a build Context from a tar stream.

It extracts the tar stream to a temporary folder that is deleted as soon as the Context is closed. As the extraction happens, a tarsum is calculated for every file, and the set of all those sums then becomes the source of truth for all operations on this Context.

Closing tarStream has to be done by the caller.

type PathFileInfo

type PathFileInfo struct {
	os.FileInfo
	// FilePath holds the absolute path to the file.
	FilePath string
}

PathFileInfo is a convenience struct that implements the FileInfo interface.

func (PathFileInfo) Path

func (fi PathFileInfo) Path() string

Path returns the absolute path to the file.

type WalkFunc

type WalkFunc func(path string, fi FileInfo, err error) error

WalkFunc is the type of the function called for each file or directory visited by Context.Walk().

Directories

Path Synopsis
Package dockerfile is the evaluation step in the Dockerfile parse/evaluate pipeline.
Package dockerfile is the evaluation step in the Dockerfile parse/evaluate pipeline.
command
Package command contains the set of Dockerfile commands.
Package command contains the set of Dockerfile commands.
parser
Package parser implements a parser and parse tree dumper for Dockerfiles.
Package parser implements a parser and parse tree dumper for Dockerfiles.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL