1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package images // import "github.com/docker/docker/daemon/images"
- import (
- "context"
- "io"
- "github.com/containerd/log"
- "github.com/docker/docker/container"
- "github.com/docker/docker/image/tarexport"
- )
- // ExportImage exports a list of images to the given output stream. The
- // exported images are archived into a tar when written to the output
- // stream. All images with the given tag and all versions containing
- // the same tag are exported. names is the set of tags to export, and
- // outStream is the writer which the images are written to.
- func (i *ImageService) ExportImage(ctx context.Context, names []string, outStream io.Writer) error {
- imageExporter := tarexport.NewTarExporter(i.imageStore, i.layerStore, i.referenceStore, i)
- return imageExporter.Save(names, outStream)
- }
- func (i *ImageService) PerformWithBaseFS(ctx context.Context, c *container.Container, fn func(root string) error) error {
- rwlayer, err := i.layerStore.GetRWLayer(c.ID)
- if err != nil {
- return err
- }
- defer func() {
- if err != nil {
- err2 := i.ReleaseLayer(rwlayer)
- if err2 != nil {
- log.G(ctx).WithError(err2).WithField("container", c.ID).Warn("Failed to release layer")
- }
- }
- }()
- basefs, err := rwlayer.Mount(c.GetMountLabel())
- if err != nil {
- return err
- }
- return fn(basefs)
- }
- // LoadImage uploads a set of images into the repository. This is the
- // complement of ExportImage. The input stream is an uncompressed tar
- // ball containing images and metadata.
- func (i *ImageService) LoadImage(ctx context.Context, inTar io.ReadCloser, outStream io.Writer, quiet bool) error {
- imageExporter := tarexport.NewTarExporter(i.imageStore, i.layerStore, i.referenceStore, i)
- return imageExporter.Load(inTar, outStream, quiet)
- }
|