Преглед изворни кода

api/types: move image options to api/types/image

To prevent a circular import between api/types and api/types image,
the RequestPrivilegeFunc reference was not moved, but defined as
part of the PullOptions / PushOptions.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Sebastiaan van Stijn пре 2 година
родитељ
комит
ac2a028dcc
41 измењених фајлова са 206 додато и 161 уклоњено
  1. 1 1
      api/server/router/image/backend.go
  2. 2 2
      api/server/router/image/image_routes.go
  3. 0 47
      api/types/client.go
  4. 57 0
      api/types/image/opts.go
  5. 30 0
      api/types/types_deprecated.go
  6. 2 2
      client/image_create.go
  7. 3 3
      client/image_create_test.go
  8. 2 1
      client/image_import.go
  9. 3 2
      client/image_import_test.go
  10. 1 2
      client/image_list.go
  11. 9 10
      client/image_list_test.go
  12. 2 2
      client/image_pull.go
  13. 8 8
      client/image_pull_test.go
  14. 2 2
      client/image_push.go
  15. 9 9
      client/image_push_test.go
  16. 1 2
      client/image_remove.go
  17. 3 4
      client/image_remove_test.go
  18. 6 6
      client/interface.go
  19. 2 3
      daemon/containerd/image_list.go
  20. 1 1
      daemon/disk_usage.go
  21. 1 1
      daemon/image_service.go
  22. 1 2
      daemon/images/image_list.go
  23. 1 1
      distribution/xfer/download.go
  24. 2 2
      distribution/xfer/download_test.go
  25. 2 2
      integration-cli/docker_api_build_test.go
  26. 6 6
      integration-cli/docker_api_images_test.go
  27. 3 2
      integration/container/export_test.go
  28. 7 7
      integration/daemon/daemon_test.go
  29. 4 3
      integration/image/import_test.go
  30. 5 5
      integration/image/list_test.go
  31. 5 5
      integration/image/pull_test.go
  32. 3 3
      integration/image/remove_test.go
  33. 4 3
      integration/image/remove_unix_test.go
  34. 2 1
      integration/internal/build/build.go
  35. 2 1
      integration/plugin/authz/authz_plugin_test.go
  36. 2 1
      integration/plugin/graphdriver/external_test.go
  37. 3 2
      testutil/environment/clean.go
  38. 2 1
      testutil/environment/environment.go
  39. 1 1
      testutil/environment/protect.go
  40. 2 1
      testutil/fakestorage/storage.go
  41. 4 4
      testutil/fixtures/load/frozen.go

+ 1 - 1
api/server/router/image/backend.go

@@ -25,7 +25,7 @@ type Backend interface {
 type imageBackend interface {
 type imageBackend interface {
 	ImageDelete(ctx context.Context, imageRef string, force, prune bool) ([]image.DeleteResponse, error)
 	ImageDelete(ctx context.Context, imageRef string, force, prune bool) ([]image.DeleteResponse, error)
 	ImageHistory(ctx context.Context, imageName string) ([]*image.HistoryResponseItem, error)
 	ImageHistory(ctx context.Context, imageName string) ([]*image.HistoryResponseItem, error)
-	Images(ctx context.Context, opts types.ImageListOptions) ([]*image.Summary, error)
+	Images(ctx context.Context, opts image.ListOptions) ([]*image.Summary, error)
 	GetImage(ctx context.Context, refOrID string, options backend.GetImageOpts) (*dockerimage.Image, error)
 	GetImage(ctx context.Context, refOrID string, options backend.GetImageOpts) (*dockerimage.Image, error)
 	TagImage(ctx context.Context, id dockerimage.ID, newRef reference.Named) error
 	TagImage(ctx context.Context, id dockerimage.ID, newRef reference.Named) error
 	ImagesPrune(ctx context.Context, pruneFilters filters.Args) (*types.ImagesPruneReport, error)
 	ImagesPrune(ctx context.Context, pruneFilters filters.Args) (*types.ImagesPruneReport, error)

+ 2 - 2
api/server/router/image/image_routes.go

@@ -190,7 +190,7 @@ func (ir *imageRouter) postImagesPush(ctx context.Context, w http.ResponseWriter
 
 
 	var ref reference.Named
 	var ref reference.Named
 
 
-	// Tag is empty only in case ImagePushOptions.All is true.
+	// Tag is empty only in case PushOptions.All is true.
 	if tag != "" {
 	if tag != "" {
 		r, err := httputils.RepoTagReference(img, tag)
 		r, err := httputils.RepoTagReference(img, tag)
 		if err != nil {
 		if err != nil {
@@ -396,7 +396,7 @@ func (ir *imageRouter) getImagesJSON(ctx context.Context, w http.ResponseWriter,
 		sharedSize = httputils.BoolValue(r, "shared-size")
 		sharedSize = httputils.BoolValue(r, "shared-size")
 	}
 	}
 
 
-	images, err := ir.backend.Images(ctx, types.ImageListOptions{
+	images, err := ir.backend.Images(ctx, imagetypes.ListOptions{
 		All:        httputils.BoolValue(r, "all"),
 		All:        httputils.BoolValue(r, "all"),
 		Filters:    imageFilters,
 		Filters:    imageFilters,
 		SharedSize: sharedSize,
 		SharedSize: sharedSize,

+ 0 - 47
api/types/client.go

@@ -157,42 +157,12 @@ type ImageBuildResponse struct {
 	OSType string
 	OSType string
 }
 }
 
 
-// ImageCreateOptions holds information to create images.
-type ImageCreateOptions struct {
-	RegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry.
-	Platform     string // Platform is the target platform of the image if it needs to be pulled from the registry.
-}
-
 // ImageImportSource holds source information for ImageImport
 // ImageImportSource holds source information for ImageImport
 type ImageImportSource struct {
 type ImageImportSource struct {
 	Source     io.Reader // Source is the data to send to the server to create this image from. You must set SourceName to "-" to leverage this.
 	Source     io.Reader // Source is the data to send to the server to create this image from. You must set SourceName to "-" to leverage this.
 	SourceName string    // SourceName is the name of the image to pull. Set to "-" to leverage the Source attribute.
 	SourceName string    // SourceName is the name of the image to pull. Set to "-" to leverage the Source attribute.
 }
 }
 
 
-// ImageImportOptions holds information to import images from the client host.
-type ImageImportOptions struct {
-	Tag      string   // Tag is the name to tag this image with. This attribute is deprecated.
-	Message  string   // Message is the message to tag the image with
-	Changes  []string // Changes are the raw changes to apply to this image
-	Platform string   // Platform is the target platform of the image
-}
-
-// ImageListOptions holds parameters to list images with.
-type ImageListOptions struct {
-	// All controls whether all images in the graph are filtered, or just
-	// the heads.
-	All bool
-
-	// Filters is a JSON-encoded set of filter arguments.
-	Filters filters.Args
-
-	// SharedSize indicates whether the shared size of images should be computed.
-	SharedSize bool
-
-	// ContainerCount indicates whether container count should be computed.
-	ContainerCount bool
-}
-
 // ImageLoadResponse returns information to the client about a load process.
 // ImageLoadResponse returns information to the client about a load process.
 type ImageLoadResponse struct {
 type ImageLoadResponse struct {
 	// Body must be closed to avoid a resource leak
 	// Body must be closed to avoid a resource leak
@@ -200,14 +170,6 @@ type ImageLoadResponse struct {
 	JSON bool
 	JSON bool
 }
 }
 
 
-// ImagePullOptions holds information to pull images.
-type ImagePullOptions struct {
-	All           bool
-	RegistryAuth  string // RegistryAuth is the base64 encoded credentials for the registry
-	PrivilegeFunc RequestPrivilegeFunc
-	Platform      string
-}
-
 // RequestPrivilegeFunc is a function interface that
 // RequestPrivilegeFunc is a function interface that
 // clients can supply to retry operations after
 // clients can supply to retry operations after
 // getting an authorization error.
 // getting an authorization error.
@@ -216,15 +178,6 @@ type ImagePullOptions struct {
 // if the privilege request fails.
 // if the privilege request fails.
 type RequestPrivilegeFunc func() (string, error)
 type RequestPrivilegeFunc func() (string, error)
 
 
-// ImagePushOptions holds information to push images.
-type ImagePushOptions ImagePullOptions
-
-// ImageRemoveOptions holds parameters to remove images.
-type ImageRemoveOptions struct {
-	Force         bool
-	PruneChildren bool
-}
-
 // ImageSearchOptions holds parameters to search images with.
 // ImageSearchOptions holds parameters to search images with.
 type ImageSearchOptions struct {
 type ImageSearchOptions struct {
 	RegistryAuth  string
 	RegistryAuth  string

+ 57 - 0
api/types/image/opts.go

@@ -0,0 +1,57 @@
+package image
+
+import "github.com/docker/docker/api/types/filters"
+
+// ImportOptions holds information to import images from the client host.
+type ImportOptions struct {
+	Tag      string   // Tag is the name to tag this image with. This attribute is deprecated.
+	Message  string   // Message is the message to tag the image with
+	Changes  []string // Changes are the raw changes to apply to this image
+	Platform string   // Platform is the target platform of the image
+}
+
+// CreateOptions holds information to create images.
+type CreateOptions struct {
+	RegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry.
+	Platform     string // Platform is the target platform of the image if it needs to be pulled from the registry.
+}
+
+// PullOptions holds information to pull images.
+type PullOptions struct {
+	All          bool
+	RegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry
+
+	// PrivilegeFunc is a function that clients can supply to retry operations
+	// after getting an authorization error. This function returns the registry
+	// authentication header value in base64 encoded format, or an error if the
+	// privilege request fails.
+	//
+	// Also see [github.com/docker/docker/api/types.RequestPrivilegeFunc].
+	PrivilegeFunc func() (string, error)
+	Platform      string
+}
+
+// PushOptions holds information to push images.
+type PushOptions PullOptions
+
+// ListOptions holds parameters to list images with.
+type ListOptions struct {
+	// All controls whether all images in the graph are filtered, or just
+	// the heads.
+	All bool
+
+	// Filters is a JSON-encoded set of filter arguments.
+	Filters filters.Args
+
+	// SharedSize indicates whether the shared size of images should be computed.
+	SharedSize bool
+
+	// ContainerCount indicates whether container count should be computed.
+	ContainerCount bool
+}
+
+// RemoveOptions holds parameters to remove images.
+type RemoveOptions struct {
+	Force         bool
+	PruneChildren bool
+}

+ 30 - 0
api/types/types_deprecated.go

@@ -136,3 +136,33 @@ type ContainerRemoveOptions = container.RemoveOptions
 func DecodeSecurityOptions(opts []string) ([]system.SecurityOpt, error) {
 func DecodeSecurityOptions(opts []string) ([]system.SecurityOpt, error) {
 	return system.DecodeSecurityOptions(opts)
 	return system.DecodeSecurityOptions(opts)
 }
 }
+
+// ImageImportOptions holds information to import images from the client host.
+//
+// Deprecated: use [image.ImportOptions].
+type ImageImportOptions = image.ImportOptions
+
+// ImageCreateOptions holds information to create images.
+//
+// Deprecated: use [image.CreateOptions].
+type ImageCreateOptions = image.CreateOptions
+
+// ImagePullOptions holds information to pull images.
+//
+// Deprecated: use [image.PullOptions].
+type ImagePullOptions = image.PullOptions
+
+// ImagePushOptions holds information to push images.
+//
+// Deprecated: use [image.PushOptions].
+type ImagePushOptions = image.PushOptions
+
+// ImageListOptions holds parameters to list images with.
+//
+// Deprecated: use [image.ListOptions].
+type ImageListOptions = image.ListOptions
+
+// ImageRemoveOptions holds parameters to remove images.
+//
+// Deprecated: use [image.RemoveOptions].
+type ImageRemoveOptions = image.RemoveOptions

+ 2 - 2
client/image_create.go

@@ -8,13 +8,13 @@ import (
 	"strings"
 	"strings"
 
 
 	"github.com/distribution/reference"
 	"github.com/distribution/reference"
-	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/api/types/registry"
 	"github.com/docker/docker/api/types/registry"
 )
 )
 
 
 // ImageCreate creates a new image based on the parent options.
 // ImageCreate creates a new image based on the parent options.
 // It returns the JSON content in the response body.
 // It returns the JSON content in the response body.
-func (cli *Client) ImageCreate(ctx context.Context, parentReference string, options types.ImageCreateOptions) (io.ReadCloser, error) {
+func (cli *Client) ImageCreate(ctx context.Context, parentReference string, options image.CreateOptions) (io.ReadCloser, error) {
 	ref, err := reference.ParseNormalizedNamed(parentReference)
 	ref, err := reference.ParseNormalizedNamed(parentReference)
 	if err != nil {
 	if err != nil {
 		return nil, err
 		return nil, err

+ 3 - 3
client/image_create_test.go

@@ -9,7 +9,7 @@ import (
 	"strings"
 	"strings"
 	"testing"
 	"testing"
 
 
-	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/api/types/registry"
 	"github.com/docker/docker/api/types/registry"
 	"github.com/docker/docker/errdefs"
 	"github.com/docker/docker/errdefs"
 	"gotest.tools/v3/assert"
 	"gotest.tools/v3/assert"
@@ -20,7 +20,7 @@ func TestImageCreateError(t *testing.T) {
 	client := &Client{
 	client := &Client{
 		client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
 		client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
 	}
 	}
-	_, err := client.ImageCreate(context.Background(), "reference", types.ImageCreateOptions{})
+	_, err := client.ImageCreate(context.Background(), "reference", image.CreateOptions{})
 	assert.Check(t, is.ErrorType(err, errdefs.IsSystem))
 	assert.Check(t, is.ErrorType(err, errdefs.IsSystem))
 }
 }
 
 
@@ -58,7 +58,7 @@ func TestImageCreate(t *testing.T) {
 		}),
 		}),
 	}
 	}
 
 
-	createResponse, err := client.ImageCreate(context.Background(), expectedReference, types.ImageCreateOptions{
+	createResponse, err := client.ImageCreate(context.Background(), expectedReference, image.CreateOptions{
 		RegistryAuth: expectedRegistryAuth,
 		RegistryAuth: expectedRegistryAuth,
 	})
 	})
 	if err != nil {
 	if err != nil {

+ 2 - 1
client/image_import.go

@@ -8,11 +8,12 @@ import (
 
 
 	"github.com/distribution/reference"
 	"github.com/distribution/reference"
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/api/types/image"
 )
 )
 
 
 // ImageImport creates a new image based on the source options.
 // ImageImport creates a new image based on the source options.
 // It returns the JSON content in the response body.
 // It returns the JSON content in the response body.
-func (cli *Client) ImageImport(ctx context.Context, source types.ImageImportSource, ref string, options types.ImageImportOptions) (io.ReadCloser, error) {
+func (cli *Client) ImageImport(ctx context.Context, source types.ImageImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) {
 	if ref != "" {
 	if ref != "" {
 		// Check if the given image name can be resolved
 		// Check if the given image name can be resolved
 		if _, err := reference.ParseNormalizedNamed(ref); err != nil {
 		if _, err := reference.ParseNormalizedNamed(ref); err != nil {

+ 3 - 2
client/image_import_test.go

@@ -11,6 +11,7 @@ import (
 	"testing"
 	"testing"
 
 
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/errdefs"
 	"github.com/docker/docker/errdefs"
 	"gotest.tools/v3/assert"
 	"gotest.tools/v3/assert"
 	is "gotest.tools/v3/assert/cmp"
 	is "gotest.tools/v3/assert/cmp"
@@ -20,7 +21,7 @@ func TestImageImportError(t *testing.T) {
 	client := &Client{
 	client := &Client{
 		client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
 		client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
 	}
 	}
-	_, err := client.ImageImport(context.Background(), types.ImageImportSource{}, "image:tag", types.ImageImportOptions{})
+	_, err := client.ImageImport(context.Background(), types.ImageImportSource{}, "image:tag", image.ImportOptions{})
 	assert.Check(t, is.ErrorType(err, errdefs.IsSystem))
 	assert.Check(t, is.ErrorType(err, errdefs.IsSystem))
 }
 }
 
 
@@ -63,7 +64,7 @@ func TestImageImport(t *testing.T) {
 	importResponse, err := client.ImageImport(context.Background(), types.ImageImportSource{
 	importResponse, err := client.ImageImport(context.Background(), types.ImageImportSource{
 		Source:     strings.NewReader("source"),
 		Source:     strings.NewReader("source"),
 		SourceName: "image_source",
 		SourceName: "image_source",
-	}, "repository_name:imported", types.ImageImportOptions{
+	}, "repository_name:imported", image.ImportOptions{
 		Tag:     "imported",
 		Tag:     "imported",
 		Message: "A message",
 		Message: "A message",
 		Changes: []string{"change1", "change2"},
 		Changes: []string{"change1", "change2"},

+ 1 - 2
client/image_list.go

@@ -5,14 +5,13 @@ import (
 	"encoding/json"
 	"encoding/json"
 	"net/url"
 	"net/url"
 
 
-	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types/filters"
 	"github.com/docker/docker/api/types/filters"
 	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/api/types/versions"
 	"github.com/docker/docker/api/types/versions"
 )
 )
 
 
 // ImageList returns a list of images in the docker host.
 // ImageList returns a list of images in the docker host.
-func (cli *Client) ImageList(ctx context.Context, options types.ImageListOptions) ([]image.Summary, error) {
+func (cli *Client) ImageList(ctx context.Context, options image.ListOptions) ([]image.Summary, error) {
 	// Make sure we negotiated (if the client is configured to do so),
 	// Make sure we negotiated (if the client is configured to do so),
 	// as code below contains API-version specific handling of options.
 	// as code below contains API-version specific handling of options.
 	//
 	//

+ 9 - 10
client/image_list_test.go

@@ -11,7 +11,6 @@ import (
 	"strings"
 	"strings"
 	"testing"
 	"testing"
 
 
-	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types/filters"
 	"github.com/docker/docker/api/types/filters"
 	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/errdefs"
 	"github.com/docker/docker/errdefs"
@@ -24,7 +23,7 @@ func TestImageListError(t *testing.T) {
 		client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
 		client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
 	}
 	}
 
 
-	_, err := client.ImageList(context.Background(), types.ImageListOptions{})
+	_, err := client.ImageList(context.Background(), image.ListOptions{})
 	assert.Check(t, is.ErrorType(err, errdefs.IsSystem))
 	assert.Check(t, is.ErrorType(err, errdefs.IsSystem))
 }
 }
 
 
@@ -32,11 +31,11 @@ func TestImageList(t *testing.T) {
 	const expectedURL = "/images/json"
 	const expectedURL = "/images/json"
 
 
 	listCases := []struct {
 	listCases := []struct {
-		options             types.ImageListOptions
+		options             image.ListOptions
 		expectedQueryParams map[string]string
 		expectedQueryParams map[string]string
 	}{
 	}{
 		{
 		{
-			options: types.ImageListOptions{},
+			options: image.ListOptions{},
 			expectedQueryParams: map[string]string{
 			expectedQueryParams: map[string]string{
 				"all":     "",
 				"all":     "",
 				"filter":  "",
 				"filter":  "",
@@ -44,7 +43,7 @@ func TestImageList(t *testing.T) {
 			},
 			},
 		},
 		},
 		{
 		{
-			options: types.ImageListOptions{
+			options: image.ListOptions{
 				Filters: filters.NewArgs(
 				Filters: filters.NewArgs(
 					filters.Arg("label", "label1"),
 					filters.Arg("label", "label1"),
 					filters.Arg("label", "label2"),
 					filters.Arg("label", "label2"),
@@ -58,7 +57,7 @@ func TestImageList(t *testing.T) {
 			},
 			},
 		},
 		},
 		{
 		{
-			options: types.ImageListOptions{
+			options: image.ListOptions{
 				Filters: filters.NewArgs(filters.Arg("dangling", "false")),
 				Filters: filters.NewArgs(filters.Arg("dangling", "false")),
 			},
 			},
 			expectedQueryParams: map[string]string{
 			expectedQueryParams: map[string]string{
@@ -141,7 +140,7 @@ func TestImageListApiBefore125(t *testing.T) {
 		version: "1.24",
 		version: "1.24",
 	}
 	}
 
 
-	options := types.ImageListOptions{
+	options := image.ListOptions{
 		Filters: filters.NewArgs(filters.Arg("reference", "image:tag")),
 		Filters: filters.NewArgs(filters.Arg("reference", "image:tag")),
 	}
 	}
 
 
@@ -162,12 +161,12 @@ func TestImageListWithSharedSize(t *testing.T) {
 	for _, tc := range []struct {
 	for _, tc := range []struct {
 		name       string
 		name       string
 		version    string
 		version    string
-		options    types.ImageListOptions
+		options    image.ListOptions
 		sharedSize string // expected value for the shared-size query param, or empty if it should not be set.
 		sharedSize string // expected value for the shared-size query param, or empty if it should not be set.
 	}{
 	}{
 		{name: "unset after 1.42, no options set", version: "1.42"},
 		{name: "unset after 1.42, no options set", version: "1.42"},
-		{name: "set after 1.42, if requested", version: "1.42", options: types.ImageListOptions{SharedSize: true}, sharedSize: "1"},
-		{name: "unset before 1.42, even if requested", version: "1.41", options: types.ImageListOptions{SharedSize: true}},
+		{name: "set after 1.42, if requested", version: "1.42", options: image.ListOptions{SharedSize: true}, sharedSize: "1"},
+		{name: "unset before 1.42, even if requested", version: "1.41", options: image.ListOptions{SharedSize: true}},
 	} {
 	} {
 		tc := tc
 		tc := tc
 		t.Run(tc.name, func(t *testing.T) {
 		t.Run(tc.name, func(t *testing.T) {

+ 2 - 2
client/image_pull.go

@@ -7,7 +7,7 @@ import (
 	"strings"
 	"strings"
 
 
 	"github.com/distribution/reference"
 	"github.com/distribution/reference"
-	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/errdefs"
 	"github.com/docker/docker/errdefs"
 )
 )
 
 
@@ -19,7 +19,7 @@ import (
 // FIXME(vdemeester): there is currently used in a few way in docker/docker
 // FIXME(vdemeester): there is currently used in a few way in docker/docker
 // - if not in trusted content, ref is used to pass the whole reference, and tag is empty
 // - if not in trusted content, ref is used to pass the whole reference, and tag is empty
 // - if in trusted content, ref is used to pass the reference name, and tag for the digest
 // - if in trusted content, ref is used to pass the reference name, and tag for the digest
-func (cli *Client) ImagePull(ctx context.Context, refStr string, options types.ImagePullOptions) (io.ReadCloser, error) {
+func (cli *Client) ImagePull(ctx context.Context, refStr string, options image.PullOptions) (io.ReadCloser, error) {
 	ref, err := reference.ParseNormalizedNamed(refStr)
 	ref, err := reference.ParseNormalizedNamed(refStr)
 	if err != nil {
 	if err != nil {
 		return nil, err
 		return nil, err

+ 8 - 8
client/image_pull_test.go

@@ -9,7 +9,7 @@ import (
 	"strings"
 	"strings"
 	"testing"
 	"testing"
 
 
-	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/api/types/registry"
 	"github.com/docker/docker/api/types/registry"
 	"github.com/docker/docker/errdefs"
 	"github.com/docker/docker/errdefs"
 	"gotest.tools/v3/assert"
 	"gotest.tools/v3/assert"
@@ -23,7 +23,7 @@ func TestImagePullReferenceParseError(t *testing.T) {
 		}),
 		}),
 	}
 	}
 	// An empty reference is an invalid reference
 	// An empty reference is an invalid reference
-	_, err := client.ImagePull(context.Background(), "", types.ImagePullOptions{})
+	_, err := client.ImagePull(context.Background(), "", image.PullOptions{})
 	if err == nil || !strings.Contains(err.Error(), "invalid reference format") {
 	if err == nil || !strings.Contains(err.Error(), "invalid reference format") {
 		t.Fatalf("expected an error, got %v", err)
 		t.Fatalf("expected an error, got %v", err)
 	}
 	}
@@ -33,7 +33,7 @@ func TestImagePullAnyError(t *testing.T) {
 	client := &Client{
 	client := &Client{
 		client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
 		client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
 	}
 	}
-	_, err := client.ImagePull(context.Background(), "myimage", types.ImagePullOptions{})
+	_, err := client.ImagePull(context.Background(), "myimage", image.PullOptions{})
 	assert.Check(t, is.ErrorType(err, errdefs.IsSystem))
 	assert.Check(t, is.ErrorType(err, errdefs.IsSystem))
 }
 }
 
 
@@ -41,7 +41,7 @@ func TestImagePullStatusUnauthorizedError(t *testing.T) {
 	client := &Client{
 	client := &Client{
 		client: newMockClient(errorMock(http.StatusUnauthorized, "Unauthorized error")),
 		client: newMockClient(errorMock(http.StatusUnauthorized, "Unauthorized error")),
 	}
 	}
-	_, err := client.ImagePull(context.Background(), "myimage", types.ImagePullOptions{})
+	_, err := client.ImagePull(context.Background(), "myimage", image.PullOptions{})
 	assert.Check(t, is.ErrorType(err, errdefs.IsUnauthorized))
 	assert.Check(t, is.ErrorType(err, errdefs.IsUnauthorized))
 }
 }
 
 
@@ -52,7 +52,7 @@ func TestImagePullWithUnauthorizedErrorAndPrivilegeFuncError(t *testing.T) {
 	privilegeFunc := func() (string, error) {
 	privilegeFunc := func() (string, error) {
 		return "", fmt.Errorf("Error requesting privilege")
 		return "", fmt.Errorf("Error requesting privilege")
 	}
 	}
-	_, err := client.ImagePull(context.Background(), "myimage", types.ImagePullOptions{
+	_, err := client.ImagePull(context.Background(), "myimage", image.PullOptions{
 		PrivilegeFunc: privilegeFunc,
 		PrivilegeFunc: privilegeFunc,
 	})
 	})
 	if err == nil || err.Error() != "Error requesting privilege" {
 	if err == nil || err.Error() != "Error requesting privilege" {
@@ -67,7 +67,7 @@ func TestImagePullWithUnauthorizedErrorAndAnotherUnauthorizedError(t *testing.T)
 	privilegeFunc := func() (string, error) {
 	privilegeFunc := func() (string, error) {
 		return "a-auth-header", nil
 		return "a-auth-header", nil
 	}
 	}
-	_, err := client.ImagePull(context.Background(), "myimage", types.ImagePullOptions{
+	_, err := client.ImagePull(context.Background(), "myimage", image.PullOptions{
 		PrivilegeFunc: privilegeFunc,
 		PrivilegeFunc: privilegeFunc,
 	})
 	})
 	assert.Check(t, is.ErrorType(err, errdefs.IsUnauthorized))
 	assert.Check(t, is.ErrorType(err, errdefs.IsUnauthorized))
@@ -108,7 +108,7 @@ func TestImagePullWithPrivilegedFuncNoError(t *testing.T) {
 	privilegeFunc := func() (string, error) {
 	privilegeFunc := func() (string, error) {
 		return "IAmValid", nil
 		return "IAmValid", nil
 	}
 	}
-	resp, err := client.ImagePull(context.Background(), "myimage", types.ImagePullOptions{
+	resp, err := client.ImagePull(context.Background(), "myimage", image.PullOptions{
 		RegistryAuth:  "NotValid",
 		RegistryAuth:  "NotValid",
 		PrivilegeFunc: privilegeFunc,
 		PrivilegeFunc: privilegeFunc,
 	})
 	})
@@ -179,7 +179,7 @@ func TestImagePullWithoutErrors(t *testing.T) {
 				}, nil
 				}, nil
 			}),
 			}),
 		}
 		}
-		resp, err := client.ImagePull(context.Background(), pullCase.reference, types.ImagePullOptions{
+		resp, err := client.ImagePull(context.Background(), pullCase.reference, image.PullOptions{
 			All: pullCase.all,
 			All: pullCase.all,
 		})
 		})
 		if err != nil {
 		if err != nil {

+ 2 - 2
client/image_push.go

@@ -8,7 +8,7 @@ import (
 	"net/url"
 	"net/url"
 
 
 	"github.com/distribution/reference"
 	"github.com/distribution/reference"
-	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/api/types/registry"
 	"github.com/docker/docker/api/types/registry"
 	"github.com/docker/docker/errdefs"
 	"github.com/docker/docker/errdefs"
 )
 )
@@ -17,7 +17,7 @@ import (
 // It executes the privileged function if the operation is unauthorized
 // It executes the privileged function if the operation is unauthorized
 // and it tries one more time.
 // and it tries one more time.
 // It's up to the caller to handle the io.ReadCloser and close it properly.
 // It's up to the caller to handle the io.ReadCloser and close it properly.
-func (cli *Client) ImagePush(ctx context.Context, image string, options types.ImagePushOptions) (io.ReadCloser, error) {
+func (cli *Client) ImagePush(ctx context.Context, image string, options image.PushOptions) (io.ReadCloser, error) {
 	ref, err := reference.ParseNormalizedNamed(image)
 	ref, err := reference.ParseNormalizedNamed(image)
 	if err != nil {
 	if err != nil {
 		return nil, err
 		return nil, err

+ 9 - 9
client/image_push_test.go

@@ -9,7 +9,7 @@ import (
 	"strings"
 	"strings"
 	"testing"
 	"testing"
 
 
-	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/api/types/registry"
 	"github.com/docker/docker/api/types/registry"
 	"github.com/docker/docker/errdefs"
 	"github.com/docker/docker/errdefs"
 	"gotest.tools/v3/assert"
 	"gotest.tools/v3/assert"
@@ -23,12 +23,12 @@ func TestImagePushReferenceError(t *testing.T) {
 		}),
 		}),
 	}
 	}
 	// An empty reference is an invalid reference
 	// An empty reference is an invalid reference
-	_, err := client.ImagePush(context.Background(), "", types.ImagePushOptions{})
+	_, err := client.ImagePush(context.Background(), "", image.PushOptions{})
 	if err == nil || !strings.Contains(err.Error(), "invalid reference format") {
 	if err == nil || !strings.Contains(err.Error(), "invalid reference format") {
 		t.Fatalf("expected an error, got %v", err)
 		t.Fatalf("expected an error, got %v", err)
 	}
 	}
 	// An canonical reference cannot be pushed
 	// An canonical reference cannot be pushed
-	_, err = client.ImagePush(context.Background(), "repo@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", types.ImagePushOptions{})
+	_, err = client.ImagePush(context.Background(), "repo@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", image.PushOptions{})
 	if err == nil || err.Error() != "cannot push a digest reference" {
 	if err == nil || err.Error() != "cannot push a digest reference" {
 		t.Fatalf("expected an error, got %v", err)
 		t.Fatalf("expected an error, got %v", err)
 	}
 	}
@@ -38,7 +38,7 @@ func TestImagePushAnyError(t *testing.T) {
 	client := &Client{
 	client := &Client{
 		client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
 		client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
 	}
 	}
-	_, err := client.ImagePush(context.Background(), "myimage", types.ImagePushOptions{})
+	_, err := client.ImagePush(context.Background(), "myimage", image.PushOptions{})
 	assert.Check(t, is.ErrorType(err, errdefs.IsSystem))
 	assert.Check(t, is.ErrorType(err, errdefs.IsSystem))
 }
 }
 
 
@@ -46,7 +46,7 @@ func TestImagePushStatusUnauthorizedError(t *testing.T) {
 	client := &Client{
 	client := &Client{
 		client: newMockClient(errorMock(http.StatusUnauthorized, "Unauthorized error")),
 		client: newMockClient(errorMock(http.StatusUnauthorized, "Unauthorized error")),
 	}
 	}
-	_, err := client.ImagePush(context.Background(), "myimage", types.ImagePushOptions{})
+	_, err := client.ImagePush(context.Background(), "myimage", image.PushOptions{})
 	assert.Check(t, is.ErrorType(err, errdefs.IsUnauthorized))
 	assert.Check(t, is.ErrorType(err, errdefs.IsUnauthorized))
 }
 }
 
 
@@ -57,7 +57,7 @@ func TestImagePushWithUnauthorizedErrorAndPrivilegeFuncError(t *testing.T) {
 	privilegeFunc := func() (string, error) {
 	privilegeFunc := func() (string, error) {
 		return "", fmt.Errorf("Error requesting privilege")
 		return "", fmt.Errorf("Error requesting privilege")
 	}
 	}
-	_, err := client.ImagePush(context.Background(), "myimage", types.ImagePushOptions{
+	_, err := client.ImagePush(context.Background(), "myimage", image.PushOptions{
 		PrivilegeFunc: privilegeFunc,
 		PrivilegeFunc: privilegeFunc,
 	})
 	})
 	if err == nil || err.Error() != "Error requesting privilege" {
 	if err == nil || err.Error() != "Error requesting privilege" {
@@ -72,7 +72,7 @@ func TestImagePushWithUnauthorizedErrorAndAnotherUnauthorizedError(t *testing.T)
 	privilegeFunc := func() (string, error) {
 	privilegeFunc := func() (string, error) {
 		return "a-auth-header", nil
 		return "a-auth-header", nil
 	}
 	}
-	_, err := client.ImagePush(context.Background(), "myimage", types.ImagePushOptions{
+	_, err := client.ImagePush(context.Background(), "myimage", image.PushOptions{
 		PrivilegeFunc: privilegeFunc,
 		PrivilegeFunc: privilegeFunc,
 	})
 	})
 	assert.Check(t, is.ErrorType(err, errdefs.IsUnauthorized))
 	assert.Check(t, is.ErrorType(err, errdefs.IsUnauthorized))
@@ -109,7 +109,7 @@ func TestImagePushWithPrivilegedFuncNoError(t *testing.T) {
 	privilegeFunc := func() (string, error) {
 	privilegeFunc := func() (string, error) {
 		return "IAmValid", nil
 		return "IAmValid", nil
 	}
 	}
-	resp, err := client.ImagePush(context.Background(), "myimage:tag", types.ImagePushOptions{
+	resp, err := client.ImagePush(context.Background(), "myimage:tag", image.PushOptions{
 		RegistryAuth:  "NotValid",
 		RegistryAuth:  "NotValid",
 		PrivilegeFunc: privilegeFunc,
 		PrivilegeFunc: privilegeFunc,
 	})
 	})
@@ -179,7 +179,7 @@ func TestImagePushWithoutErrors(t *testing.T) {
 					}, nil
 					}, nil
 				}),
 				}),
 			}
 			}
-			resp, err := client.ImagePush(context.Background(), tc.reference, types.ImagePushOptions{
+			resp, err := client.ImagePush(context.Background(), tc.reference, image.PushOptions{
 				All: tc.all,
 				All: tc.all,
 			})
 			})
 			if err != nil {
 			if err != nil {

+ 1 - 2
client/image_remove.go

@@ -5,12 +5,11 @@ import (
 	"encoding/json"
 	"encoding/json"
 	"net/url"
 	"net/url"
 
 
-	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/api/types/image"
 )
 )
 
 
 // ImageRemove removes an image from the docker host.
 // ImageRemove removes an image from the docker host.
-func (cli *Client) ImageRemove(ctx context.Context, imageID string, options types.ImageRemoveOptions) ([]image.DeleteResponse, error) {
+func (cli *Client) ImageRemove(ctx context.Context, imageID string, options image.RemoveOptions) ([]image.DeleteResponse, error) {
 	query := url.Values{}
 	query := url.Values{}
 
 
 	if options.Force {
 	if options.Force {

+ 3 - 4
client/image_remove_test.go

@@ -10,7 +10,6 @@ import (
 	"strings"
 	"strings"
 	"testing"
 	"testing"
 
 
-	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/errdefs"
 	"github.com/docker/docker/errdefs"
 	"gotest.tools/v3/assert"
 	"gotest.tools/v3/assert"
@@ -22,7 +21,7 @@ func TestImageRemoveError(t *testing.T) {
 		client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
 		client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
 	}
 	}
 
 
-	_, err := client.ImageRemove(context.Background(), "image_id", types.ImageRemoveOptions{})
+	_, err := client.ImageRemove(context.Background(), "image_id", image.RemoveOptions{})
 	assert.Check(t, is.ErrorType(err, errdefs.IsSystem))
 	assert.Check(t, is.ErrorType(err, errdefs.IsSystem))
 }
 }
 
 
@@ -31,7 +30,7 @@ func TestImageRemoveImageNotFound(t *testing.T) {
 		client: newMockClient(errorMock(http.StatusNotFound, "no such image: unknown")),
 		client: newMockClient(errorMock(http.StatusNotFound, "no such image: unknown")),
 	}
 	}
 
 
-	_, err := client.ImageRemove(context.Background(), "unknown", types.ImageRemoveOptions{})
+	_, err := client.ImageRemove(context.Background(), "unknown", image.RemoveOptions{})
 	assert.Check(t, is.ErrorContains(err, "no such image: unknown"))
 	assert.Check(t, is.ErrorContains(err, "no such image: unknown"))
 	assert.Check(t, is.ErrorType(err, errdefs.IsNotFound))
 	assert.Check(t, is.ErrorType(err, errdefs.IsNotFound))
 }
 }
@@ -93,7 +92,7 @@ func TestImageRemove(t *testing.T) {
 				}, nil
 				}, nil
 			}),
 			}),
 		}
 		}
-		imageDeletes, err := client.ImageRemove(context.Background(), "image_id", types.ImageRemoveOptions{
+		imageDeletes, err := client.ImageRemove(context.Background(), "image_id", image.RemoveOptions{
 			Force:         removeCase.force,
 			Force:         removeCase.force,
 			PruneChildren: removeCase.pruneChildren,
 			PruneChildren: removeCase.pruneChildren,
 		})
 		})

+ 6 - 6
client/interface.go

@@ -90,15 +90,15 @@ type ImageAPIClient interface {
 	ImageBuild(ctx context.Context, context io.Reader, options types.ImageBuildOptions) (types.ImageBuildResponse, error)
 	ImageBuild(ctx context.Context, context io.Reader, options types.ImageBuildOptions) (types.ImageBuildResponse, error)
 	BuildCachePrune(ctx context.Context, opts types.BuildCachePruneOptions) (*types.BuildCachePruneReport, error)
 	BuildCachePrune(ctx context.Context, opts types.BuildCachePruneOptions) (*types.BuildCachePruneReport, error)
 	BuildCancel(ctx context.Context, id string) error
 	BuildCancel(ctx context.Context, id string) error
-	ImageCreate(ctx context.Context, parentReference string, options types.ImageCreateOptions) (io.ReadCloser, error)
+	ImageCreate(ctx context.Context, parentReference string, options image.CreateOptions) (io.ReadCloser, error)
 	ImageHistory(ctx context.Context, image string) ([]image.HistoryResponseItem, error)
 	ImageHistory(ctx context.Context, image string) ([]image.HistoryResponseItem, error)
-	ImageImport(ctx context.Context, source types.ImageImportSource, ref string, options types.ImageImportOptions) (io.ReadCloser, error)
+	ImageImport(ctx context.Context, source types.ImageImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error)
 	ImageInspectWithRaw(ctx context.Context, image string) (types.ImageInspect, []byte, error)
 	ImageInspectWithRaw(ctx context.Context, image string) (types.ImageInspect, []byte, error)
-	ImageList(ctx context.Context, options types.ImageListOptions) ([]image.Summary, error)
+	ImageList(ctx context.Context, options image.ListOptions) ([]image.Summary, error)
 	ImageLoad(ctx context.Context, input io.Reader, quiet bool) (types.ImageLoadResponse, error)
 	ImageLoad(ctx context.Context, input io.Reader, quiet bool) (types.ImageLoadResponse, error)
-	ImagePull(ctx context.Context, ref string, options types.ImagePullOptions) (io.ReadCloser, error)
-	ImagePush(ctx context.Context, ref string, options types.ImagePushOptions) (io.ReadCloser, error)
-	ImageRemove(ctx context.Context, image string, options types.ImageRemoveOptions) ([]image.DeleteResponse, error)
+	ImagePull(ctx context.Context, ref string, options image.PullOptions) (io.ReadCloser, error)
+	ImagePush(ctx context.Context, ref string, options image.PushOptions) (io.ReadCloser, error)
+	ImageRemove(ctx context.Context, image string, options image.RemoveOptions) ([]image.DeleteResponse, error)
 	ImageSearch(ctx context.Context, term string, options types.ImageSearchOptions) ([]registry.SearchResult, error)
 	ImageSearch(ctx context.Context, term string, options types.ImageSearchOptions) ([]registry.SearchResult, error)
 	ImageSave(ctx context.Context, images []string) (io.ReadCloser, error)
 	ImageSave(ctx context.Context, images []string) (io.ReadCloser, error)
 	ImageTag(ctx context.Context, image, ref string) error
 	ImageTag(ctx context.Context, image, ref string) error

+ 2 - 3
daemon/containerd/image_list.go

@@ -14,7 +14,6 @@ import (
 	"github.com/containerd/containerd/snapshots"
 	"github.com/containerd/containerd/snapshots"
 	"github.com/containerd/log"
 	"github.com/containerd/log"
 	"github.com/distribution/reference"
 	"github.com/distribution/reference"
-	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types/backend"
 	"github.com/docker/docker/api/types/backend"
 	"github.com/docker/docker/api/types/filters"
 	"github.com/docker/docker/api/types/filters"
 	imagetypes "github.com/docker/docker/api/types/image"
 	imagetypes "github.com/docker/docker/api/types/image"
@@ -61,7 +60,7 @@ func (r byCreated) Less(i, j int) bool { return r[i].Created < r[j].Created }
 // TODO(thaJeztah): implement opts.ContainerCount (used for docker system df); see https://github.com/moby/moby/issues/43853
 // TODO(thaJeztah): implement opts.ContainerCount (used for docker system df); see https://github.com/moby/moby/issues/43853
 // TODO(thaJeztah): verify behavior of `RepoDigests` and `RepoTags` for images without (untagged) or multiple tags; see https://github.com/moby/moby/issues/43861
 // TODO(thaJeztah): verify behavior of `RepoDigests` and `RepoTags` for images without (untagged) or multiple tags; see https://github.com/moby/moby/issues/43861
 // TODO(thaJeztah): verify "Size" vs "VirtualSize" in images; see https://github.com/moby/moby/issues/43862
 // TODO(thaJeztah): verify "Size" vs "VirtualSize" in images; see https://github.com/moby/moby/issues/43862
-func (i *ImageService) Images(ctx context.Context, opts types.ImageListOptions) ([]*imagetypes.Summary, error) {
+func (i *ImageService) Images(ctx context.Context, opts imagetypes.ListOptions) ([]*imagetypes.Summary, error) {
 	if err := opts.Filters.Validate(acceptedImageFilterTags); err != nil {
 	if err := opts.Filters.Validate(acceptedImageFilterTags); err != nil {
 		return nil, err
 		return nil, err
 	}
 	}
@@ -212,7 +211,7 @@ func (i *ImageService) Images(ctx context.Context, opts types.ImageListOptions)
 	return summaries, nil
 	return summaries, nil
 }
 }
 
 
-func (i *ImageService) singlePlatformImage(ctx context.Context, contentStore content.Store, repoTags []string, imageManifest *ImageManifest, opts types.ImageListOptions, allContainers []*container.Container) (*imagetypes.Summary, []digest.Digest, error) {
+func (i *ImageService) singlePlatformImage(ctx context.Context, contentStore content.Store, repoTags []string, imageManifest *ImageManifest, opts imagetypes.ListOptions, allContainers []*container.Container) (*imagetypes.Summary, []digest.Digest, error) {
 	diffIDs, err := imageManifest.RootFS(ctx)
 	diffIDs, err := imageManifest.RootFS(ctx)
 	if err != nil {
 	if err != nil {
 		return nil, nil, errors.Wrapf(err, "failed to get rootfs of image %s", imageManifest.Name())
 		return nil, nil, errors.Wrapf(err, "failed to get rootfs of image %s", imageManifest.Name())

+ 1 - 1
daemon/disk_usage.go

@@ -36,7 +36,7 @@ func (daemon *Daemon) containerDiskUsage(ctx context.Context) ([]*types.Containe
 func (daemon *Daemon) imageDiskUsage(ctx context.Context) ([]*image.Summary, error) {
 func (daemon *Daemon) imageDiskUsage(ctx context.Context) ([]*image.Summary, error) {
 	imgs, _, err := daemon.usageImages.Do(ctx, struct{}{}, func(ctx context.Context) ([]*image.Summary, error) {
 	imgs, _, err := daemon.usageImages.Do(ctx, struct{}{}, func(ctx context.Context) ([]*image.Summary, error) {
 		// Get all top images with extra attributes
 		// Get all top images with extra attributes
-		imgs, err := daemon.imageService.Images(ctx, types.ImageListOptions{
+		imgs, err := daemon.imageService.Images(ctx, image.ListOptions{
 			Filters:        filters.NewArgs(),
 			Filters:        filters.NewArgs(),
 			SharedSize:     true,
 			SharedSize:     true,
 			ContainerCount: true,
 			ContainerCount: true,

+ 1 - 1
daemon/image_service.go

@@ -34,7 +34,7 @@ type ImageService interface {
 	ExportImage(ctx context.Context, names []string, outStream io.Writer) error
 	ExportImage(ctx context.Context, names []string, outStream io.Writer) error
 	PerformWithBaseFS(ctx context.Context, c *container.Container, fn func(string) error) error
 	PerformWithBaseFS(ctx context.Context, c *container.Container, fn func(string) error) error
 	LoadImage(ctx context.Context, inTar io.ReadCloser, outStream io.Writer, quiet bool) error
 	LoadImage(ctx context.Context, inTar io.ReadCloser, outStream io.Writer, quiet bool) error
-	Images(ctx context.Context, opts types.ImageListOptions) ([]*imagetype.Summary, error)
+	Images(ctx context.Context, opts imagetype.ListOptions) ([]*imagetype.Summary, error)
 	LogImageEvent(imageID, refName string, action events.Action)
 	LogImageEvent(imageID, refName string, action events.Action)
 	CountImages(ctx context.Context) int
 	CountImages(ctx context.Context) int
 	ImagesPrune(ctx context.Context, pruneFilters filters.Args) (*types.ImagesPruneReport, error)
 	ImagesPrune(ctx context.Context, pruneFilters filters.Args) (*types.ImagesPruneReport, error)

+ 1 - 2
daemon/images/image_list.go

@@ -8,7 +8,6 @@ import (
 	"time"
 	"time"
 
 
 	"github.com/distribution/reference"
 	"github.com/distribution/reference"
-	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types/backend"
 	"github.com/docker/docker/api/types/backend"
 	imagetypes "github.com/docker/docker/api/types/image"
 	imagetypes "github.com/docker/docker/api/types/image"
 	timetypes "github.com/docker/docker/api/types/time"
 	timetypes "github.com/docker/docker/api/types/time"
@@ -35,7 +34,7 @@ func (r byCreated) Swap(i, j int)      { r[i], r[j] = r[j], r[i] }
 func (r byCreated) Less(i, j int) bool { return r[i].Created < r[j].Created }
 func (r byCreated) Less(i, j int) bool { return r[i].Created < r[j].Created }
 
 
 // Images returns a filtered list of images.
 // Images returns a filtered list of images.
-func (i *ImageService) Images(ctx context.Context, opts types.ImageListOptions) ([]*imagetypes.Summary, error) {
+func (i *ImageService) Images(ctx context.Context, opts imagetypes.ListOptions) ([]*imagetypes.Summary, error) {
 	if err := opts.Filters.Validate(acceptedImageFilterTags); err != nil {
 	if err := opts.Filters.Validate(acceptedImageFilterTags); err != nil {
 		return nil, err
 		return nil, err
 	}
 	}

+ 1 - 1
distribution/xfer/download.go

@@ -364,7 +364,7 @@ func (ldm *LayerDownloadManager) makeDownloadFunc(descriptor DownloadDescriptor,
 				return
 				return
 			}
 			}
 
 
-			progress.Update(progressOutput, descriptor.ID(), "Pull complete")
+			progress.Update(progressOutput, descriptor.ID(), "PullOptions complete")
 
 
 			if withRegistered, ok := descriptor.(DigestRegisterer); ok {
 			if withRegistered, ok := descriptor.(DigestRegisterer); ok {
 				withRegistered.Registered(d.layer.DiffID())
 				withRegistered.Registered(d.layer.DiffID())

+ 2 - 2
distribution/xfer/download_test.go

@@ -316,8 +316,8 @@ func TestSuccessfulDownload(t *testing.T) {
 			if receivedProgress[d.ID()].Action != "Already exists" {
 			if receivedProgress[d.ID()].Action != "Already exists" {
 				t.Fatalf("did not get 'Already exists' message for %v", d.ID())
 				t.Fatalf("did not get 'Already exists' message for %v", d.ID())
 			}
 			}
-		} else if receivedProgress[d.ID()].Action != "Pull complete" {
-			t.Fatalf("did not get 'Pull complete' message for %v", d.ID())
+		} else if receivedProgress[d.ID()].Action != "PullOptions complete" {
+			t.Fatalf("did not get 'PullOptions complete' message for %v", d.ID())
 		}
 		}
 
 
 		if rootFS.DiffIDs[i] != descriptor.expectedDiffID {
 		if rootFS.DiffIDs[i] != descriptor.expectedDiffID {

+ 2 - 2
integration-cli/docker_api_build_test.go

@@ -11,7 +11,7 @@ import (
 	"strings"
 	"strings"
 	"testing"
 	"testing"
 
 
-	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/testutil"
 	"github.com/docker/docker/testutil"
 	"github.com/docker/docker/testutil/fakecontext"
 	"github.com/docker/docker/testutil/fakecontext"
 	"github.com/docker/docker/testutil/fakegit"
 	"github.com/docker/docker/testutil/fakegit"
@@ -336,7 +336,7 @@ func (s *DockerRegistrySuite) TestBuildCopyFromForcePull(c *testing.T) {
 	err := client.ImageTag(ctx, "busybox", repoName)
 	err := client.ImageTag(ctx, "busybox", repoName)
 	assert.Check(c, err)
 	assert.Check(c, err)
 	// push the image to the registry
 	// push the image to the registry
-	rc, err := client.ImagePush(ctx, repoName, types.ImagePushOptions{RegistryAuth: "{}"})
+	rc, err := client.ImagePush(ctx, repoName, image.PushOptions{RegistryAuth: "{}"})
 	assert.Check(c, err)
 	assert.Check(c, err)
 	_, err = io.Copy(io.Discard, rc)
 	_, err = io.Copy(io.Discard, rc)
 	assert.Check(c, err)
 	assert.Check(c, err)

+ 6 - 6
integration-cli/docker_api_images_test.go

@@ -6,7 +6,7 @@ import (
 	"strings"
 	"strings"
 	"testing"
 	"testing"
 
 
-	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/integration-cli/cli"
 	"github.com/docker/docker/integration-cli/cli"
 	"github.com/docker/docker/integration-cli/cli/build"
 	"github.com/docker/docker/integration-cli/cli/build"
@@ -51,13 +51,13 @@ func (s *DockerAPISuite) TestAPIImagesDelete(c *testing.T) {
 
 
 	cli.DockerCmd(c, "tag", name, "test:tag1")
 	cli.DockerCmd(c, "tag", name, "test:tag1")
 
 
-	_, err = apiClient.ImageRemove(testutil.GetContext(c), id, types.ImageRemoveOptions{})
+	_, err = apiClient.ImageRemove(testutil.GetContext(c), id, image.RemoveOptions{})
 	assert.ErrorContains(c, err, "unable to delete")
 	assert.ErrorContains(c, err, "unable to delete")
 
 
-	_, err = apiClient.ImageRemove(testutil.GetContext(c), "test:noexist", types.ImageRemoveOptions{})
+	_, err = apiClient.ImageRemove(testutil.GetContext(c), "test:noexist", image.RemoveOptions{})
 	assert.ErrorContains(c, err, "No such image")
 	assert.ErrorContains(c, err, "No such image")
 
 
-	_, err = apiClient.ImageRemove(testutil.GetContext(c), "test:tag1", types.ImageRemoveOptions{})
+	_, err = apiClient.ImageRemove(testutil.GetContext(c), "test:tag1", image.RemoveOptions{})
 	assert.NilError(c, err)
 	assert.NilError(c, err)
 }
 }
 
 
@@ -129,7 +129,7 @@ func (s *DockerAPISuite) TestAPIImagesSizeCompatibility(c *testing.T) {
 	apiclient := testEnv.APIClient()
 	apiclient := testEnv.APIClient()
 	defer apiclient.Close()
 	defer apiclient.Close()
 
 
-	images, err := apiclient.ImageList(testutil.GetContext(c), types.ImageListOptions{})
+	images, err := apiclient.ImageList(testutil.GetContext(c), image.ListOptions{})
 	assert.NilError(c, err)
 	assert.NilError(c, err)
 	assert.Assert(c, len(images) != 0)
 	assert.Assert(c, len(images) != 0)
 	for _, img := range images {
 	for _, img := range images {
@@ -140,7 +140,7 @@ func (s *DockerAPISuite) TestAPIImagesSizeCompatibility(c *testing.T) {
 	assert.NilError(c, err)
 	assert.NilError(c, err)
 	defer apiclient.Close()
 	defer apiclient.Close()
 
 
-	v124Images, err := apiclient.ImageList(testutil.GetContext(c), types.ImageListOptions{})
+	v124Images, err := apiclient.ImageList(testutil.GetContext(c), image.ListOptions{})
 	assert.NilError(c, err)
 	assert.NilError(c, err)
 	assert.Assert(c, len(v124Images) != 0)
 	assert.Assert(c, len(v124Images) != 0)
 	for _, img := range v124Images {
 	for _, img := range v124Images {

+ 3 - 2
integration/container/export_test.go

@@ -8,6 +8,7 @@ import (
 
 
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types/filters"
 	"github.com/docker/docker/api/types/filters"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/integration/internal/container"
 	"github.com/docker/docker/integration/internal/container"
 	"github.com/docker/docker/pkg/jsonmessage"
 	"github.com/docker/docker/pkg/jsonmessage"
 	"github.com/docker/docker/testutil"
 	"github.com/docker/docker/testutil"
@@ -34,7 +35,7 @@ func TestExportContainerAndImportImage(t *testing.T) {
 	importResp, err := apiClient.ImageImport(ctx, types.ImageImportSource{
 	importResp, err := apiClient.ImageImport(ctx, types.ImageImportSource{
 		Source:     exportResp,
 		Source:     exportResp,
 		SourceName: "-",
 		SourceName: "-",
-	}, reference, types.ImageImportOptions{})
+	}, reference, image.ImportOptions{})
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 
 
 	// If the import is successfully, then the message output should contain
 	// If the import is successfully, then the message output should contain
@@ -45,7 +46,7 @@ func TestExportContainerAndImportImage(t *testing.T) {
 	err = dec.Decode(&jm)
 	err = dec.Decode(&jm)
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 
 
-	images, err := apiClient.ImageList(ctx, types.ImageListOptions{
+	images, err := apiClient.ImageList(ctx, image.ListOptions{
 		Filters: filters.NewArgs(filters.Arg("reference", reference)),
 		Filters: filters.NewArgs(filters.Arg("reference", reference)),
 	})
 	})
 	assert.NilError(t, err)
 	assert.NilError(t, err)

+ 7 - 7
integration/daemon/daemon_test.go

@@ -14,8 +14,8 @@ import (
 	"syscall"
 	"syscall"
 	"testing"
 	"testing"
 
 
-	"github.com/docker/docker/api/types"
 	containertypes "github.com/docker/docker/api/types/container"
 	containertypes "github.com/docker/docker/api/types/container"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/api/types/mount"
 	"github.com/docker/docker/api/types/mount"
 	"github.com/docker/docker/api/types/volume"
 	"github.com/docker/docker/api/types/volume"
 	"github.com/docker/docker/daemon/config"
 	"github.com/docker/docker/daemon/config"
@@ -219,12 +219,12 @@ func TestDaemonProxy(t *testing.T) {
 		assert.Check(t, is.Equal(info.HTTPSProxy, proxyServer.URL))
 		assert.Check(t, is.Equal(info.HTTPSProxy, proxyServer.URL))
 		assert.Check(t, is.Equal(info.NoProxy, "example.com"))
 		assert.Check(t, is.Equal(info.NoProxy, "example.com"))
 
 
-		_, err := c.ImagePull(ctx, "example.org:5000/some/image:latest", types.ImagePullOptions{})
+		_, err := c.ImagePull(ctx, "example.org:5000/some/image:latest", image.PullOptions{})
 		assert.ErrorContains(t, err, "", "pulling should have failed")
 		assert.ErrorContains(t, err, "", "pulling should have failed")
 		assert.Equal(t, received, "example.org:5000")
 		assert.Equal(t, received, "example.org:5000")
 
 
 		// Test NoProxy: example.com should not hit the proxy, and "received" variable should not be changed.
 		// Test NoProxy: example.com should not hit the proxy, and "received" variable should not be changed.
-		_, err = c.ImagePull(ctx, "example.com/some/image:latest", types.ImagePullOptions{})
+		_, err = c.ImagePull(ctx, "example.com/some/image:latest", image.PullOptions{})
 		assert.ErrorContains(t, err, "", "pulling should have failed")
 		assert.ErrorContains(t, err, "", "pulling should have failed")
 		assert.Equal(t, received, "example.org:5000", "should not have used proxy")
 		assert.Equal(t, received, "example.org:5000", "should not have used proxy")
 	})
 	})
@@ -270,12 +270,12 @@ func TestDaemonProxy(t *testing.T) {
 		ok, logs := d.ScanLogsT(ctx, t, daemon.ScanLogsMatchString(userPass))
 		ok, logs := d.ScanLogsT(ctx, t, daemon.ScanLogsMatchString(userPass))
 		assert.Assert(t, !ok, "logs should not contain the non-sanitized proxy URL: %s", logs)
 		assert.Assert(t, !ok, "logs should not contain the non-sanitized proxy URL: %s", logs)
 
 
-		_, err := c.ImagePull(ctx, "example.org:5001/some/image:latest", types.ImagePullOptions{})
+		_, err := c.ImagePull(ctx, "example.org:5001/some/image:latest", image.PullOptions{})
 		assert.ErrorContains(t, err, "", "pulling should have failed")
 		assert.ErrorContains(t, err, "", "pulling should have failed")
 		assert.Equal(t, received, "example.org:5001")
 		assert.Equal(t, received, "example.org:5001")
 
 
 		// Test NoProxy: example.com should not hit the proxy, and "received" variable should not be changed.
 		// Test NoProxy: example.com should not hit the proxy, and "received" variable should not be changed.
-		_, err = c.ImagePull(ctx, "example.com/some/image:latest", types.ImagePullOptions{})
+		_, err = c.ImagePull(ctx, "example.com/some/image:latest", image.PullOptions{})
 		assert.ErrorContains(t, err, "", "pulling should have failed")
 		assert.ErrorContains(t, err, "", "pulling should have failed")
 		assert.Equal(t, received, "example.org:5001", "should not have used proxy")
 		assert.Equal(t, received, "example.org:5001", "should not have used proxy")
 	})
 	})
@@ -320,12 +320,12 @@ func TestDaemonProxy(t *testing.T) {
 			"NO_PROXY",
 			"NO_PROXY",
 		))
 		))
 
 
-		_, err := c.ImagePull(ctx, "example.org:5002/some/image:latest", types.ImagePullOptions{})
+		_, err := c.ImagePull(ctx, "example.org:5002/some/image:latest", image.PullOptions{})
 		assert.ErrorContains(t, err, "", "pulling should have failed")
 		assert.ErrorContains(t, err, "", "pulling should have failed")
 		assert.Equal(t, received, "example.org:5002")
 		assert.Equal(t, received, "example.org:5002")
 
 
 		// Test NoProxy: example.com should not hit the proxy, and "received" variable should not be changed.
 		// Test NoProxy: example.com should not hit the proxy, and "received" variable should not be changed.
-		_, err = c.ImagePull(ctx, "example.com/some/image:latest", types.ImagePullOptions{})
+		_, err = c.ImagePull(ctx, "example.com/some/image:latest", image.PullOptions{})
 		assert.ErrorContains(t, err, "", "pulling should have failed")
 		assert.ErrorContains(t, err, "", "pulling should have failed")
 		assert.Equal(t, received, "example.org:5002", "should not have used proxy")
 		assert.Equal(t, received, "example.org:5002", "should not have used proxy")
 	})
 	})

+ 4 - 3
integration/image/import_test.go

@@ -10,6 +10,7 @@ import (
 	"testing"
 	"testing"
 
 
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types"
+	imagetypes "github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/image"
 	"github.com/docker/docker/image"
 	"github.com/docker/docker/testutil"
 	"github.com/docker/docker/testutil"
 	"github.com/docker/docker/testutil/daemon"
 	"github.com/docker/docker/testutil/daemon"
@@ -47,7 +48,7 @@ func TestImportExtremelyLargeImageWorks(t *testing.T) {
 	_, err = client.ImageImport(ctx,
 	_, err = client.ImageImport(ctx,
 		types.ImageImportSource{Source: imageRdr, SourceName: "-"},
 		types.ImageImportSource{Source: imageRdr, SourceName: "-"},
 		reference,
 		reference,
-		types.ImageImportOptions{})
+		imagetypes.ImportOptions{})
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 }
 }
 
 
@@ -110,7 +111,7 @@ func TestImportWithCustomPlatform(t *testing.T) {
 			_, err = client.ImageImport(ctx,
 			_, err = client.ImageImport(ctx,
 				types.ImageImportSource{Source: imageRdr, SourceName: "-"},
 				types.ImageImportSource{Source: imageRdr, SourceName: "-"},
 				reference,
 				reference,
-				types.ImageImportOptions{Platform: tc.platform})
+				imagetypes.ImportOptions{Platform: tc.platform})
 			assert.NilError(t, err)
 			assert.NilError(t, err)
 
 
 			inspect, _, err := client.ImageInspectWithRaw(ctx, reference)
 			inspect, _, err := client.ImageInspectWithRaw(ctx, reference)
@@ -176,7 +177,7 @@ func TestImportWithCustomPlatformReject(t *testing.T) {
 			_, err = client.ImageImport(ctx,
 			_, err = client.ImageImport(ctx,
 				types.ImageImportSource{Source: imageRdr, SourceName: "-"},
 				types.ImageImportSource{Source: imageRdr, SourceName: "-"},
 				reference,
 				reference,
-				types.ImageImportOptions{Platform: tc.platform})
+				imagetypes.ImportOptions{Platform: tc.platform})
 
 
 			assert.ErrorContains(t, err, tc.expectedErr)
 			assert.ErrorContains(t, err, tc.expectedErr)
 		})
 		})

+ 5 - 5
integration/image/list_test.go

@@ -6,9 +6,9 @@ import (
 	"testing"
 	"testing"
 	"time"
 	"time"
 
 
-	"github.com/docker/docker/api/types"
 	containertypes "github.com/docker/docker/api/types/container"
 	containertypes "github.com/docker/docker/api/types/container"
 	"github.com/docker/docker/api/types/filters"
 	"github.com/docker/docker/api/types/filters"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/integration/internal/container"
 	"github.com/docker/docker/integration/internal/container"
 	"github.com/docker/docker/testutil"
 	"github.com/docker/docker/testutil"
 	"github.com/google/go-cmp/cmp/cmpopts"
 	"github.com/google/go-cmp/cmp/cmpopts"
@@ -39,7 +39,7 @@ func TestImagesFilterMultiReference(t *testing.T) {
 	filter.Add("reference", repoTags[0])
 	filter.Add("reference", repoTags[0])
 	filter.Add("reference", repoTags[1])
 	filter.Add("reference", repoTags[1])
 	filter.Add("reference", repoTags[2])
 	filter.Add("reference", repoTags[2])
-	options := types.ImageListOptions{
+	options := image.ListOptions{
 		Filters: filter,
 		Filters: filter,
 	}
 	}
 	images, err := client.ImageList(ctx, options)
 	images, err := client.ImageList(ctx, options)
@@ -87,7 +87,7 @@ func TestImagesFilterUntil(t *testing.T) {
 		filters.Arg("until", laterUntil),
 		filters.Arg("until", laterUntil),
 		filters.Arg("before", imgs[len(imgs)-1]),
 		filters.Arg("before", imgs[len(imgs)-1]),
 	)
 	)
-	list, err := client.ImageList(ctx, types.ImageListOptions{Filters: filter})
+	list, err := client.ImageList(ctx, image.ListOptions{Filters: filter})
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 
 
 	var listedIDs []string
 	var listedIDs []string
@@ -121,7 +121,7 @@ func TestImagesFilterBeforeSince(t *testing.T) {
 		filters.Arg("since", imgs[0]),
 		filters.Arg("since", imgs[0]),
 		filters.Arg("before", imgs[len(imgs)-1]),
 		filters.Arg("before", imgs[len(imgs)-1]),
 	)
 	)
-	list, err := client.ImageList(ctx, types.ImageListOptions{Filters: filter})
+	list, err := client.ImageList(ctx, image.ListOptions{Filters: filter})
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 
 
 	var listedIDs []string
 	var listedIDs []string
@@ -183,7 +183,7 @@ func TestAPIImagesFilters(t *testing.T) {
 			t.Parallel()
 			t.Parallel()
 
 
 			ctx := testutil.StartSpan(ctx, t)
 			ctx := testutil.StartSpan(ctx, t)
-			images, err := client.ImageList(ctx, types.ImageListOptions{
+			images, err := client.ImageList(ctx, image.ListOptions{
 				Filters: filters.NewArgs(tc.filters...),
 				Filters: filters.NewArgs(tc.filters...),
 			})
 			})
 			assert.Check(t, err)
 			assert.Check(t, err)

+ 5 - 5
integration/image/pull_test.go

@@ -15,7 +15,7 @@ import (
 	"github.com/containerd/containerd/content/local"
 	"github.com/containerd/containerd/content/local"
 	"github.com/containerd/containerd/images"
 	"github.com/containerd/containerd/images"
 	"github.com/containerd/containerd/platforms"
 	"github.com/containerd/containerd/platforms"
-	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/errdefs"
 	"github.com/docker/docker/errdefs"
 	"github.com/docker/docker/testutil/registry"
 	"github.com/docker/docker/testutil/registry"
 	"github.com/opencontainers/go-digest"
 	"github.com/opencontainers/go-digest"
@@ -31,7 +31,7 @@ func TestImagePullPlatformInvalid(t *testing.T) {
 
 
 	client := testEnv.APIClient()
 	client := testEnv.APIClient()
 
 
-	_, err := client.ImagePull(ctx, "docker.io/library/hello-world:latest", types.ImagePullOptions{Platform: "foobar"})
+	_, err := client.ImagePull(ctx, "docker.io/library/hello-world:latest", image.PullOptions{Platform: "foobar"})
 	assert.Assert(t, err != nil)
 	assert.Assert(t, err != nil)
 	assert.Check(t, is.ErrorContains(err, "unknown operating system or architecture"))
 	assert.Check(t, is.ErrorContains(err, "unknown operating system or architecture"))
 	assert.Check(t, is.ErrorType(err, errdefs.IsInvalidParameter))
 	assert.Check(t, is.ErrorType(err, errdefs.IsInvalidParameter))
@@ -143,14 +143,14 @@ func TestImagePullStoredDigestForOtherRepo(t *testing.T) {
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 
 
 	client := testEnv.APIClient()
 	client := testEnv.APIClient()
-	rdr, err := client.ImagePull(ctx, remote, types.ImagePullOptions{})
+	rdr, err := client.ImagePull(ctx, remote, image.PullOptions{})
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 	defer rdr.Close()
 	defer rdr.Close()
 	_, err = io.Copy(io.Discard, rdr)
 	_, err = io.Copy(io.Discard, rdr)
 	assert.Check(t, err)
 	assert.Check(t, err)
 
 
 	// Now, pull a totally different repo with a the same digest
 	// Now, pull a totally different repo with a the same digest
-	rdr, err = client.ImagePull(ctx, path.Join(registry.DefaultURL, "other:image@"+desc.Digest.String()), types.ImagePullOptions{})
+	rdr, err = client.ImagePull(ctx, path.Join(registry.DefaultURL, "other:image@"+desc.Digest.String()), image.PullOptions{})
 	if rdr != nil {
 	if rdr != nil {
 		assert.Check(t, rdr.Close())
 		assert.Check(t, rdr.Close())
 	}
 	}
@@ -178,7 +178,7 @@ func TestImagePullNonExisting(t *testing.T) {
 			t.Parallel()
 			t.Parallel()
 
 
 			client := testEnv.APIClient()
 			client := testEnv.APIClient()
-			rdr, err := client.ImagePull(ctx, ref, types.ImagePullOptions{
+			rdr, err := client.ImagePull(ctx, ref, image.PullOptions{
 				All: all,
 				All: all,
 			})
 			})
 			if err == nil {
 			if err == nil {

+ 3 - 3
integration/image/remove_test.go

@@ -4,8 +4,8 @@ import (
 	"strings"
 	"strings"
 	"testing"
 	"testing"
 
 
-	"github.com/docker/docker/api/types"
 	containertypes "github.com/docker/docker/api/types/container"
 	containertypes "github.com/docker/docker/api/types/container"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/errdefs"
 	"github.com/docker/docker/errdefs"
 	"github.com/docker/docker/integration/internal/container"
 	"github.com/docker/docker/integration/internal/container"
 	"gotest.tools/v3/assert"
 	"gotest.tools/v3/assert"
@@ -47,7 +47,7 @@ func TestRemoveImageOrphaning(t *testing.T) {
 	assert.Check(t, is.Equal(resp.ID, commitResp2.ID))
 	assert.Check(t, is.Equal(resp.ID, commitResp2.ID))
 
 
 	// try to remove the image, should not error out.
 	// try to remove the image, should not error out.
-	_, err = client.ImageRemove(ctx, imgName, types.ImageRemoveOptions{})
+	_, err = client.ImageRemove(ctx, imgName, image.RemoveOptions{})
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 
 
 	// check if the first image is still there
 	// check if the first image is still there
@@ -82,7 +82,7 @@ func TestRemoveByDigest(t *testing.T) {
 	assert.Assert(t, id != "")
 	assert.Assert(t, id != "")
 
 
 	t.Logf("removing %s", id)
 	t.Logf("removing %s", id)
-	_, err = client.ImageRemove(ctx, id, types.ImageRemoveOptions{})
+	_, err = client.ImageRemove(ctx, id, image.RemoveOptions{})
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 
 
 	inspect, _, err = client.ImageInspectWithRaw(ctx, "busybox")
 	inspect, _, err = client.ImageInspectWithRaw(ctx, "busybox")

+ 4 - 3
integration/image/remove_unix_test.go

@@ -13,6 +13,7 @@ import (
 	"unsafe"
 	"unsafe"
 
 
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/api/types/image"
 	_ "github.com/docker/docker/daemon/graphdriver/register" // register graph drivers
 	_ "github.com/docker/docker/daemon/graphdriver/register" // register graph drivers
 	"github.com/docker/docker/daemon/images"
 	"github.com/docker/docker/daemon/images"
 	"github.com/docker/docker/layer"
 	"github.com/docker/docker/layer"
@@ -76,11 +77,11 @@ func TestRemoveImageGarbageCollector(t *testing.T) {
 	_, err = io.Copy(io.Discard, resp.Body)
 	_, err = io.Copy(io.Discard, resp.Body)
 	resp.Body.Close()
 	resp.Body.Close()
 	assert.NilError(t, err)
 	assert.NilError(t, err)
-	image, _, err := client.ImageInspectWithRaw(ctx, imgName)
+	img, _, err := client.ImageInspectWithRaw(ctx, imgName)
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 
 
 	// Mark latest image layer to immutable
 	// Mark latest image layer to immutable
-	data := image.GraphDriver.Data
+	data := img.GraphDriver.Data
 	file, _ := os.Open(data["UpperDir"])
 	file, _ := os.Open(data["UpperDir"])
 	attr := 0x00000010
 	attr := 0x00000010
 	fsflags := uintptr(0x40086602)
 	fsflags := uintptr(0x40086602)
@@ -90,7 +91,7 @@ func TestRemoveImageGarbageCollector(t *testing.T) {
 
 
 	// Try to remove the image, it should generate error
 	// Try to remove the image, it should generate error
 	// but marking layer back to mutable before checking errors (so we don't break CI server)
 	// but marking layer back to mutable before checking errors (so we don't break CI server)
-	_, err = client.ImageRemove(ctx, imgName, types.ImageRemoveOptions{})
+	_, err = client.ImageRemove(ctx, imgName, image.RemoveOptions{})
 	attr = 0x00000000
 	attr = 0x00000000
 	argp = uintptr(unsafe.Pointer(&attr))
 	argp = uintptr(unsafe.Pointer(&attr))
 	_, _, errno = syscall.Syscall(syscall.SYS_IOCTL, file.Fd(), fsflags, argp)
 	_, _, errno = syscall.Syscall(syscall.SYS_IOCTL, file.Fd(), fsflags, argp)

+ 2 - 1
integration/internal/build/build.go

@@ -7,6 +7,7 @@ import (
 	"testing"
 	"testing"
 
 
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/pkg/jsonmessage"
 	"github.com/docker/docker/pkg/jsonmessage"
 	"github.com/docker/docker/testutil/fakecontext"
 	"github.com/docker/docker/testutil/fakecontext"
@@ -22,7 +23,7 @@ func Do(ctx context.Context, t *testing.T, client client.APIClient, buildCtx *fa
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 	img := GetImageIDFromBody(t, resp.Body)
 	img := GetImageIDFromBody(t, resp.Body)
 	t.Cleanup(func() {
 	t.Cleanup(func() {
-		client.ImageRemove(ctx, img, types.ImageRemoveOptions{Force: true})
+		client.ImageRemove(ctx, img, image.RemoveOptions{Force: true})
 	})
 	})
 	return img
 	return img
 }
 }

+ 2 - 1
integration/plugin/authz/authz_plugin_test.go

@@ -19,6 +19,7 @@ import (
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types"
 	containertypes "github.com/docker/docker/api/types/container"
 	containertypes "github.com/docker/docker/api/types/container"
 	eventtypes "github.com/docker/docker/api/types/events"
 	eventtypes "github.com/docker/docker/api/types/events"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/integration/internal/container"
 	"github.com/docker/docker/integration/internal/container"
 	"github.com/docker/docker/pkg/archive"
 	"github.com/docker/docker/pkg/archive"
@@ -460,7 +461,7 @@ func imageImport(ctx context.Context, client client.APIClient, path string) erro
 		return err
 		return err
 	}
 	}
 	defer file.Close()
 	defer file.Close()
-	options := types.ImageImportOptions{}
+	options := image.ImportOptions{}
 	ref := ""
 	ref := ""
 	source := types.ImageImportSource{
 	source := types.ImageImportSource{
 		Source:     file,
 		Source:     file,

+ 2 - 1
integration/plugin/graphdriver/external_test.go

@@ -13,6 +13,7 @@ import (
 
 
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types"
 	containertypes "github.com/docker/docker/api/types/container"
 	containertypes "github.com/docker/docker/api/types/container"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/daemon/graphdriver"
 	"github.com/docker/docker/daemon/graphdriver"
 	"github.com/docker/docker/daemon/graphdriver/vfs"
 	"github.com/docker/docker/daemon/graphdriver/vfs"
@@ -398,7 +399,7 @@ func testGraphDriverPull(ctx context.Context, c client.APIClient, d *daemon.Daem
 		d.Start(t)
 		d.Start(t)
 		defer d.Stop(t)
 		defer d.Stop(t)
 
 
-		r, err := c.ImagePull(ctx, "busybox:latest@sha256:95cf004f559831017cdf4628aaf1bb30133677be8702a8c5f2994629f637a209", types.ImagePullOptions{})
+		r, err := c.ImagePull(ctx, "busybox:latest@sha256:95cf004f559831017cdf4628aaf1bb30133677be8702a8c5f2994629f637a209", image.PullOptions{})
 		assert.NilError(t, err)
 		assert.NilError(t, err)
 		_, err = io.Copy(io.Discard, r)
 		_, err = io.Copy(io.Discard, r)
 		assert.NilError(t, err)
 		assert.NilError(t, err)

+ 3 - 2
testutil/environment/clean.go

@@ -9,6 +9,7 @@ import (
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types/container"
 	"github.com/docker/docker/api/types/container"
 	"github.com/docker/docker/api/types/filters"
 	"github.com/docker/docker/api/types/filters"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/api/types/network"
 	"github.com/docker/docker/api/types/network"
 	"github.com/docker/docker/api/types/volume"
 	"github.com/docker/docker/api/types/volume"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/client"
@@ -97,7 +98,7 @@ func getAllContainers(ctx context.Context, t testing.TB, client client.Container
 
 
 func deleteAllImages(ctx context.Context, t testing.TB, apiclient client.ImageAPIClient, protectedImages map[string]struct{}) {
 func deleteAllImages(ctx context.Context, t testing.TB, apiclient client.ImageAPIClient, protectedImages map[string]struct{}) {
 	t.Helper()
 	t.Helper()
-	images, err := apiclient.ImageList(ctx, types.ImageListOptions{})
+	images, err := apiclient.ImageList(ctx, image.ListOptions{})
 	assert.Check(t, err, "failed to list images")
 	assert.Check(t, err, "failed to list images")
 
 
 	for _, img := range images {
 	for _, img := range images {
@@ -119,7 +120,7 @@ func deleteAllImages(ctx context.Context, t testing.TB, apiclient client.ImageAP
 
 
 func removeImage(ctx context.Context, t testing.TB, apiclient client.ImageAPIClient, ref string) {
 func removeImage(ctx context.Context, t testing.TB, apiclient client.ImageAPIClient, ref string) {
 	t.Helper()
 	t.Helper()
-	_, err := apiclient.ImageRemove(ctx, ref, types.ImageRemoveOptions{
+	_, err := apiclient.ImageRemove(ctx, ref, image.RemoveOptions{
 		Force: true,
 		Force: true,
 	})
 	})
 	if errdefs.IsNotFound(err) {
 	if errdefs.IsNotFound(err) {

+ 2 - 1
testutil/environment/environment.go

@@ -10,6 +10,7 @@ import (
 
 
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types/filters"
 	"github.com/docker/docker/api/types/filters"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/api/types/system"
 	"github.com/docker/docker/api/types/system"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/testutil/fixtures/load"
 	"github.com/docker/docker/testutil/fixtures/load"
@@ -198,7 +199,7 @@ func (e *Execution) UsingSnapshotter() bool {
 // Note that this is done by filtering and then checking whether there were any
 // Note that this is done by filtering and then checking whether there were any
 // results -- so ambiguous references might result in false-positives.
 // results -- so ambiguous references might result in false-positives.
 func (e *Execution) HasExistingImage(t testing.TB, reference string) bool {
 func (e *Execution) HasExistingImage(t testing.TB, reference string) bool {
-	imageList, err := e.APIClient().ImageList(context.Background(), types.ImageListOptions{
+	imageList, err := e.APIClient().ImageList(context.Background(), image.ListOptions{
 		All: true,
 		All: true,
 		Filters: filters.NewArgs(
 		Filters: filters.NewArgs(
 			filters.Arg("dangling", "false"),
 			filters.Arg("dangling", "false"),

+ 1 - 1
testutil/environment/protect.go

@@ -109,7 +109,7 @@ func ProtectImages(ctx context.Context, t testing.TB, testEnv *Execution) {
 func getExistingImages(ctx context.Context, t testing.TB, testEnv *Execution) []string {
 func getExistingImages(ctx context.Context, t testing.TB, testEnv *Execution) []string {
 	t.Helper()
 	t.Helper()
 	client := testEnv.APIClient()
 	client := testEnv.APIClient()
-	imageList, err := client.ImageList(ctx, types.ImageListOptions{
+	imageList, err := client.ImageList(ctx, image.ListOptions{
 		All:     true,
 		All:     true,
 		Filters: filters.NewArgs(filters.Arg("dangling", "false")),
 		Filters: filters.NewArgs(filters.Arg("dangling", "false")),
 	})
 	})

+ 2 - 1
testutil/fakestorage/storage.go

@@ -13,6 +13,7 @@ import (
 
 
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types"
 	containertypes "github.com/docker/docker/api/types/container"
 	containertypes "github.com/docker/docker/api/types/container"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/testutil"
 	"github.com/docker/docker/testutil"
 	"github.com/docker/docker/testutil/environment"
 	"github.com/docker/docker/testutil/environment"
@@ -112,7 +113,7 @@ func (f *remoteFileServer) Close() error {
 			f.ctx.Close()
 			f.ctx.Close()
 		}
 		}
 		if f.image != "" {
 		if f.image != "" {
-			if _, err := f.client.ImageRemove(context.Background(), f.image, types.ImageRemoveOptions{
+			if _, err := f.client.ImageRemove(context.Background(), f.image, image.RemoveOptions{
 				Force: true,
 				Force: true,
 			}); err != nil {
 			}); err != nil {
 				fmt.Fprintf(os.Stderr, "Error closing remote file server : %v\n", err)
 				fmt.Fprintf(os.Stderr, "Error closing remote file server : %v\n", err)

+ 4 - 4
testutil/fixtures/load/frozen.go

@@ -10,7 +10,7 @@ import (
 	"strings"
 	"strings"
 	"sync"
 	"sync"
 
 
-	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/pkg/jsonmessage"
 	"github.com/docker/docker/pkg/jsonmessage"
 	"github.com/moby/term"
 	"github.com/moby/term"
@@ -74,7 +74,7 @@ func FrozenImagesLinux(ctx context.Context, client client.APIClient, images ...s
 			if err := client.ImageTag(ctx, img.srcName, img.destName); err != nil {
 			if err := client.ImageTag(ctx, img.srcName, img.destName); err != nil {
 				return errors.Wrapf(err, "failed to tag %s as %s", img.srcName, img.destName)
 				return errors.Wrapf(err, "failed to tag %s as %s", img.srcName, img.destName)
 			}
 			}
-			if _, err := client.ImageRemove(ctx, img.srcName, types.ImageRemoveOptions{}); err != nil {
+			if _, err := client.ImageRemove(ctx, img.srcName, image.RemoveOptions{}); err != nil {
 				return errors.Wrapf(err, "failed to remove %s", img.srcName)
 				return errors.Wrapf(err, "failed to remove %s", img.srcName)
 			}
 			}
 		}
 		}
@@ -162,7 +162,7 @@ func pullTagAndRemove(ctx context.Context, client client.APIClient, ref string,
 		span.End()
 		span.End()
 	}()
 	}()
 
 
-	resp, err := client.ImagePull(ctx, ref, types.ImagePullOptions{})
+	resp, err := client.ImagePull(ctx, ref, image.PullOptions{})
 	if err != nil {
 	if err != nil {
 		return errors.Wrapf(err, "failed to pull %s", ref)
 		return errors.Wrapf(err, "failed to pull %s", ref)
 	}
 	}
@@ -175,7 +175,7 @@ func pullTagAndRemove(ctx context.Context, client client.APIClient, ref string,
 	if err := client.ImageTag(ctx, ref, tag); err != nil {
 	if err := client.ImageTag(ctx, ref, tag); err != nil {
 		return errors.Wrapf(err, "failed to tag %s as %s", ref, tag)
 		return errors.Wrapf(err, "failed to tag %s as %s", ref, tag)
 	}
 	}
-	_, err = client.ImageRemove(ctx, ref, types.ImageRemoveOptions{})
+	_, err = client.ImageRemove(ctx, ref, image.RemoveOptions{})
 	return errors.Wrapf(err, "failed to remove %s", ref)
 	return errors.Wrapf(err, "failed to remove %s", ref)
 }
 }