diff options
author | Djordje Lukic <djordje.lukic@docker.com> | 2023-04-26 13:48:50 +0200 |
---|---|---|
committer | Djordje Lukic <djordje.lukic@docker.com> | 2023-04-26 15:10:01 +0200 |
commit | a1e103873633fdce82fcb3edf54242ea85a5f3aa (patch) | |
tree | 027231e870889dfcde2f443fd681c9d5cf93aa86 /builder | |
parent | 2379b49177521ac21492a6f33647c3f05c215f4c (diff) | |
download | docker-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.go | 10 | ||||
-rw-r--r-- | builder/builder-next/controller.go | 6 | ||||
-rw-r--r-- | builder/builder-next/exporter/mobyexporter/export.go | 15 |
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) |