feat: implement image cleanup

This commit is contained in:
Jose Diaz-Gonzalez
2021-08-03 16:22:57 -04:00
parent 36c96be091
commit 9a845664e1
2 changed files with 62 additions and 40 deletions

View File

@@ -210,7 +210,7 @@ func DockerCleanup(appName string, forceCleanup bool) error {
}
// delete dangling images
imageIDs, _ := listDanglingImages(appName)
imageIDs, _ := ListDanglingImages(appName)
if len(imageIDs) > 0 {
RemoveImages(imageIDs)
}
@@ -301,6 +301,34 @@ func IsImageHerokuishBased(image string, appName string) bool {
return output != ""
}
func ListDanglingImages(appName string) ([]string, error) {
command := []string{
DockerBin(),
"image",
"list",
"--quiet",
"--filter",
"dangling=true",
}
if appName != "" {
command = append(command, []string{"--filter", fmt.Sprintf("label=com.dokku.app-name=%v", appName)}...)
}
var stderr bytes.Buffer
listCmd := NewShellCmd(strings.Join(command, " "))
listCmd.ShowOutput = false
listCmd.Command.Stderr = &stderr
b, err := listCmd.Output()
if err != nil {
return []string{}, errors.New(strings.TrimSpace(stderr.String()))
}
output := strings.Split(strings.TrimSpace(string(b[:])), "\n")
return output, nil
}
// RemoveImages removes images by ID
func RemoveImages(imageIDs []string) {
command := []string{
@@ -356,34 +384,6 @@ func listContainers(status string, appName string) ([]string, error) {
return output, nil
}
func listDanglingImages(appName string) ([]string, error) {
command := []string{
DockerBin(),
"image",
"list",
"--quiet",
"--filter",
"dangling=true",
}
if appName != "" {
command = append(command, []string{"--filter", fmt.Sprintf("label=com.dokku.app-name=%v", appName)}...)
}
var stderr bytes.Buffer
listCmd := NewShellCmd(strings.Join(command, " "))
listCmd.ShowOutput = false
listCmd.Command.Stderr = &stderr
b, err := listCmd.Output()
if err != nil {
return []string{}, errors.New(strings.TrimSpace(stderr.String()))
}
output := strings.Split(strings.TrimSpace(string(b[:])), "\n")
return output, nil
}
func pruneUnusedImages(appName string) {
command := []string{
DockerBin(),