dockerclient

package
v1.1.1 Latest Latest
Warning

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

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

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func FilterArchive

func FilterArchive(r io.Reader, w io.Writer, fn TransformFileFunc) error

FilterArchive transforms the provided input archive to a new archive, giving the fn a chance to transform arbitrary files.

func NewClientFromEnv

func NewClientFromEnv() (*docker.Client, error)

NewClientFromEnv is exposed to simplify getting a client when vendoring this library.

func NewLazyArchive

func NewLazyArchive(fn CreateFileFunc) io.ReadCloser

func NoAuthFn

func NoAuthFn(string) ([]dockertypes.AuthConfig, bool)

NotAuthFn can be used for AuthFn when no authentication is required in Docker.

Types

type ClientExecutor

type ClientExecutor struct {
	// Name is an optional name for this executor.
	Name string
	// Named is a map of other named executors.
	Named map[string]*ClientExecutor

	// TempDir is the temporary directory to use for storing file
	// contents. If unset, the default temporary directory for the
	// system will be used.
	TempDir string
	// Client is a client to a Docker daemon.
	Client *docker.Client
	// Directory is the context directory to build from, will use
	// the current working directory if not set. Ignored if
	// ContextArchive is set.
	Directory string
	// A compressed or uncompressed tar archive that should be used
	// as the build context.
	ContextArchive string
	// Excludes are a list of file patterns that should be excluded
	// from the context. Will be set to the contents of the
	// .dockerignore file if nil.
	Excludes []string
	// Tag is an optional value to tag the resulting built image.
	Tag string
	// Additional tags is an optional array of other tags to apply
	// to the image.
	AdditionalTags []string
	// AllowPull when set will pull images that are not present on
	// the daemon.
	AllowPull bool
	// IgnoreUnrecognizedInstructions, if true, allows instructions
	// that are not yet supported to be ignored (will be printed)
	IgnoreUnrecognizedInstructions bool
	// StrictVolumeOwnership if true will fail the build if a RUN
	// command follows a VOLUME command, since this client cannot
	// guarantee that the restored contents of the VOLUME directory
	// will have the right permissions.
	StrictVolumeOwnership bool
	// TransientMounts are a set of mounts from outside the build
	// to the inside that will not be part of the final image. Any
	// content created inside the mount's destinationPath will be
	// omitted from the final image.
	TransientMounts []Mount

	// The path within the container to perform the transient mount.
	ContainerTransientMount string

	// The streams used for canonical output.
	Out, ErrOut io.Writer

	// Container is optional and can be set to a container to use as
	// the execution environment for a build.
	Container *docker.Container
	// Command, if set, will be used as the entrypoint for the new
	// container. This is ignored if Container is set.
	Command []string
	// Image is optional and may be set to control which image is used
	// as a base for this build. Otherwise the FROM value from the
	// Dockerfile is read (will be pulled if not locally present).
	Image *docker.Image

	// AuthFn will handle authenticating any docker pulls if Image
	// is set to nil.
	AuthFn func(name string) ([]dockertypes.AuthConfig, bool)
	// HostConfig is used to start the container (if necessary).
	HostConfig *docker.HostConfig
	// LogFn is an optional command to log information to the end user
	LogFn func(format string, args ...interface{})

	// Deferred is a list of operations that must be cleaned up at
	// the end of execution. Use Release() to handle these.
	Deferred []func() error

	// Volumes handles saving and restoring volumes after RUN
	// commands are executed.
	Volumes *ContainerVolumeTracker
}

ClientExecutor can run Docker builds from a Docker client.

func NewClientExecutor

func NewClientExecutor(client *docker.Client) *ClientExecutor

NewClientExecutor creates a client executor.

func (*ClientExecutor) Archive

func (e *ClientExecutor) Archive(fromFS bool, src, dst string, allowDownload bool, excludes []string) (io.Reader, io.Closer, error)

TODO: this does not support decompressing nested archives for ADD (when the source is a compressed file)

func (*ClientExecutor) Build

func (e *ClientExecutor) Build(b *imagebuilder.Builder, node *parser.Node, from string) error

Build is a helper method to perform a Docker build against the provided Docker client. It will load the image if not specified, create a container if one does not already exist, and start a container if the Dockerfile contains RUN commands. It will cleanup any containers it creates directly, and set the e.Image.ID field to the generated image.

func (*ClientExecutor) Commit

func (e *ClientExecutor) Commit(b *imagebuilder.Builder) error

Commit saves the completed build as an image with the provided tag. It will stop the container, commit the image, and then remove the container.

func (*ClientExecutor) Copy

func (e *ClientExecutor) Copy(excludes []string, copies ...imagebuilder.Copy) error

Copy implements the executor copy function.

func (*ClientExecutor) CopyContainer

func (e *ClientExecutor) CopyContainer(container *docker.Container, excludes []string, copies ...imagebuilder.Copy) error

CopyContainer copies the provided content into a destination container.

func (*ClientExecutor) CreateScratchImage

func (e *ClientExecutor) CreateScratchImage() (string, error)

CreateScratchImage creates a new, zero byte layer that is identical to "scratch" except that the resulting image will have two layers.

func (*ClientExecutor) DefaultExcludes

func (e *ClientExecutor) DefaultExcludes() error

func (*ClientExecutor) EnsureContainerPath

func (e *ClientExecutor) EnsureContainerPath(path string) error

func (*ClientExecutor) Execute

func (e *ClientExecutor) Execute(b *imagebuilder.Builder, node *parser.Node) error

Execute performs all of the provided steps against the initialized container. May be invoked multiple times for a given container.

func (*ClientExecutor) LoadImage

func (e *ClientExecutor) LoadImage(from string) (*docker.Image, error)

LoadImage checks the client for an image matching from. If not found, attempts to pull the image and then tries to inspect again.

func (*ClientExecutor) PopulateTransientMounts

func (e *ClientExecutor) PopulateTransientMounts(opts docker.CreateContainerOptions, transientMounts []Mount, sharedMount string) ([]string, error)

func (*ClientExecutor) Prepare

func (e *ClientExecutor) Prepare(b *imagebuilder.Builder, node *parser.Node, from string) error

func (*ClientExecutor) Preserve

func (e *ClientExecutor) Preserve(path string) error

func (*ClientExecutor) Release

func (e *ClientExecutor) Release() []error

Release deletes any items started by this executor.

func (*ClientExecutor) Run

func (e *ClientExecutor) Run(run imagebuilder.Run, config docker.Config) error

Run executes a single Run command against the current container using exec(). Since exec does not allow ENV or WORKINGDIR to be set, we force the execution of the user command into a shell and perform those operations before. Since RUN requires /bin/sh, we can use both 'cd' and 'export'.

func (*ClientExecutor) Stages

Stages executes all of the provided stages, starting from the base image. It returns the executor of the last stage or an error if a stage fails.

func (*ClientExecutor) UnrecognizedInstruction

func (e *ClientExecutor) UnrecognizedInstruction(step *imagebuilder.Step) error

func (*ClientExecutor) WithName

func (e *ClientExecutor) WithName(name string) *ClientExecutor

WithName creates a new child executor that will be used whenever a COPY statement uses --from=NAME.

type ContainerVolumeTracker

type ContainerVolumeTracker struct {
	// contains filtered or unexported fields
}

ContainerVolumeTracker manages tracking archives of specific paths inside a container.

func NewContainerVolumeTracker

func NewContainerVolumeTracker() *ContainerVolumeTracker

func (*ContainerVolumeTracker) Add

func (t *ContainerVolumeTracker) Add(path string)

Add tracks path unless it already is being tracked.

func (*ContainerVolumeTracker) Empty

func (t *ContainerVolumeTracker) Empty() bool

Empty returns true if the tracker is not watching any paths

func (*ContainerVolumeTracker) Invalidate

func (t *ContainerVolumeTracker) Invalidate(path string)

func (*ContainerVolumeTracker) Release

func (t *ContainerVolumeTracker) Release() []error

Release removes any stored snapshots

func (*ContainerVolumeTracker) ReleasePath

func (t *ContainerVolumeTracker) ReleasePath(path string)

func (*ContainerVolumeTracker) Restore

func (t *ContainerVolumeTracker) Restore(containerID string, client *docker.Client) error

Restore ensures the paths managed by t exactly match the container. This requires running exec as a user that can delete contents from the container. It will return an error if any client operation fails.

func (*ContainerVolumeTracker) Save

func (t *ContainerVolumeTracker) Save(containerID, tempDir string, client *docker.Client) error

Save ensures that all paths tracked underneath this container are archived or returns an error.

type CopyInfo

type CopyInfo struct {
	os.FileInfo
	Path       string
	Decompress bool
	FromDir    bool
}

func CalcCopyInfo

func CalcCopyInfo(origPath, rootPath string, allowWildcards bool) ([]CopyInfo, error)

CalcCopyInfo identifies the source files selected by a Dockerfile ADD or COPY instruction.

func DownloadURL

func DownloadURL(src, dst, tempDir string) ([]CopyInfo, string, error)

type CreateFileFunc

type CreateFileFunc func() (*tar.Header, io.ReadCloser, bool, error)

type DirectoryCheck

type DirectoryCheck interface {
	IsDirectory(path string) (bool, error)
}

type Mount

type Mount struct {
	SourcePath      string
	DestinationPath string
}

Mount represents a binding between the current system and the destination client

type TransformFileFunc

type TransformFileFunc func(h *tar.Header, r io.Reader) (data []byte, update bool, skip bool, err error)

TransformFileFunc is given a chance to transform an arbitrary input file.

Jump to

Keyboard shortcuts

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