builder: remove dependency on image

Signed-off-by: Tibor Vass <tibor@docker.com>
This commit is contained in:
Tibor Vass 2015-12-16 17:01:36 +01:00
parent 93c0de2af4
commit 9be1ec60d4
6 changed files with 44 additions and 23 deletions

View file

@ -11,7 +11,6 @@ import (
"github.com/docker/docker/api/types"
"github.com/docker/docker/daemon"
"github.com/docker/docker/image"
"github.com/docker/docker/runconfig"
)
@ -112,9 +111,9 @@ 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)
Pull(name string) (Image, error)
// ContainerWsAttachWithLogs attaches to container.
ContainerWsAttachWithLogs(name string, cfg *daemon.ContainerWsAttachWithLogsConfig) error
// ContainerCreate creates a new Docker container and returns potential warnings

View file

@ -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

View file

@ -24,7 +24,6 @@ import (
"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"
@ -403,11 +402,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)

9
builder/image.go Normal file
View 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
}

View file

@ -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
@ -69,8 +69,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.
@ -84,18 +92,6 @@ 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...)
}
// BuilderCopy copies/extracts a source FileInfo to a destination path inside a container
// specified by a container object.
// TODO: make sure callers don't unnecessarily convert destPath with filepath.FromSlash (Copy does it already).

View 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
}