This repository has been archived on 2024-03-03. You can view files and clone it, but cannot push or open issues or pull requests.
minifaas/engine/docker/images.go

80 lines
1.2 KiB
Go

package docker
import (
"context"
"io"
"os"
"strings"
"github.com/docker/docker/api/types"
)
func GetImagesList() ([]string, error) {
cli, err := newCli()
if err != nil {
return nil, err
}
imgs, err := cli.ImageList(context.Background(), types.ImageListOptions{})
if err != nil {
return nil, err
}
var ret []string
for _, img := range imgs {
ret = append(ret, img.RepoTags...)
}
return ret, nil
}
func normalizeImageName(image string) string {
if !strings.Contains(image, ":") {
image += ":latest"
}
return image
}
func HasImage(image string) (bool, error) {
cli, err := newCli()
if err != nil {
return false, err
}
image = normalizeImageName(image)
imgs, err := cli.ImageList(context.Background(), types.ImageListOptions{})
if err != nil {
return false, err
}
for _, img := range imgs {
for _, name := range img.RepoTags {
if name == image {
return true, nil
}
}
}
return false, nil
}
func PullImage(image string) error {
cli, err := newCli()
if err != nil {
return err
}
image = normalizeImageName(image)
reader, err := cli.ImagePull(context.Background(), image, types.ImagePullOptions{})
if err != nil {
return err
}
defer reader.Close()
_, err = io.Copy(os.Stdout, reader)
return err
}