Docker System and Cleanup
Why Cleanup Matters
Docker accumulates data over time:
- Stopped containers not removed
- Old images no longer needed
- Unused volumes consuming disk space
- Unused networks
Without cleanup, Docker can fill up your disk. This guide covers all commands to monitor and clean your Docker environment.
docker system df - Show Disk Usage
Shows how much disk space Docker is using.
# Show disk usage summary
docker system df
# Show verbose output (details for each object)
docker system df -v
docker system df --verbose
Example output:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 12 5 4.2GB 2.1GB (50%)
Containers 3 1 45MB 40MB (88%)
Local Volumes 8 3 1.2GB 800MB (66%)
Build Cache 0 0 0B 0B
docker system prune - Remove All Unused Resources
The most powerful cleanup command - removes everything that is not actively in use.
# Remove stopped containers, unused networks, dangling images, build cache
docker system prune
# Also remove all unused images (not just dangling)
docker system prune -a
docker system prune --all
# Remove without asking for confirmation
docker system prune -f
# Remove everything including unused volumes
docker system prune -a --volumes
# Remove everything, no prompt
docker system prune -a --volumes -f
# Filter by age (remove things older than 24h)
docker system prune --filter "until=24h"
> Warning: docker system prune -a --volumes removes a lot of data. Make sure you don't need it.
docker system info - Show System Information
Detailed information about the Docker installation.
docker system info
docker info
Shows:
- Number of containers (running, paused, stopped)
- Number of images
- Docker version
- Storage driver
- Logging driver
- Operating system and kernel
- Total memory and CPU
- Registry information
Filter specific fields:
docker info --format "{{.ServerVersion}}"
docker info --format "{{.Containers}}"
docker info --format "{{.ContainersRunning}}"
docker info --format "{{.Images}}"
docker info --format "{{.MemTotal}}"
docker info --format "{{.NCPU}}"
docker system events - Stream Real-Time Events
Streams real-time events from the Docker daemon.
# Stream all events
docker system events
docker events
# Filter by event type
docker events --filter "event=start"
docker events --filter "event=stop"
docker events --filter "event=create"
docker events --filter "event=destroy"
docker events --filter "event=kill"
docker events --filter "event=pull"
# Filter by container name
docker events --filter "container=my-nginx"
# Filter by image
docker events --filter "image=nginx"
# Filter by type (container, image, volume, network)
docker events --filter "type=container"
docker events --filter "type=image"
docker events --filter "type=volume"
docker events --filter "type=network"
# Show events from the past hour
docker events --since 1h
# Show events in a time range
docker events --since "2024-01-01" --until "2024-01-02"
# Output as JSON
docker events --format '{{json .}}'
docker version - Show Docker Version
docker version
docker version --format "{{.Server.Version}}"
docker version --format "{{.Client.Version}}"
docker stats - Real-Time Resource Usage
Shows live CPU, memory, and network stats for running containers.
# Live stats for all running containers
docker stats
# Stats for a specific container
docker stats my-nginx
# One-time snapshot (not live)
docker stats --no-stream
# Show all containers (including stopped - shows 0 for stopped)
docker stats -a
# Custom format
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"
# JSON output
docker stats --format "{{json .}}"
Individual Resource Cleanup Commands
Clean Up Containers
# Remove all stopped containers
docker container prune
# Remove without confirmation
docker container prune -f
# Remove containers stopped more than 24 hours ago
docker container prune --filter "until=24h"
# Remove all containers (running + stopped) - be careful!
docker rm -f $(docker ps -aq)
Clean Up Images
# Remove dangling images (no tag, not used by any container)
docker image prune
# Remove all unused images (not used by any container)
docker image prune -a
# Remove without confirmation
docker image prune -f
docker image prune -a -f
# Remove images older than 48 hours
docker image prune --filter "until=48h"
# Remove all images - be very careful!
docker rmi $(docker images -q)
Clean Up Volumes
# Remove unused volumes
docker volume prune
# Remove without confirmation
docker volume prune -f
# Remove all volumes (including used ones) - DANGER: data loss!
docker volume rm $(docker volume ls -q)
Clean Up Networks
# Remove unused networks
docker network prune
# Remove without confirmation
docker network prune -f
# Remove specific networks
docker network rm network1 network2
Clean Up Build Cache
# Remove all build cache
docker builder prune
# Remove all build cache without confirmation
docker builder prune -f
# Remove cache older than 24 hours
docker builder prune --filter "until=24h"
# Remove all build cache including build stages
docker builder prune -a
Complete Disk Cleanup Script
Run this to free up maximum disk space:
# 1. Show current disk usage
docker system df
# 2. Stop all running containers (optional)
# docker stop $(docker ps -q)
# 3. Remove stopped containers
docker container prune -f
# 4. Remove unused images
docker image prune -a -f
# 5. Remove unused volumes
docker volume prune -f
# 6. Remove unused networks
docker network prune -f
# 7. Remove build cache
docker builder prune -a -f
# 8. Or do it all at once
docker system prune -a --volumes -f
# 9. Check disk usage after cleanup
docker system df
Commands Quick Reference
| Command | What it does |
|---|---|
docker system df | Show disk usage |
docker system df -v | Show detailed disk usage |
docker system prune | Remove unused containers, networks, dangling images |
docker system prune -a | Also remove unused images |
docker system prune -a --volumes -f | Remove everything unused |
docker system info | Show Docker system info |
docker system events | Stream live Docker events |
docker version | Show Docker version |
docker stats | Live resource usage |
docker stats --no-stream | One-time resource snapshot |
docker container prune | Remove stopped containers |
docker image prune -a | Remove unused images |
docker volume prune | Remove unused volumes |
docker network prune | Remove unused networks |
docker builder prune | Remove build cache |
FAQ
Should I memorize every Docker command?+
No. Memorize the core workflow first: build, run, list, inspect, logs, exec, stop, remove, and clean up. Then learn specialized commands when you need them.
Is Docker only for developers?+
No. Docker is useful for system administrators, infrastructure engineers, DevOps engineers, cloud engineers, support engineers, and learners who want repeatable labs.
What should I do after reading this guide?+
Run the examples, write down what each command changes, rebuild the workflow with Docker Compose, and then add one CI/CD step that builds the image automatically.
Need help applying Docker in a real project?
Work directly with Muhammad Irfan Aslam for Docker, Linux, DevOps, CI/CD, cloud deployment, or infrastructure troubleshooting support.
Hire Me for Support