mirror of
https://github.com/cuigh/swirl
synced 2024-12-31 16:23:13 +00:00
78 lines
1.9 KiB
Go
78 lines
1.9 KiB
Go
package docker
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/cuigh/swirl/misc"
|
|
"github.com/cuigh/swirl/model"
|
|
"github.com/docker/docker/api/types"
|
|
"github.com/docker/docker/api/types/filters"
|
|
"github.com/docker/docker/api/types/image"
|
|
"github.com/docker/docker/client"
|
|
)
|
|
|
|
// ImageList return images on the host.
|
|
func ImageList(name string, pageIndex, pageSize int) (images []*model.ImageListInfo, totalCount int, err error) {
|
|
ctx, cli, err := mgr.Client()
|
|
if err != nil {
|
|
return nil, 0, err
|
|
}
|
|
|
|
opts := types.ImageListOptions{}
|
|
if name != "" {
|
|
opts.Filters = filters.NewArgs()
|
|
opts.Filters.Add("reference", name)
|
|
}
|
|
summaries, err := cli.ImageList(ctx, opts)
|
|
if err != nil {
|
|
return nil, 0, err
|
|
}
|
|
//sort.Slice(images, func(i, j int) bool {
|
|
// return images[i].ID < images[j].ID
|
|
//})
|
|
|
|
totalCount = len(summaries)
|
|
start, end := misc.Page(totalCount, pageIndex, pageSize)
|
|
summaries = summaries[start:end]
|
|
if length := len(summaries); length > 0 {
|
|
images = make([]*model.ImageListInfo, length)
|
|
for i, summary := range summaries {
|
|
images[i] = model.NewImageListInfo(summary)
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// ImageInspect returns image information.
|
|
func ImageInspect(id string) (image types.ImageInspect, raw []byte, err error) {
|
|
var (
|
|
ctx context.Context
|
|
cli *client.Client
|
|
)
|
|
if ctx, cli, err = mgr.Client(); err == nil {
|
|
return cli.ImageInspectWithRaw(ctx, id)
|
|
}
|
|
return
|
|
}
|
|
|
|
// ImageHistory returns the changes in an image in history format.
|
|
func ImageHistory(id string) (histories []image.HistoryResponseItem, err error) {
|
|
var (
|
|
ctx context.Context
|
|
cli *client.Client
|
|
)
|
|
if ctx, cli, err = mgr.Client(); err == nil {
|
|
return cli.ImageHistory(ctx, id)
|
|
}
|
|
return
|
|
}
|
|
|
|
// ImageRemove remove a image.
|
|
func ImageRemove(id string) error {
|
|
return mgr.Do(func(ctx context.Context, cli *client.Client) (err error) {
|
|
opts := types.ImageRemoveOptions{}
|
|
_, err = cli.ImageRemove(ctx, id, opts)
|
|
return
|
|
})
|
|
}
|