diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..407597d
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,3 @@
+FROM alpine:latest
+ADD README.md /somefile.txt
+RUN cp /somefile.txt /root/somefile.txt
\ No newline at end of file
diff --git a/README.md b/README.md
index b084ece..d3edb03 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,5 @@
 # docker-image-explorer
-I'll probably rename this since it acronyms to D.I.E. ... details...
+```
+docker build -t . die-test:latest
+go run main.go
+```
\ No newline at end of file
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..7bae80c
--- /dev/null
+++ b/main.go
@@ -0,0 +1,56 @@
+package main
+
+import (
+	"encoding/json"
+	"fmt"
+
+	"github.com/docker/docker/client"
+	"golang.org/x/net/context"
+)
+
+func main() {
+	ctx := context.Background()
+	cli, err := client.NewEnvClient()
+	if err != nil {
+		panic(err)
+	}
+
+	// imageID := "golang:alpine"
+	imageID := "die-test:latest"
+
+	for {
+		inspect, _, err := cli.ImageInspectWithRaw(ctx, imageID)
+		if err != nil {
+			panic(err)
+		}
+
+		history, err := cli.ImageHistory(ctx, imageID)
+		if err != nil {
+			panic(err)
+		}
+
+		historyStr, err := json.MarshalIndent(history, "", "  ")
+		if err != nil {
+			panic(err)
+		}
+
+		layerStr := ""
+		for idx, layer := range inspect.RootFS.Layers {
+			prefix := "├── "
+			if idx == len(inspect.RootFS.Layers)-1 {
+				prefix = "└── "
+			}
+			layerStr += fmt.Sprintf("%s%s\n", prefix, layer)
+		}
+
+		fmt.Printf("Image: %s\nId: %s\nParent: %s\nLayers: %d\n%sHistory: %s\n", imageID, inspect.ID, inspect.Parent, len(inspect.RootFS.Layers), layerStr, historyStr)
+
+		fmt.Println("\n")
+
+		if inspect.Parent == "" {
+			break
+		} else {
+			imageID = inspect.Parent
+		}
+	}
+}