github.com/simonferquel/app@v0.6.1-0.20181012141724-68b7cccf26ac/internal/image/image.go (about) 1 package image 2 3 import ( 4 "fmt" 5 "os" 6 "os/exec" 7 "path/filepath" 8 9 "github.com/docker/app/internal/slices" 10 composetypes "github.com/docker/cli/cli/compose/types" 11 "github.com/pkg/errors" 12 ) 13 14 // Add add service images to the app package 15 func Add(appname string, services []string, config *composetypes.Config) error { 16 if err := os.Mkdir(filepath.Join(appname, "images"), 0755); err != nil { 17 return errors.Wrap(err, "cannot create 'images' folder") 18 } 19 for _, s := range config.Services { 20 if len(services) != 0 && !slices.ContainsString(services, s.Name) { 21 continue 22 } 23 cmd := exec.Command("docker", "save", "-o", filepath.Join(appname, "images", s.Name), s.Image) 24 output, err := cmd.CombinedOutput() 25 if err != nil { 26 fmt.Println(output) 27 return err 28 } 29 } 30 return nil 31 } 32 33 // Load loads app packed images to the docker daemon 34 func Load(appname string, services []string) error { 35 imageDir, err := os.Open(filepath.Join(appname, "images")) 36 if err != nil { 37 return fmt.Errorf("no images found in app") 38 } 39 defer imageDir.Close() 40 images, err := imageDir.Readdirnames(0) 41 if err != nil { 42 return err 43 } 44 for _, i := range images { 45 if len(services) != 0 && !slices.ContainsString(services, i) { 46 continue 47 } 48 cmd := exec.Command("docker", "load", "-i", filepath.Join(appname, "images", i)) 49 output, err := cmd.CombinedOutput() 50 if err != nil { 51 fmt.Println(output) 52 return err 53 } 54 } 55 return nil 56 }