Overview
This guide covers essential commands for managing Docker images and containers. Learn how to list, inspect, remove, and clean up Docker resources efficiently.
Key Concepts:
- Image: Template/blueprint for containers (like a class)
- Container: Running instance of an image (like an object)
- Containers are built from images
Quick Reference
Images
- List:
docker images - Remove:
docker rmi <image_id_or_repo:tag> - Remove all:
docker rmi $(docker images -q)
Containers
- List running:
docker ps - List all:
docker ps -a - Stop:
docker stop <id_or_name> - Remove:
docker rm <id_or_name> - Stop and remove:
docker rm -f <id_or_name>
Managing Docker Images
List Images
# List all images
docker images
# List images with more details
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}\t{{.CreatedAt}}"
# List only image IDs
docker images -q
# Filter by repository name
docker images | grep hello-service
# Show disk usage
docker system dfInspect Images
# Show detailed information about an image
docker inspect <image_id_or_repo:tag>
# Show image history (layers)
docker history <image_id_or_repo:tag>
# Show image size
docker images <image_id_or_repo:tag>Remove Images
# Remove a specific image
docker rmi <image_id_or_repo:tag>
# Remove by image ID
docker rmi <image_id>
# Force remove (even if used by containers)
docker rmi -f <image_id_or_repo:tag>
# Remove multiple images
docker rmi image1:tag1 image2:tag2
# Remove all images
docker rmi $(docker images -q)
# Remove dangling images (untagged)
docker image prune
# Remove all unused images
docker image prune -aBuild Images
# Build from Dockerfile
docker build -t <image_name>:<tag> .
# Build without cache
docker build --no-cache -t <image_name>:<tag> .
# Build with specific Dockerfile
docker build -f Dockerfile.prod -t <image_name>:<tag> .Tag Images
# Tag an image
docker tag <source_image>:<tag> <target_image>:<tag>
# Example: Tag for ECR
docker tag hello-service:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-service:latestManaging Docker Containers
List Containers
# List running containers
docker ps
# List all containers (including stopped)
docker ps -a
# List only container IDs
docker ps -q
# List with custom format
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Names}}"
# Filter containers
docker ps --filter "name=hello-service"
docker ps --filter "status=running"
docker ps --filter "status=exited"Inspect Containers
# Show detailed information about a container
docker inspect <container_id_or_name>
# Show container logs
docker logs <container_id_or_name>
# Follow logs in real-time
docker logs -f <container_id_or_name>
# Show last N lines of logs
docker logs --tail 100 <container_id_or_name>
# Show container resource usage
docker stats <container_id_or_name>
# Show all container stats
docker statsStart/Stop Containers
# Start a container
docker start <container_id_or_name>
# Stop a container
docker stop <container_id_or_name>
# Stop container gracefully (SIGTERM, then SIGKILL after timeout)
docker stop <container_id_or_name>
# Force stop (SIGKILL immediately)
docker kill <container_id_or_name>
# Restart a container
docker restart <container_id_or_name>
# Pause a container
docker pause <container_id_or_name>
# Unpause a container
docker unpause <container_id_or_name>Remove Containers
# Remove a stopped container
docker rm <container_id_or_name>
# Remove a running container (force)
docker rm -f <container_id_or_name>
# Remove multiple containers
docker rm container1 container2 container3
# Remove all stopped containers
docker container prune
# Remove all containers (stopped and running)
docker rm -f $(docker ps -aq)Execute Commands in Containers
# Execute a command in a running container
docker exec <container_id_or_name> <command>
# Open interactive shell
docker exec -it <container_id_or_name> /bin/sh
docker exec -it <container_id_or_name> /bin/bash
# Run command as root
docker exec -u root -it <container_id_or_name> /bin/sh
# Example: Check Java version
docker exec hello-service-container java -versionCleanup Strategies
Remove Unused Resources
# Remove all stopped containers
docker container prune
# Remove all unused images
docker image prune -a
# Remove all unused volumes
docker volume prune
# Remove all unused networks
docker network prune
# Remove everything unused (containers, networks, images, build cache)
docker system prune
# Remove everything including volumes (more aggressive)
docker system prune -a --volumesClean Up by Pattern
# Remove containers matching a pattern
docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm
# Remove images matching a pattern
docker images | grep "pattern" | awk '{print $3}' | xargs docker rmi
# Example: Remove all hello-service containers
docker ps -a | grep hello-service | awk '{print $1}' | xargs docker rm -fDisk Usage Analysis
# Show disk usage summary
docker system df
# Show detailed disk usage
docker system df -v
# Show space used by images
docker images --format "{{.Repository}}:{{.Tag}} - {{.Size}}"Common Workflows
Complete Cleanup
# Stop all running containers
docker stop $(docker ps -q)
# Remove all containers
docker rm $(docker ps -aq)
# Remove all images
docker rmi $(docker images -q)
# Or use system prune (safer)
docker system prune -a --volumesRemove Specific Application
# 1. Stop containers
docker stop <container_id_or_name>
# 2. Remove containers
docker rm <container_id_or_name>
# 3. Remove images
docker rmi <image_id_or_repo:tag>
# Example:
docker stop hello-service-container
docker rm hello-service-container
docker rmi hello-service:latestClean Up After Build Failures
# Remove dangling images (failed builds)
docker image prune
# Remove build cache
docker builder prune
# Remove all build cache
docker builder prune -aBest Practices
1. Regular Cleanup
- Run
docker system pruneperiodically to free up disk space - Remove unused images and containers regularly
2. Use Specific Tags
- Avoid using
latesttag in production - Use version tags (e.g.,
v1.0.0,2024-01-15)
3. Stop Before Remove
- Always stop containers before removing them
- Use
docker stopfor graceful shutdown
4. Check Before Removing
- Use
docker ps -ato see all containers before bulk removal - Use
docker imagesto verify images before removal
5. Use Prune Commands
- Prefer
docker system pruneover manual removal - Safer and more efficient
6. Monitor Disk Usage
- Regularly check
docker system df - Set up alerts for disk space
Troubleshooting
Common Issues
| Issue | Solution |
|---|---|
| ”Cannot remove image: image is being used” | Stop/remove containers using the image first |
| ”Cannot remove container: container is running” | Stop container first: docker stop <id> |
| ”No space left on device” | Run docker system prune -a --volumes |
| ”Image not found” | Check with docker images to verify image name/tag |
| ”Container name already in use” | Remove existing container or use different name |
Force Removal
# Force remove container
docker rm -f <container_id>
# Force remove image
docker rmi -f <image_id>
# Force remove everything
docker system prune -a --volumes --forceRelated Topics
- 00.Docker Intro - Docker basics and concepts
- Dockerlize-Springboot - Dockerizing Spring Boot applications
- Docker Compose Config - Managing containers with Docker Compose