diff --git a/daemon/daemon.go b/daemon/daemon.go index 0e16230c47d40..c4502a59caba9 100644 --- a/daemon/daemon.go +++ b/daemon/daemon.go @@ -80,7 +80,7 @@ type Daemon struct { containers container.Store containersReplica container.ViewDB execCommands *exec.Store - imageService *images.ImageService + imageService ImageService idIndex *truncindex.TruncIndex configStore *config.Config statsCollector *stats.Collector @@ -1476,7 +1476,7 @@ func (daemon *Daemon) IdentityMapping() idtools.IdentityMapping { } // ImageService returns the Daemon's ImageService -func (daemon *Daemon) ImageService() *images.ImageService { +func (daemon *Daemon) ImageService() ImageService { return daemon.imageService } @@ -1484,7 +1484,7 @@ func (daemon *Daemon) ImageService() *images.ImageService { func (daemon *Daemon) BuilderBackend() builder.Backend { return struct { *Daemon - *images.ImageService + ImageService }{daemon, daemon.imageService} } diff --git a/daemon/image_service.go b/daemon/image_service.go new file mode 100644 index 0000000000000..7f43500b39e05 --- /dev/null +++ b/daemon/image_service.go @@ -0,0 +1,70 @@ +package daemon + +import ( + "context" + "io" + + "github.com/docker/distribution" + "github.com/docker/distribution/reference" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/backend" + "github.com/docker/docker/api/types/filters" + imagetype "github.com/docker/docker/api/types/image" + "github.com/docker/docker/api/types/registry" + "github.com/docker/docker/builder" + "github.com/docker/docker/container" + "github.com/docker/docker/daemon/images" + "github.com/docker/docker/image" + "github.com/docker/docker/layer" + v1 "github.com/opencontainers/image-spec/specs-go/v1" +) + +type ImageService interface { + // Images + PullImage(ctx context.Context, image, tag string, platform *v1.Platform, metaHeaders map[string][]string, authConfig *types.AuthConfig, outStream io.Writer) error + PushImage(ctx context.Context, image, tag string, metaHeaders map[string][]string, authConfig *types.AuthConfig, outStream io.Writer) error + CreateImage(config []byte, parent string) (builder.Image, error) + ImageDelete(imageRef string, force, prune bool) ([]types.ImageDeleteResponseItem, error) + ExportImage(names []string, outStream io.Writer) error + LoadImage(inTar io.ReadCloser, outStream io.Writer, quiet bool) error + Images(ctx context.Context, opts types.ImageListOptions) ([]*types.ImageSummary, error) + LogImageEvent(imageID, refName, action string) + LogImageEventWithAttributes(imageID, refName, action string, attributes map[string]string) + CountImages() int + ImageDiskUsage(ctx context.Context) ([]*types.ImageSummary, error) + ImagesPrune(ctx context.Context, pruneFilters filters.Args) (*types.ImagesPruneReport, error) + ImportImage(src string, repository string, platform *v1.Platform, tag string, msg string, inConfig io.ReadCloser, outStream io.Writer, changes []string) error + TagImage(imageName, repository, tag string) (string, error) + TagImageWithReference(imageID image.ID, newTag reference.Named) error + GetImage(refOrID string, platform *v1.Platform) (retImg *image.Image, retErr error) + ImageHistory(name string) ([]*imagetype.HistoryResponseItem, error) + CommitImage(c backend.CommitConfig) (image.ID, error) + SquashImage(id, parent string) (string, error) + + // Layers + GetImageAndReleasableLayer(ctx context.Context, refOrID string, opts backend.GetImageAndLayerOptions) (builder.Image, builder.ROLayer, error) + CreateLayer(container *container.Container, initFunc layer.MountInit) (layer.RWLayer, error) + GetLayerByID(cid string) (layer.RWLayer, error) + LayerStoreStatus() [][2]string + GetLayerMountID(cid string) (string, error) + ReleaseLayer(rwlayer layer.RWLayer) error + LayerDiskUsage(ctx context.Context) (int64, error) + GetContainerLayerSize(containerID string) (int64, int64) + + // Windows specific + GetLayerFolders(img *image.Image, rwLayer layer.RWLayer) ([]string, error) + + // Build + MakeImageCache(sourceRefs []string) builder.ImageCache + CommitBuildStep(c backend.CommitConfig) (image.ID, error) + + // Other + GetRepository(ctx context.Context, ref reference.Named, authConfig *types.AuthConfig) (distribution.Repository, error) + Map() map[image.ID]*image.Image + SearchRegistryForImages(ctx context.Context, searchFilters filters.Args, term string, limit int, authConfig *types.AuthConfig, headers map[string][]string) (*registry.SearchResults, error) + DistributionServices() images.DistributionServices + Children(id image.ID) []image.ID + Cleanup() error + GraphDriverName() string + UpdateConfig(maxDownloads, maxUploads int) +} diff --git a/daemon/images/image_unix.go b/daemon/images/image_unix.go index 9b7ddecaa8444..2805c87b8cd07 100644 --- a/daemon/images/image_unix.go +++ b/daemon/images/image_unix.go @@ -4,9 +4,16 @@ package images // import "github.com/docker/docker/daemon/images" import ( + "github.com/docker/docker/image" + "github.com/docker/docker/layer" "github.com/sirupsen/logrus" ) +func (i *ImageService) GetLayerFolders(img *image.Image, rwLayer layer.RWLayer) ([]string, error) { + // Windows specific + panic("not implemented") +} + // GetContainerLayerSize returns the real size & virtual size of the container. func (i *ImageService) GetContainerLayerSize(containerID string) (int64, int64) { var (