github.com/chenchun/docker@v1.3.2-0.20150629222414-20467faf132b/graph/service.go (about)

     1  package graph
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  
     7  	"github.com/Sirupsen/logrus"
     8  	"github.com/docker/docker/api/types"
     9  )
    10  
    11  func (s *TagStore) LookupRaw(name string) ([]byte, error) {
    12  	image, err := s.LookupImage(name)
    13  	if err != nil || image == nil {
    14  		return nil, fmt.Errorf("No such image %s", name)
    15  	}
    16  
    17  	imageInspectRaw, err := s.graph.RawJSON(image.ID)
    18  	if err != nil {
    19  		return nil, err
    20  	}
    21  
    22  	return imageInspectRaw, nil
    23  }
    24  
    25  // Lookup return an image encoded in JSON
    26  func (s *TagStore) Lookup(name string) (*types.ImageInspect, error) {
    27  	image, err := s.LookupImage(name)
    28  	if err != nil || image == nil {
    29  		return nil, fmt.Errorf("No such image: %s", name)
    30  	}
    31  
    32  	imageInspect := &types.ImageInspect{
    33  		Id:              image.ID,
    34  		Parent:          image.Parent,
    35  		Comment:         image.Comment,
    36  		Created:         image.Created,
    37  		Container:       image.Container,
    38  		ContainerConfig: &image.ContainerConfig,
    39  		DockerVersion:   image.DockerVersion,
    40  		Author:          image.Author,
    41  		Config:          image.Config,
    42  		Architecture:    image.Architecture,
    43  		Os:              image.OS,
    44  		Size:            image.Size,
    45  		VirtualSize:     s.graph.GetParentsSize(image, 0) + image.Size,
    46  	}
    47  
    48  	imageInspect.GraphDriver.Name = s.graph.driver.String()
    49  
    50  	graphDriverData, err := s.graph.driver.GetMetadata(image.ID)
    51  	if err != nil {
    52  		return nil, err
    53  	}
    54  	imageInspect.GraphDriver.Data = graphDriverData
    55  	return imageInspect, nil
    56  }
    57  
    58  // ImageTarLayer return the tarLayer of the image
    59  func (s *TagStore) ImageTarLayer(name string, dest io.Writer) error {
    60  	if image, err := s.LookupImage(name); err == nil && image != nil {
    61  		fs, err := s.graph.TarLayer(image)
    62  		if err != nil {
    63  			return err
    64  		}
    65  		defer fs.Close()
    66  
    67  		written, err := io.Copy(dest, fs)
    68  		if err != nil {
    69  			return err
    70  		}
    71  		logrus.Debugf("rendered layer for %s of [%d] size", image.ID, written)
    72  		return nil
    73  	}
    74  	return fmt.Errorf("No such image: %s", name)
    75  }