Documentation
¶
Index ¶
- func NewClientFromEnv() (*docker.Client, error)
- type ClientExecutor
- func (e *ClientExecutor) Archive(src, dst string, allowDecompression, allowDownload bool, excludes []string) (io.Reader, io.Closer, error)
- func (e *ClientExecutor) Build(b *imagebuilder.Builder, node *parser.Node, from string) error
- func (e *ClientExecutor) Commit(b *imagebuilder.Builder) error
- func (e *ClientExecutor) Copy(excludes []string, copies ...imagebuilder.Copy) error
- func (e *ClientExecutor) CopyContainer(container *docker.Container, excludes []string, copies ...imagebuilder.Copy) error
- func (e *ClientExecutor) CreateScratchImage() (string, error)
- func (e *ClientExecutor) DefaultExcludes() error
- func (e *ClientExecutor) Execute(b *imagebuilder.Builder, node *parser.Node) error
- func (e *ClientExecutor) LoadImage(from string) (*docker.Image, error)
- func (e *ClientExecutor) PopulateTransientMounts(opts docker.CreateContainerOptions, transientMounts []Mount, ...) ([]string, error)
- func (e *ClientExecutor) Prepare(b *imagebuilder.Builder, node *parser.Node, from string) error
- func (e *ClientExecutor) Preserve(path string) error
- func (e *ClientExecutor) Release() []error
- func (e *ClientExecutor) Run(run imagebuilder.Run, config docker.Config) error
- func (e *ClientExecutor) UnrecognizedInstruction(step *imagebuilder.Step) error
- type ContainerVolumeTracker
- func (t *ContainerVolumeTracker) Add(path string)
- func (t *ContainerVolumeTracker) Empty() bool
- func (t *ContainerVolumeTracker) Invalidate(path string)
- func (t *ContainerVolumeTracker) Release() []error
- func (t *ContainerVolumeTracker) ReleasePath(path string)
- func (t *ContainerVolumeTracker) Restore(containerID string, client *docker.Client) error
- func (t *ContainerVolumeTracker) Save(containerID string, client *docker.Client) error
- type CopyInfo
- type Mount
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NewClientFromEnv ¶
NewClientFromEnv is exposed to simplify getting a client when vendoring this library.
Types ¶
type ClientExecutor ¶
type ClientExecutor struct {
// 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.
Directory 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) 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) 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) UnrecognizedInstruction ¶
func (e *ClientExecutor) UnrecognizedInstruction(step *imagebuilder.Step) error
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.