mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #18721 from tiborvass/remove-dependencies-from-builder
Remove image and daemon dependencies from builder
This commit is contained in:
commit
64d70de0a2
10 changed files with 75 additions and 49 deletions
|
@ -32,7 +32,7 @@ type copyBackend interface {
|
|||
|
||||
// stateBackend includes functions to implement to provide container state lifecycle functionality.
|
||||
type stateBackend interface {
|
||||
ContainerCreate(params *daemon.ContainerCreateConfig) (types.ContainerCreateResponse, error)
|
||||
ContainerCreate(types.ContainerCreateConfig) (types.ContainerCreateResponse, error)
|
||||
ContainerKill(name string, sig uint64) error
|
||||
ContainerPause(name string) error
|
||||
ContainerRename(oldName, newName string) error
|
||||
|
|
|
@ -339,7 +339,7 @@ func (s *containerRouter) postContainersCreate(ctx context.Context, w http.Respo
|
|||
version := httputils.VersionFromContext(ctx)
|
||||
adjustCPUShares := version.LessThan("1.19")
|
||||
|
||||
ccr, err := s.backend.ContainerCreate(&daemon.ContainerCreateConfig{
|
||||
ccr, err := s.backend.ContainerCreate(types.ContainerCreateConfig{
|
||||
Name: name,
|
||||
Config: config,
|
||||
HostConfig: hostConfig,
|
||||
|
|
|
@ -8,6 +8,14 @@ import (
|
|||
"github.com/docker/docker/runconfig"
|
||||
)
|
||||
|
||||
// ContainerCreateConfig is the parameter set to ContainerCreate()
|
||||
type ContainerCreateConfig struct {
|
||||
Name string
|
||||
Config *runconfig.Config
|
||||
HostConfig *runconfig.HostConfig
|
||||
AdjustCPUShares bool
|
||||
}
|
||||
|
||||
// ContainerRmConfig holds arguments for the container remove
|
||||
// operation. This struct is used to tell the backend what operations
|
||||
// to perform.
|
||||
|
|
|
@ -10,8 +10,6 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/daemon"
|
||||
"github.com/docker/docker/image"
|
||||
"github.com/docker/docker/runconfig"
|
||||
)
|
||||
|
||||
|
@ -112,13 +110,13 @@ type Backend interface {
|
|||
// TODO: use digest reference instead of name
|
||||
|
||||
// GetImage looks up a Docker image referenced by `name`.
|
||||
GetImage(name string) (*image.Image, error)
|
||||
GetImage(name string) (Image, error)
|
||||
// Pull tells Docker to pull image referenced by `name`.
|
||||
Pull(name string) (*image.Image, error)
|
||||
// ContainerWsAttachWithLogs attaches to container.
|
||||
ContainerWsAttachWithLogs(name string, cfg *daemon.ContainerWsAttachWithLogsConfig) error
|
||||
Pull(name string) (Image, error)
|
||||
// ContainerAttach attaches to container.
|
||||
ContainerAttach(cID string, stdin io.ReadCloser, stdout, stderr io.Writer, stream bool) error
|
||||
// ContainerCreate creates a new Docker container and returns potential warnings
|
||||
ContainerCreate(params *daemon.ContainerCreateConfig) (types.ContainerCreateResponse, error)
|
||||
ContainerCreate(types.ContainerCreateConfig) (types.ContainerCreateResponse, error)
|
||||
// ContainerRm removes a container specified by `id`.
|
||||
ContainerRm(name string, config *types.ContainerRmConfig) error
|
||||
// Commit creates a new Docker image from an existing Docker container.
|
||||
|
|
|
@ -18,8 +18,8 @@ import (
|
|||
"strings"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/docker/docker/builder"
|
||||
derr "github.com/docker/docker/errors"
|
||||
"github.com/docker/docker/image"
|
||||
flag "github.com/docker/docker/pkg/mflag"
|
||||
"github.com/docker/docker/pkg/nat"
|
||||
"github.com/docker/docker/pkg/signal"
|
||||
|
@ -210,7 +210,7 @@ func from(b *Builder, args []string, attributes map[string]bool, original string
|
|||
}
|
||||
|
||||
var (
|
||||
image *image.Image
|
||||
image builder.Image
|
||||
err error
|
||||
)
|
||||
// TODO: don't use `name`, instead resolve it to a digest
|
||||
|
|
|
@ -23,8 +23,6 @@ import (
|
|||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/builder"
|
||||
"github.com/docker/docker/builder/dockerfile/parser"
|
||||
"github.com/docker/docker/daemon"
|
||||
"github.com/docker/docker/image"
|
||||
"github.com/docker/docker/pkg/archive"
|
||||
"github.com/docker/docker/pkg/httputils"
|
||||
"github.com/docker/docker/pkg/ioutils"
|
||||
|
@ -185,7 +183,7 @@ func (b *Builder) runContextCommand(args []string, allowRemote bool, allowLocalD
|
|||
return nil
|
||||
}
|
||||
|
||||
container, err := b.docker.ContainerCreate(&daemon.ContainerCreateConfig{Config: b.runConfig})
|
||||
container, err := b.docker.ContainerCreate(types.ContainerCreateConfig{Config: b.runConfig})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -395,11 +393,11 @@ func containsWildcards(name string) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func (b *Builder) processImageFrom(img *image.Image) error {
|
||||
b.image = img.ID().String()
|
||||
func (b *Builder) processImageFrom(img builder.Image) error {
|
||||
b.image = img.ID()
|
||||
|
||||
if img.Config != nil {
|
||||
b.runConfig = img.Config
|
||||
b.runConfig = img.Config()
|
||||
}
|
||||
|
||||
// The default path will be blank on Windows (set by HCS)
|
||||
|
@ -500,7 +498,7 @@ func (b *Builder) create() (string, error) {
|
|||
config := *b.runConfig
|
||||
|
||||
// Create the container
|
||||
c, err := b.docker.ContainerCreate(&daemon.ContainerCreateConfig{
|
||||
c, err := b.docker.ContainerCreate(types.ContainerCreateConfig{
|
||||
Config: b.runConfig,
|
||||
HostConfig: hostConfig,
|
||||
})
|
||||
|
@ -528,11 +526,7 @@ func (b *Builder) run(cID string) (err error) {
|
|||
errCh := make(chan error)
|
||||
if b.Verbose {
|
||||
go func() {
|
||||
errCh <- b.docker.ContainerWsAttachWithLogs(cID, &daemon.ContainerWsAttachWithLogsConfig{
|
||||
OutStream: b.Stdout,
|
||||
ErrStream: b.Stderr,
|
||||
Stream: true,
|
||||
})
|
||||
errCh <- b.docker.ContainerAttach(cID, nil, b.Stdout, b.Stderr, true)
|
||||
}()
|
||||
}
|
||||
|
||||
|
|
9
builder/image.go
Normal file
9
builder/image.go
Normal file
|
@ -0,0 +1,9 @@
|
|||
package builder
|
||||
|
||||
import "github.com/docker/docker/runconfig"
|
||||
|
||||
// Image represents a Docker image used by the builder.
|
||||
type Image interface {
|
||||
ID() string
|
||||
Config() *runconfig.Config
|
||||
}
|
|
@ -13,23 +13,15 @@ import (
|
|||
"github.com/opencontainers/runc/libcontainer/label"
|
||||
)
|
||||
|
||||
// ContainerCreateConfig is the parameter set to ContainerCreate()
|
||||
type ContainerCreateConfig struct {
|
||||
Name string
|
||||
Config *runconfig.Config
|
||||
HostConfig *runconfig.HostConfig
|
||||
AdjustCPUShares bool
|
||||
}
|
||||
|
||||
// ContainerCreate takes configs and creates a container.
|
||||
func (daemon *Daemon) ContainerCreate(params *ContainerCreateConfig) (types.ContainerCreateResponse, error) {
|
||||
// ContainerCreate creates a container.
|
||||
func (daemon *Daemon) ContainerCreate(params types.ContainerCreateConfig) (types.ContainerCreateResponse, error) {
|
||||
if params.Config == nil {
|
||||
return types.ContainerCreateResponse{}, derr.ErrorCodeEmptyConfig
|
||||
}
|
||||
|
||||
warnings, err := daemon.verifyContainerSettings(params.HostConfig, params.Config)
|
||||
if err != nil {
|
||||
return types.ContainerCreateResponse{ID: "", Warnings: warnings}, err
|
||||
return types.ContainerCreateResponse{Warnings: warnings}, err
|
||||
}
|
||||
|
||||
if params.HostConfig == nil {
|
||||
|
@ -37,24 +29,25 @@ func (daemon *Daemon) ContainerCreate(params *ContainerCreateConfig) (types.Cont
|
|||
}
|
||||
err = daemon.adaptContainerSettings(params.HostConfig, params.AdjustCPUShares)
|
||||
if err != nil {
|
||||
return types.ContainerCreateResponse{ID: "", Warnings: warnings}, err
|
||||
return types.ContainerCreateResponse{Warnings: warnings}, err
|
||||
}
|
||||
|
||||
container, err := daemon.create(params)
|
||||
if err != nil {
|
||||
return types.ContainerCreateResponse{ID: "", Warnings: warnings}, daemon.imageNotExistToErrcode(err)
|
||||
return types.ContainerCreateResponse{Warnings: warnings}, daemon.imageNotExistToErrcode(err)
|
||||
}
|
||||
|
||||
return types.ContainerCreateResponse{ID: container.ID, Warnings: warnings}, nil
|
||||
}
|
||||
|
||||
// Create creates a new container from the given configuration with a given name.
|
||||
func (daemon *Daemon) create(params *ContainerCreateConfig) (retC *container.Container, retErr error) {
|
||||
func (daemon *Daemon) create(params types.ContainerCreateConfig) (*container.Container, error) {
|
||||
var (
|
||||
container *container.Container
|
||||
img *image.Image
|
||||
imgID image.ID
|
||||
err error
|
||||
retErr error
|
||||
)
|
||||
|
||||
if params.Config.Image != "" {
|
||||
|
|
|
@ -36,7 +36,7 @@ type Docker struct {
|
|||
var _ builder.Backend = Docker{}
|
||||
|
||||
// Pull tells Docker to pull image referenced by `name`.
|
||||
func (d Docker) Pull(name string) (*image.Image, error) {
|
||||
func (d Docker) Pull(name string) (builder.Image, error) {
|
||||
ref, err := reference.ParseNamed(name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -61,8 +61,16 @@ func (d Docker) Pull(name string) (*image.Image, error) {
|
|||
if err := d.Daemon.PullImage(ref, nil, pullRegistryAuth, ioutils.NopWriteCloser(d.OutOld)); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return d.GetImage(name)
|
||||
}
|
||||
|
||||
return d.Daemon.GetImage(name)
|
||||
// GetImage looks up a Docker image referenced by `name`.
|
||||
func (d Docker) GetImage(name string) (builder.Image, error) {
|
||||
img, err := d.Daemon.GetImage(name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return imgWrap{img}, nil
|
||||
}
|
||||
|
||||
// ContainerUpdateCmd updates Path and Args for the container with ID cID.
|
||||
|
@ -76,16 +84,14 @@ func (d Docker) ContainerUpdateCmd(cID string, cmd []string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Retain retains an image avoiding it to be removed or overwritten until a corresponding Release() call.
|
||||
func (d Docker) Retain(sessionID, imgID string) {
|
||||
// FIXME: This will be solved with tags in client-side builder
|
||||
//d.Daemon.Graph().Retain(sessionID, imgID)
|
||||
}
|
||||
|
||||
// Release releases a list of images that were retained for the time of a build.
|
||||
func (d Docker) Release(sessionID string, activeImages []string) {
|
||||
// FIXME: This will be solved with tags in client-side builder
|
||||
//d.Daemon.Graph().Release(sessionID, activeImages...)
|
||||
// ContainerAttach attaches streams to the container cID. If stream is true, it streams the output.
|
||||
func (d Docker) ContainerAttach(cID string, stdin io.ReadCloser, stdout, stderr io.Writer, stream bool) error {
|
||||
return d.Daemon.ContainerWsAttachWithLogs(cID, &daemon.ContainerWsAttachWithLogsConfig{
|
||||
InStream: stdin,
|
||||
OutStream: stdout,
|
||||
ErrStream: stderr,
|
||||
Stream: stream,
|
||||
})
|
||||
}
|
||||
|
||||
// BuilderCopy copies/extracts a source FileInfo to a destination path inside a container
|
||||
|
|
18
daemon/daemonbuilder/image.go
Normal file
18
daemon/daemonbuilder/image.go
Normal file
|
@ -0,0 +1,18 @@
|
|||
package daemonbuilder
|
||||
|
||||
import (
|
||||
"github.com/docker/docker/image"
|
||||
"github.com/docker/docker/runconfig"
|
||||
)
|
||||
|
||||
type imgWrap struct {
|
||||
inner *image.Image
|
||||
}
|
||||
|
||||
func (img imgWrap) ID() string {
|
||||
return string(img.inner.ID())
|
||||
}
|
||||
|
||||
func (img imgWrap) Config() *runconfig.Config {
|
||||
return img.inner.Config
|
||||
}
|
Loading…
Reference in a new issue