Docker Commands Cheatsheet — Essential Docker & Compose Reference
Essential Docker commands for images, containers, volumes, networks, and Docker Compose. With practical examples for everyday development workflows.
Docker packages applications and their dependencies into portable containers. This reference covers the commands you use daily for building images, managing containers, handling data with volumes, and orchestrating multi-container apps with Docker Compose.
Images
Images are read-only templates used to create containers.
# Build an image
docker build -t myapp:latest . # Build from Dockerfile in current dir
docker build -t myapp:v1.0 -f Dockerfile.prod . # Use a specific Dockerfile
docker build --no-cache -t myapp . # Build without cache
docker build --target builder -t myapp . # Multi-stage: build specific target
docker build --build-arg NODE_ENV=production -t myapp . # Pass build arguments
# List images
docker images # List all local images
docker images -q # List image IDs only
docker images --filter "dangling=true" # List untagged images
# Pull and push
docker pull nginx:alpine # Pull from registry
docker push myrepo/myapp:latest # Push to registry
docker tag myapp:latest myrepo/myapp:v1.0 # Tag an image
# Remove images
docker rmi myapp:latest # Remove an image
docker rmi $(docker images -q -f dangling=true) # Remove dangling images
docker image prune # Remove unused images
docker image prune -a # Remove all unused images
# Inspect
docker image inspect myapp:latest # Detailed image info
docker history myapp:latest # Show image layers
Containers
Containers are running instances of images.
# Run containers
docker run nginx # Run in foreground
docker run -d nginx # Run in background (detached)
docker run -d --name web nginx # Run with a name
docker run -d -p 8080:80 nginx # Map host:container ports
docker run -d -p 3000:3000 -p 3001:3001 app # Map multiple ports
docker run -d -e NODE_ENV=production app # Set environment variable
docker run -d --env-file .env app # Load env vars from file
docker run -d -v /host/path:/container/path app # Bind mount
docker run -d -v mydata:/data app # Named volume
docker run -d --restart unless-stopped app # Restart policy
docker run -it ubuntu bash # Interactive terminal
docker run --rm -it node:20 node # Auto-remove when stopped
docker run -d --network mynet app # Connect to a network
docker run -d --memory="512m" --cpus="1.5" app # Resource limits
# List containers
docker ps # Running containers
docker ps -a # All containers (including stopped)
docker ps -q # Container IDs only
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" # Custom format
# Container lifecycle
docker start <container> # Start a stopped container
docker stop <container> # Graceful stop (SIGTERM)
docker restart <container> # Stop and start
docker kill <container> # Force stop (SIGKILL)
docker pause <container> # Freeze container
docker unpause <container> # Unfreeze container
docker rm <container> # Remove a stopped container
docker rm -f <container> # Force remove (even if running)
docker container prune # Remove all stopped containers
# Interact with running containers
docker exec -it <container> bash # Open a shell
docker exec -it <container> sh # Alpine/minimal images
docker exec <container> ls /app # Run a single command
docker logs <container> # View logs
docker logs -f <container> # Follow logs (live)
docker logs --tail 100 <container> # Last 100 lines
docker logs --since 1h <container> # Logs from last hour
docker top <container> # Running processes
docker stats # Live resource usage for all
docker stats <container> # Resource usage for one
# Copy files
docker cp file.txt <container>:/path/ # Host to container
docker cp <container>:/path/file.txt ./ # Container to host
# Inspect
docker inspect <container> # Full container details
docker inspect -f '{{.NetworkSettings.IPAddress}}' <container> # Specific field
docker port <container> # Show port mappings
Volumes
Volumes persist data beyond container lifecycle.
# Create and manage
docker volume create mydata # Create a named volume
docker volume ls # List volumes
docker volume inspect mydata # Volume details
docker volume rm mydata # Remove a volume
docker volume prune # Remove unused volumes
# Use volumes
docker run -d -v mydata:/app/data app # Named volume
docker run -d -v /host/path:/app/data app # Bind mount
docker run -d -v mydata:/app/data:ro app # Read-only mount
# Backup a volume
docker run --rm -v mydata:/data -v $(pwd):/backup \
alpine tar czf /backup/data-backup.tar.gz -C /data .
# Restore a volume
docker run --rm -v mydata:/data -v $(pwd):/backup \
alpine tar xzf /backup/data-backup.tar.gz -C /data
Networks
Networks let containers communicate with each other.
# Create and manage
docker network create mynet # Create bridge network
docker network create --driver overlay mynet # Overlay network (Swarm)
docker network ls # List networks
docker network inspect mynet # Network details
docker network rm mynet # Remove a network
docker network prune # Remove unused networks
# Connect containers
docker network connect mynet <container> # Add container to network
docker network disconnect mynet <container> # Remove from network
# Run on a specific network
docker run -d --network mynet --name api app
docker run -d --network mynet --name db postgres
# 'api' container can reach 'db' at hostname 'db'
Docker Compose
Compose defines multi-container applications in a docker-compose.yml file.
# Lifecycle
docker compose up # Start all services
docker compose up -d # Start in background
docker compose up --build # Rebuild images first
docker compose up -d --scale web=3 # Scale a service
docker compose down # Stop and remove containers
docker compose down -v # Also remove volumes
docker compose down --rmi all # Also remove images
# Management
docker compose ps # List running services
docker compose logs # View all logs
docker compose logs -f web # Follow logs for one service
docker compose exec web bash # Shell into a service
docker compose run --rm web npm test # Run a one-off command
# Build
docker compose build # Build all services
docker compose build --no-cache web # Rebuild without cache
docker compose pull # Pull latest images
# Config
docker compose config # Validate and view config
docker compose config --services # List service names
Example docker-compose.yml
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DATABASE_URL=postgres://db:5432/myapp
depends_on:
- db
- redis
volumes:
- ./src:/app/src
restart: unless-stopped
db:
image: postgres:16-alpine
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_DB: myapp
POSTGRES_PASSWORD: secret
ports:
- "5432:5432"
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
pgdata:
System Cleanup
# View disk usage
docker system df # Disk usage summary
docker system df -v # Detailed breakdown
# Clean up everything
docker system prune # Remove stopped containers, unused networks, dangling images
docker system prune -a # Also remove unused images
docker system prune -a --volumes # Nuclear option: everything unused
# Selective cleanup
docker container prune # Remove stopped containers
docker image prune # Remove dangling images
docker volume prune # Remove unused volumes
docker network prune # Remove unused networks
Useful Patterns
# Quick database for development
docker run -d --name postgres \
-e POSTGRES_PASSWORD=dev \
-p 5432:5432 \
-v pgdata:/var/lib/postgresql/data \
postgres:16-alpine
# Quick Redis
docker run -d --name redis -p 6379:6379 redis:7-alpine
# Run a one-off command in a fresh container
docker run --rm -it node:20 node -e "console.log(process.version)"
# Check what's using disk space
docker system df -v
# Follow all container logs
docker compose logs -f --tail=50
Generate Dockerfiles with the Dockerfile Generator or Compose files with the Docker Compose Generator.
Comments