Skip to main content

Clean up old Docker images from local storage with retention controls

Project description

Release Notes Downloads GitHub CI Status License: MIT

Clean Up Images from Self-Hosted Docker Registries

If you're running a self-hosted Docker registry (using tools like unregistry), you'll want to clean up old images to reclaim disk space. This tool connects to your local Docker daemon and removes old images from specified repositories while keeping the ones you actually need.

The cleanup logic is simple: keep your N most recent images and anything built in the last M days. Everything else gets removed. Images currently in use by containers are automatically skipped.

This tool is designed for managing images from self-hosted registries and probably shouldn't be used for general local Docker cleanup.

Installation

uv tool install docker-image-cleanup

Usage

The basic command takes one or more image repositories:

docker-image-cleanup myrepo/myimage

You can clean multiple repositories at once:

docker-image-cleanup myrepo/image1 myrepo/image2

Before running the cleanup for real, use --dry-run to see what would be removed:

docker-image-cleanup --dry-run myrepo/myimage

Adjust the retention policy with --num-recent and --min-age-days:

# Keep only the 3 most recent images
docker-image-cleanup --num-recent 3 myrepo/myimage

# Keep images from the last 7 days
docker-image-cleanup --min-age-days 7 myrepo/myimage

# Combine both options
docker-image-cleanup --num-recent 3 --min-age-days 7 myrepo/myimage

Docker

This tool is available as a Docker image on GHCR. It's designed to run on a schedule using a built-in cron system.

Environment Variables

  • TARGET_REPOS: A space-separated list of image repositories to clean (e.g., myrepo/image1 myrepo/image2). Required.
  • SCHEDULE: A cron expression for the cleanup schedule (default: 0 0 * * * - daily at midnight).
  • NUM_RECENT: Number of recent tags to keep (default: 5).
  • MIN_AGE_DAYS: Minimum age in days to keep tags (default: 30).

Docker Run

You must mount the Docker socket so the container can interact with your local Docker daemon:

docker run -d \
  --name docker-image-cleanup \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e TARGET_REPOS="myrepo/image1 myrepo/image2" \
  ghcr.io/iloveitaly/docker-image-cleanup:latest

Docker Compose

services:
  cleanup:
    image: ghcr.io/iloveitaly/docker-image-cleanup:latest
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TARGET_REPOS=myrepo/image1 myrepo/image2
      - SCHEDULE=0 0 * * *
      - NUM_RECENT=5
      - MIN_AGE_DAYS=30

Features

  • Removes old Docker images based on age and recency criteria
  • Keeps a configurable number of recent images (default: 5)
  • Preserves images newer than a specified age threshold (default: 30 days)
  • Automatically skips images currently in use by containers
  • Dry-run mode to preview changes before execution
  • Human-readable disk space savings reporting
  • Structured logging for detailed operation visibility

How It Works

The cleanup process is straightforward:

  1. Lists all images for the specified repository
  2. Identifies images to keep based on retention criteria (most recent N images and images newer than M days)
  3. Removes or untags images that don't meet retention criteria
  4. Skips any images currently in use by containers
  5. Reports total disk space saved

Images with multiple tags are handled intelligently. If all tags on an image would be removed, the entire image is deleted. If only some tags would be removed, those tags are untagged but the image remains.

MIT License


This project was created from iloveitaly/python-package-template

theirs

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

docker_image_cleanup-0.1.3.tar.gz (5.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

docker_image_cleanup-0.1.3-py3-none-any.whl (7.0 kB view details)

Uploaded Python 3

File details

Details for the file docker_image_cleanup-0.1.3.tar.gz.

File metadata

  • Download URL: docker_image_cleanup-0.1.3.tar.gz
  • Upload date:
  • Size: 5.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for docker_image_cleanup-0.1.3.tar.gz
Algorithm Hash digest
SHA256 f44561310f7e8a0513f6f4ad8e9010beb34a0d177d376bde450405d995b96a2c
MD5 6720a0456589e206bf9777e03f83001c
BLAKE2b-256 0bae4855821ce6592182eb3d104c22f1ebfb6dcdae9f3679d938de6763496c9f

See more details on using hashes here.

File details

Details for the file docker_image_cleanup-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: docker_image_cleanup-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 7.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for docker_image_cleanup-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 6951d9e15d13b8839f3c0814e5cd5116be5502a528796647e2d6cfc44cb33fc9
MD5 258ec3182bbee78278cbdf29f9d2cb98
BLAKE2b-256 0b79d8df3a0b6dbd5952cfa37e1245475b96b02f26b195f90edce4b3a76b53c9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page