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

CommandWhat it does
docker system dfShow disk usage
docker system df -vShow detailed disk usage
docker system pruneRemove unused containers, networks, dangling images
docker system prune -aAlso remove unused images
docker system prune -a --volumes -fRemove everything unused
docker system infoShow Docker system info
docker system eventsStream live Docker events
docker versionShow Docker version
docker statsLive resource usage
docker stats --no-streamOne-time resource snapshot
docker container pruneRemove stopped containers
docker image prune -aRemove unused images
docker volume pruneRemove unused volumes
docker network pruneRemove unused networks
docker builder pruneRemove 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