save an image filesystem layers
This commit is contained in:
parent
8f16cb8a71
commit
2245ffa042
65
main.go
65
main.go
@ -1,13 +1,60 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
|
||||
"github.com/docker/docker/client"
|
||||
"golang.org/x/net/context"
|
||||
)
|
||||
|
||||
func check(e error) {
|
||||
if e != nil {
|
||||
panic(e)
|
||||
}
|
||||
}
|
||||
|
||||
func saveImage(readCloser io.ReadCloser) {
|
||||
defer readCloser.Close()
|
||||
|
||||
path := "image"
|
||||
if _, err := os.Stat(path); os.IsNotExist(err) {
|
||||
os.Mkdir(path, 0755)
|
||||
}
|
||||
|
||||
fo, err := os.Create("image/cache.tar")
|
||||
check(err)
|
||||
|
||||
defer func() {
|
||||
if err := fo.Close(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
w := bufio.NewWriter(fo)
|
||||
|
||||
buf := make([]byte, 1024)
|
||||
for {
|
||||
n, err := readCloser.Read(buf)
|
||||
if err != nil && err != io.EOF {
|
||||
panic(err)
|
||||
}
|
||||
if n == 0 {
|
||||
break
|
||||
}
|
||||
|
||||
if _, err := w.Write(buf[:n]); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
if err = w.Flush(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
cli, err := client.NewEnvClient()
|
||||
@ -18,21 +65,20 @@ func main() {
|
||||
// imageID := "golang:alpine"
|
||||
imageID := "die-test:latest"
|
||||
|
||||
fmt.Println("Saving Image...")
|
||||
readCloser, err := cli.ImageSave(ctx, []string{imageID})
|
||||
check(err)
|
||||
saveImage(readCloser)
|
||||
|
||||
for {
|
||||
inspect, _, err := cli.ImageInspectWithRaw(ctx, imageID)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
check(err)
|
||||
|
||||
history, err := cli.ImageHistory(ctx, imageID)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
check(err)
|
||||
|
||||
historyStr, err := json.MarshalIndent(history, "", " ")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
check(err)
|
||||
|
||||
layerStr := ""
|
||||
for idx, layer := range inspect.RootFS.Layers {
|
||||
@ -53,4 +99,5 @@ func main() {
|
||||
imageID = inspect.Parent
|
||||
}
|
||||
}
|
||||
fmt.Println("See './image' for the cached image tar")
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user