Skip to content
This repository was archived by the owner on Jan 5, 2023. It is now read-only.

Commit eab167f

Browse files
committed
finish from docker images api in docker package
1 parent 772922a commit eab167f

File tree

1 file changed

+144
-0
lines changed

1 file changed

+144
-0
lines changed

docker/image.go

+144
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
package docker
2+
3+
import (
4+
"io"
5+
"os"
6+
"fmt"
7+
"context"
8+
"io/ioutil"
9+
10+
"github.com/docker/docker/api/types"
11+
"github.com/docker/docker/api/types/filters"
12+
"github.com/docker/docker/api/types/registry"
13+
)
14+
15+
// Images -> get images from
16+
func (d *Docker) Images(opt types.ImageListOptions) ([]types.ImageSummary, error) {
17+
return d.ImageList(context.TODO(), opt)
18+
}
19+
20+
// InspectImage -> inspect image
21+
func (d *Docker) InspectImage(name string) (types.ImageInspect, error) {
22+
img, _, err := d.ImageInspectWithRaw(context.TODO(), name)
23+
24+
return img, err
25+
}
26+
27+
// PullImage -> pull image
28+
func (d *Docker) PullImage(name string) error {
29+
resp, err := d.ImagePull(context.TODO(), name, types.ImagePullOptions{})
30+
31+
if err != nil {
32+
return err
33+
}
34+
35+
_, err = io.Copy(ioutil.Discard, resp)
36+
37+
if err != nil {
38+
return err
39+
}
40+
41+
return nil
42+
}
43+
44+
// RemoveImage -> remove image
45+
func (d *Docker) RemoveImage(name string) error {
46+
_, err := d.ImageRemove(context.TODO(), name, types.ImageRemoveOptions{})
47+
48+
return err
49+
}
50+
51+
// RemoveDanglingImages remove dangling images
52+
func (d *Docker) RemoveDanglingImages() error {
53+
opt := types.ImageListOptions{
54+
Filters: filters.NewArgs(filters.Arg("dangling", "true")),
55+
}
56+
57+
images, err := d.Images(opt)
58+
59+
if err != nil {
60+
return err
61+
}
62+
63+
errIDs := []string{}
64+
65+
for _, image := range images {
66+
if err := d.RemoveImage(image.ID); err != nil {
67+
errIDs = append(errIDs, image.ID[7:19])
68+
}
69+
}
70+
71+
if len(errIDs) > 1 {
72+
return fmt.Errorf("can not remove ids\n%s", errIDs)
73+
}
74+
75+
return nil
76+
}
77+
78+
// SaveImage -> save image to tar file
79+
func (d *Docker) SaveImage(ids []string, path string) error {
80+
file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0666)
81+
82+
if err != nil {
83+
return err
84+
}
85+
86+
defer file.Close()
87+
88+
out, err := d.ImageSave(context.TODO(), ids)
89+
90+
if err != nil {
91+
return err
92+
}
93+
94+
if _, err = io.Copy(file, out); err != nil {
95+
return err
96+
}
97+
98+
return nil
99+
}
100+
101+
// LoadImage -> load image from tar file
102+
func (d *Docker) LoadImage(path string) error {
103+
file, err := os.Open(path)
104+
105+
if err != nil {
106+
return err
107+
}
108+
109+
defer file.Close()
110+
111+
_, err = d.ImageLoad(context.TODO(), file, true)
112+
113+
return err
114+
}
115+
116+
// ImportImage -> import image
117+
func (d *Docker) ImportImage(name, tag, path string) error {
118+
file, err := os.Open(path)
119+
120+
if err != nil {
121+
return err
122+
}
123+
124+
defer file.Close()
125+
126+
source := types.ImageImportSource{
127+
Source: file,
128+
SourceName: "-",
129+
}
130+
131+
opt := types.ImageImportOptions{
132+
Tag: tag,
133+
}
134+
135+
_, err = d.ImageImport(context.TODO(), source, name, opt)
136+
137+
return err
138+
}
139+
140+
// SearchImage -> search images
141+
func (d *Docker) SearchImage(name string) ([]registry.SearchResult, error) {
142+
// this code is from https://github.com/moby/moby/blob/8e610b2b55bfd1bfa9436ab110d311f5e8a74dcb/registry/service.go#L22
143+
return d.ImageSearch(context.TODO(), name, types.ImageSearchOptions{Limit: 100})
144+
}

0 commit comments

Comments
 (0)