summaryrefslogtreecommitdiff
path: root/builder
diff options
context:
space:
mode:
authorDjordje Lukic <djordje.lukic@docker.com>2023-04-26 13:48:50 +0200
committerDjordje Lukic <djordje.lukic@docker.com>2023-04-26 15:10:01 +0200
commita1e103873633fdce82fcb3edf54242ea85a5f3aa (patch)
tree027231e870889dfcde2f443fd681c9d5cf93aa86 /builder
parent2379b49177521ac21492a6f33647c3f05c215f4c (diff)
downloaddocker-a1e103873633fdce82fcb3edf54242ea85a5f3aa.tar.gz
Use the image service instead of the reference store for tagging
The image store sends events when a new image is created/tagged, using it instead of the reference store makes sure we send the "tag" event when a new image is built using buildx. Signed-off-by: Djordje Lukic <djordje.lukic@docker.com>
Diffstat (limited to 'builder')
-rw-r--r--builder/builder-next/builder.go10
-rw-r--r--builder/builder-next/controller.go6
-rw-r--r--builder/builder-next/exporter/mobyexporter/export.go15
3 files changed, 18 insertions, 13 deletions
diff --git a/builder/builder-next/builder.go b/builder/builder-next/builder.go
index 3743ea736f..a262da7fcc 100644
--- a/builder/builder-next/builder.go
+++ b/builder/builder-next/builder.go
@@ -16,7 +16,8 @@ import (
"github.com/docker/docker/api/types/backend"
timetypes "github.com/docker/docker/api/types/time"
"github.com/docker/docker/builder"
- mobyexporter "github.com/docker/docker/builder/builder-next/exporter"
+ "github.com/docker/docker/builder/builder-next/exporter"
+ "github.com/docker/docker/builder/builder-next/exporter/mobyexporter"
"github.com/docker/docker/builder/builder-next/exporter/overrides"
"github.com/docker/docker/daemon/config"
"github.com/docker/docker/daemon/images"
@@ -78,6 +79,7 @@ type Opt struct {
SessionManager *session.Manager
Root string
Dist images.DistributionServices
+ ImageTagger mobyexporter.ImageTagger
NetworkController *libnetwork.Controller
DefaultCgroupParent string
RegistryHosts docker.RegistryHosts
@@ -355,7 +357,7 @@ func (b *Builder) Build(ctx context.Context, opt backend.BuildConfig) (*builder.
if b.useSnapshotter {
exporterName = client.ExporterImage
} else {
- exporterName = mobyexporter.Moby
+ exporterName = exporter.Moby
}
} else {
// cacheonly is a special type for triggering skipping all exporters
@@ -365,7 +367,7 @@ func (b *Builder) Build(ctx context.Context, opt backend.BuildConfig) (*builder.
}
}
- if (exporterName == client.ExporterImage || exporterName == mobyexporter.Moby) && len(opt.Options.Tags) > 0 {
+ if (exporterName == client.ExporterImage || exporterName == exporter.Moby) && len(opt.Options.Tags) > 0 {
nameAttr, err := overrides.SanitizeRepoAndTags(opt.Options.Tags)
if err != nil {
return nil, err
@@ -408,7 +410,7 @@ func (b *Builder) Build(ctx context.Context, opt backend.BuildConfig) (*builder.
if err != nil {
return err
}
- if exporterName != mobyexporter.Moby && exporterName != client.ExporterImage {
+ if exporterName != exporter.Moby && exporterName != client.ExporterImage {
return nil
}
id, ok := resp.ExporterResponse["containerimage.digest"]
diff --git a/builder/builder-next/controller.go b/builder/builder-next/controller.go
index 5bf69b1d84..c1a419e322 100644
--- a/builder/builder-next/controller.go
+++ b/builder/builder-next/controller.go
@@ -275,9 +275,9 @@ func newGraphDriverController(ctx context.Context, rt http.RoundTripper, opt Opt
}
exp, err := mobyexporter.New(mobyexporter.Opt{
- ImageStore: dist.ImageStore,
- ReferenceStore: dist.ReferenceStore,
- Differ: differ,
+ ImageStore: dist.ImageStore,
+ Differ: differ,
+ ImageTagger: opt.ImageTagger,
})
if err != nil {
return nil, err
diff --git a/builder/builder-next/exporter/mobyexporter/export.go b/builder/builder-next/exporter/mobyexporter/export.go
index 0161383704..d7aff8a879 100644
--- a/builder/builder-next/exporter/mobyexporter/export.go
+++ b/builder/builder-next/exporter/mobyexporter/export.go
@@ -9,7 +9,6 @@ import (
distref "github.com/docker/distribution/reference"
"github.com/docker/docker/image"
"github.com/docker/docker/layer"
- "github.com/docker/docker/reference"
"github.com/moby/buildkit/exporter"
"github.com/moby/buildkit/exporter/containerimage/exptypes"
"github.com/opencontainers/go-digest"
@@ -25,11 +24,15 @@ type Differ interface {
EnsureLayer(ctx context.Context, key string) ([]layer.DiffID, error)
}
+type ImageTagger interface {
+ TagImage(ctx context.Context, imageID image.ID, newTag distref.Named) error
+}
+
// Opt defines a struct for creating new exporter
type Opt struct {
- ImageStore image.Store
- ReferenceStore reference.Store
- Differ Differ
+ ImageStore image.Store
+ Differ Differ
+ ImageTagger ImageTagger
}
type imageExporter struct {
@@ -168,10 +171,10 @@ func (e *imageExporterInstance) Export(ctx context.Context, inp *exporter.Source
}
_ = configDone(nil)
- if e.opt.ReferenceStore != nil {
+ if e.opt.ImageTagger != nil {
for _, targetName := range e.targetNames {
tagDone := oneOffProgress(ctx, "naming to "+targetName.String())
- if err := e.opt.ReferenceStore.AddTag(targetName, digest.Digest(id), true); err != nil {
+ if err := e.opt.ImageTagger.TagImage(ctx, image.ID(digest.Digest(id)), targetName); err != nil {
return nil, nil, tagDone(err)
}
_ = tagDone(nil)