Skip to content

Commit 7c42776

Browse files
Improve buildkit node creation (docker#10843)
Move builder and nodes initialization code up, avoiding to recreate/load them for every service build. Signed-off-by: Silvin Lubecki <[email protected]>
1 parent 3b0742f commit 7c42776

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

pkg/compose/build.go

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"os"
2323
"path/filepath"
2424

25+
"github.com/docker/buildx/builder"
2526
"github.com/docker/compose/v2/internal/tracing"
2627

2728
"github.com/docker/buildx/controller/pb"
@@ -68,6 +69,27 @@ func (s *composeService) build(ctx context.Context, project *types.Project, opti
6869
return nil, err
6970
}
7071

72+
// Initialize buildkit nodes
73+
var (
74+
b *builder.Builder
75+
nodes []builder.Node
76+
)
77+
if buildkitEnabled {
78+
builderName := options.Builder
79+
if builderName == "" {
80+
builderName = os.Getenv("BUILDX_BUILDER")
81+
}
82+
b, err = builder.New(s.dockerCli, builder.WithName(builderName))
83+
if err != nil {
84+
return nil, err
85+
}
86+
87+
nodes, err = b.LoadNodes(ctx, false)
88+
if err != nil {
89+
return nil, err
90+
}
91+
}
92+
7193
// Progress needs its own context that lives longer than the
7294
// build one otherwise it won't read all the messages from
7395
// build and will lock
@@ -118,7 +140,7 @@ func (s *composeService) build(ctx context.Context, project *types.Project, opti
118140
}
119141
buildOptions.BuildArgs = mergeArgs(buildOptions.BuildArgs, flatten(args))
120142

121-
digest, err := s.doBuildBuildkit(ctx, service.Name, buildOptions, w, options.Builder)
143+
digest, err := s.doBuildBuildkit(ctx, service.Name, buildOptions, w, nodes)
122144
if err != nil {
123145
return err
124146
}

pkg/compose/build_buildkit.go

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,11 @@ import (
3434
"github.com/moby/buildkit/client"
3535
)
3636

37-
func (s *composeService) doBuildBuildkit(ctx context.Context, service string, opts build.Options, p *buildx.Printer, builderName string) (string, error) {
38-
b, err := builder.New(s.dockerCli, builder.WithName(builderName))
39-
if err != nil {
40-
return "", err
41-
}
42-
43-
nodes, err := b.LoadNodes(ctx, false)
44-
if err != nil {
45-
return "", err
46-
}
47-
48-
var response map[string]*client.SolveResponse
37+
func (s *composeService) doBuildBuildkit(ctx context.Context, service string, opts build.Options, p *buildx.Printer, nodes []builder.Node) (string, error) {
38+
var (
39+
response map[string]*client.SolveResponse
40+
err error
41+
)
4942
if s.dryRun {
5043
response = s.dryRunBuildResponse(ctx, service, opts)
5144
} else {

0 commit comments

Comments
 (0)