Skip to content
This repository was archived by the owner on Feb 8, 2021. It is now read-only.

Commit 64d70de

Browse files
committed
Merge pull request #18721 from tiborvass/remove-dependencies-from-builder
Remove image and daemon dependencies from builder
2 parents 1ca6690 + b0d9476 commit 64d70de

File tree

10 files changed

+75
-49
lines changed

10 files changed

+75
-49
lines changed

api/server/router/container/backend.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ type copyBackend interface {
3232

3333
// stateBackend includes functions to implement to provide container state lifecycle functionality.
3434
type stateBackend interface {
35-
ContainerCreate(params *daemon.ContainerCreateConfig) (types.ContainerCreateResponse, error)
35+
ContainerCreate(types.ContainerCreateConfig) (types.ContainerCreateResponse, error)
3636
ContainerKill(name string, sig uint64) error
3737
ContainerPause(name string) error
3838
ContainerRename(oldName, newName string) error

api/server/router/container/container_routes.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ func (s *containerRouter) postContainersCreate(ctx context.Context, w http.Respo
339339
version := httputils.VersionFromContext(ctx)
340340
adjustCPUShares := version.LessThan("1.19")
341341

342-
ccr, err := s.backend.ContainerCreate(&daemon.ContainerCreateConfig{
342+
ccr, err := s.backend.ContainerCreate(types.ContainerCreateConfig{
343343
Name: name,
344344
Config: config,
345345
HostConfig: hostConfig,

api/types/configs.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@ import (
88
"github.com/docker/docker/runconfig"
99
)
1010

11+
// ContainerCreateConfig is the parameter set to ContainerCreate()
12+
type ContainerCreateConfig struct {
13+
Name string
14+
Config *runconfig.Config
15+
HostConfig *runconfig.HostConfig
16+
AdjustCPUShares bool
17+
}
18+
1119
// ContainerRmConfig holds arguments for the container remove
1220
// operation. This struct is used to tell the backend what operations
1321
// to perform.

builder/builder.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import (
1010
"time"
1111

1212
"github.com/docker/docker/api/types"
13-
"github.com/docker/docker/daemon"
14-
"github.com/docker/docker/image"
1513
"github.com/docker/docker/runconfig"
1614
)
1715

@@ -112,13 +110,13 @@ type Backend interface {
112110
// TODO: use digest reference instead of name
113111

114112
// GetImage looks up a Docker image referenced by `name`.
115-
GetImage(name string) (*image.Image, error)
113+
GetImage(name string) (Image, error)
116114
// Pull tells Docker to pull image referenced by `name`.
117-
Pull(name string) (*image.Image, error)
118-
// ContainerWsAttachWithLogs attaches to container.
119-
ContainerWsAttachWithLogs(name string, cfg *daemon.ContainerWsAttachWithLogsConfig) error
115+
Pull(name string) (Image, error)
116+
// ContainerAttach attaches to container.
117+
ContainerAttach(cID string, stdin io.ReadCloser, stdout, stderr io.Writer, stream bool) error
120118
// ContainerCreate creates a new Docker container and returns potential warnings
121-
ContainerCreate(params *daemon.ContainerCreateConfig) (types.ContainerCreateResponse, error)
119+
ContainerCreate(types.ContainerCreateConfig) (types.ContainerCreateResponse, error)
122120
// ContainerRm removes a container specified by `id`.
123121
ContainerRm(name string, config *types.ContainerRmConfig) error
124122
// Commit creates a new Docker image from an existing Docker container.

builder/dockerfile/dispatchers.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ import (
1818
"strings"
1919

2020
"github.com/Sirupsen/logrus"
21+
"github.com/docker/docker/builder"
2122
derr "github.com/docker/docker/errors"
22-
"github.com/docker/docker/image"
2323
flag "github.com/docker/docker/pkg/mflag"
2424
"github.com/docker/docker/pkg/nat"
2525
"github.com/docker/docker/pkg/signal"
@@ -210,7 +210,7 @@ func from(b *Builder, args []string, attributes map[string]bool, original string
210210
}
211211

212212
var (
213-
image *image.Image
213+
image builder.Image
214214
err error
215215
)
216216
// TODO: don't use `name`, instead resolve it to a digest

builder/dockerfile/internals.go

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ import (
2323
"github.com/docker/docker/api/types"
2424
"github.com/docker/docker/builder"
2525
"github.com/docker/docker/builder/dockerfile/parser"
26-
"github.com/docker/docker/daemon"
27-
"github.com/docker/docker/image"
2826
"github.com/docker/docker/pkg/archive"
2927
"github.com/docker/docker/pkg/httputils"
3028
"github.com/docker/docker/pkg/ioutils"
@@ -185,7 +183,7 @@ func (b *Builder) runContextCommand(args []string, allowRemote bool, allowLocalD
185183
return nil
186184
}
187185

188-
container, err := b.docker.ContainerCreate(&daemon.ContainerCreateConfig{Config: b.runConfig})
186+
container, err := b.docker.ContainerCreate(types.ContainerCreateConfig{Config: b.runConfig})
189187
if err != nil {
190188
return err
191189
}
@@ -395,11 +393,11 @@ func containsWildcards(name string) bool {
395393
return false
396394
}
397395

398-
func (b *Builder) processImageFrom(img *image.Image) error {
399-
b.image = img.ID().String()
396+
func (b *Builder) processImageFrom(img builder.Image) error {
397+
b.image = img.ID()
400398

401399
if img.Config != nil {
402-
b.runConfig = img.Config
400+
b.runConfig = img.Config()
403401
}
404402

405403
// The default path will be blank on Windows (set by HCS)
@@ -500,7 +498,7 @@ func (b *Builder) create() (string, error) {
500498
config := *b.runConfig
501499

502500
// Create the container
503-
c, err := b.docker.ContainerCreate(&daemon.ContainerCreateConfig{
501+
c, err := b.docker.ContainerCreate(types.ContainerCreateConfig{
504502
Config: b.runConfig,
505503
HostConfig: hostConfig,
506504
})
@@ -528,11 +526,7 @@ func (b *Builder) run(cID string) (err error) {
528526
errCh := make(chan error)
529527
if b.Verbose {
530528
go func() {
531-
errCh <- b.docker.ContainerWsAttachWithLogs(cID, &daemon.ContainerWsAttachWithLogsConfig{
532-
OutStream: b.Stdout,
533-
ErrStream: b.Stderr,
534-
Stream: true,
535-
})
529+
errCh <- b.docker.ContainerAttach(cID, nil, b.Stdout, b.Stderr, true)
536530
}()
537531
}
538532

builder/image.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package builder
2+
3+
import "github.com/docker/docker/runconfig"
4+
5+
// Image represents a Docker image used by the builder.
6+
type Image interface {
7+
ID() string
8+
Config() *runconfig.Config
9+
}

daemon/create.go

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,48 +13,41 @@ import (
1313
"github.com/opencontainers/runc/libcontainer/label"
1414
)
1515

16-
// ContainerCreateConfig is the parameter set to ContainerCreate()
17-
type ContainerCreateConfig struct {
18-
Name string
19-
Config *runconfig.Config
20-
HostConfig *runconfig.HostConfig
21-
AdjustCPUShares bool
22-
}
23-
24-
// ContainerCreate takes configs and creates a container.
25-
func (daemon *Daemon) ContainerCreate(params *ContainerCreateConfig) (types.ContainerCreateResponse, error) {
16+
// ContainerCreate creates a container.
17+
func (daemon *Daemon) ContainerCreate(params types.ContainerCreateConfig) (types.ContainerCreateResponse, error) {
2618
if params.Config == nil {
2719
return types.ContainerCreateResponse{}, derr.ErrorCodeEmptyConfig
2820
}
2921

3022
warnings, err := daemon.verifyContainerSettings(params.HostConfig, params.Config)
3123
if err != nil {
32-
return types.ContainerCreateResponse{ID: "", Warnings: warnings}, err
24+
return types.ContainerCreateResponse{Warnings: warnings}, err
3325
}
3426

3527
if params.HostConfig == nil {
3628
params.HostConfig = &runconfig.HostConfig{}
3729
}
3830
err = daemon.adaptContainerSettings(params.HostConfig, params.AdjustCPUShares)
3931
if err != nil {
40-
return types.ContainerCreateResponse{ID: "", Warnings: warnings}, err
32+
return types.ContainerCreateResponse{Warnings: warnings}, err
4133
}
4234

4335
container, err := daemon.create(params)
4436
if err != nil {
45-
return types.ContainerCreateResponse{ID: "", Warnings: warnings}, daemon.imageNotExistToErrcode(err)
37+
return types.ContainerCreateResponse{Warnings: warnings}, daemon.imageNotExistToErrcode(err)
4638
}
4739

4840
return types.ContainerCreateResponse{ID: container.ID, Warnings: warnings}, nil
4941
}
5042

5143
// Create creates a new container from the given configuration with a given name.
52-
func (daemon *Daemon) create(params *ContainerCreateConfig) (retC *container.Container, retErr error) {
44+
func (daemon *Daemon) create(params types.ContainerCreateConfig) (*container.Container, error) {
5345
var (
5446
container *container.Container
5547
img *image.Image
5648
imgID image.ID
5749
err error
50+
retErr error
5851
)
5952

6053
if params.Config.Image != "" {

daemon/daemonbuilder/builder.go

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ type Docker struct {
3636
var _ builder.Backend = Docker{}
3737

3838
// Pull tells Docker to pull image referenced by `name`.
39-
func (d Docker) Pull(name string) (*image.Image, error) {
39+
func (d Docker) Pull(name string) (builder.Image, error) {
4040
ref, err := reference.ParseNamed(name)
4141
if err != nil {
4242
return nil, err
@@ -61,8 +61,16 @@ func (d Docker) Pull(name string) (*image.Image, error) {
6161
if err := d.Daemon.PullImage(ref, nil, pullRegistryAuth, ioutils.NopWriteCloser(d.OutOld)); err != nil {
6262
return nil, err
6363
}
64+
return d.GetImage(name)
65+
}
6466

65-
return d.Daemon.GetImage(name)
67+
// GetImage looks up a Docker image referenced by `name`.
68+
func (d Docker) GetImage(name string) (builder.Image, error) {
69+
img, err := d.Daemon.GetImage(name)
70+
if err != nil {
71+
return nil, err
72+
}
73+
return imgWrap{img}, nil
6674
}
6775

6876
// ContainerUpdateCmd updates Path and Args for the container with ID cID.
@@ -76,16 +84,14 @@ func (d Docker) ContainerUpdateCmd(cID string, cmd []string) error {
7684
return nil
7785
}
7886

79-
// Retain retains an image avoiding it to be removed or overwritten until a corresponding Release() call.
80-
func (d Docker) Retain(sessionID, imgID string) {
81-
// FIXME: This will be solved with tags in client-side builder
82-
//d.Daemon.Graph().Retain(sessionID, imgID)
83-
}
84-
85-
// Release releases a list of images that were retained for the time of a build.
86-
func (d Docker) Release(sessionID string, activeImages []string) {
87-
// FIXME: This will be solved with tags in client-side builder
88-
//d.Daemon.Graph().Release(sessionID, activeImages...)
87+
// ContainerAttach attaches streams to the container cID. If stream is true, it streams the output.
88+
func (d Docker) ContainerAttach(cID string, stdin io.ReadCloser, stdout, stderr io.Writer, stream bool) error {
89+
return d.Daemon.ContainerWsAttachWithLogs(cID, &daemon.ContainerWsAttachWithLogsConfig{
90+
InStream: stdin,
91+
OutStream: stdout,
92+
ErrStream: stderr,
93+
Stream: stream,
94+
})
8995
}
9096

9197
// BuilderCopy copies/extracts a source FileInfo to a destination path inside a container

daemon/daemonbuilder/image.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package daemonbuilder
2+
3+
import (
4+
"github.com/docker/docker/image"
5+
"github.com/docker/docker/runconfig"
6+
)
7+
8+
type imgWrap struct {
9+
inner *image.Image
10+
}
11+
12+
func (img imgWrap) ID() string {
13+
return string(img.inner.ID())
14+
}
15+
16+
func (img imgWrap) Config() *runconfig.Config {
17+
return img.inner.Config
18+
}

0 commit comments

Comments
 (0)