Clean up old Docker images from local storage with retention controls
Project description
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
pip install docker-image-cleanup
Or using uv:
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
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:
- Lists all images for the specified repository
- Identifies images to keep based on retention criteria (most recent N images and images newer than M days)
- Removes or untags images that don't meet retention criteria
- Skips any images currently in use by containers
- 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.
Requirements
- Python 3.11+
- Docker daemon running locally
- Docker Python SDK
Development
# Clone the repository
git clone https://github.com/iloveitaly/docker-image-cleanup
cd docker-image-cleanup
# Install dependencies
uv sync
# Run tests
pytest
# Run the CLI
uv run docker-image-cleanup --help
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file docker_image_cleanup-0.1.0.tar.gz.
File metadata
- Download URL: docker_image_cleanup-0.1.0.tar.gz
- Upload date:
- Size: 3.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.8.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5536ebd85e5f0fe7fc40717827d27f77a651cd179392d0060d8a32fdcc5c7177
|
|
| MD5 |
3b2aa7b470320df7a2f88446cdff0963
|
|
| BLAKE2b-256 |
0672b2e130f23c1e7b8e69e226c87e85d856bf1df106660e2354b00064f0bc8f
|
File details
Details for the file docker_image_cleanup-0.1.0-py3-none-any.whl.
File metadata
- Download URL: docker_image_cleanup-0.1.0-py3-none-any.whl
- Upload date:
- Size: 4.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.8.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7dee3818805ec56a84c082842b3c7b08863847aa2a5995637421185923bf2437
|
|
| MD5 |
e9dddb84e8b44b6f577b34c202a471bb
|
|
| BLAKE2b-256 |
5e1d0b1988d89420be59233b81e0b68170d629d63ef0bccd00d1791e8f78ae50
|