Docker Commands Every Developer Must Know
Docker has become essential for modern development. This guide covers the 30 most useful Docker commands with practical examples for building, running, and managing containers.
Getting Started
First, verify Docker is installed:
docker --version
docker compose version # for docker-compose v2
1. Managing Images
Images are the blueprints for your containers. Pull an image from Docker Hub:
docker pull nginx:latest
docker pull node:20-alpine
List all downloaded images:
docker images
docker images -a # show intermediate images
Remove unused images to free up disk space:
docker image prune -a # remove all unused images
docker rmi nginx:latest # remove specific image
2. Running Containers
Start a container from an image:
docker run nginx
docker run -d nginx # run in detached mode (background)
docker run -p 8080:80 nginx # map port 8080 to container port 80
Run with a name and environment variables:
docker run -d --name my-app -p 3000:3000 \
-e NODE_ENV=production \
-v $(pwd)/data:/app/data \
my-image:latest
3. Container Lifecycle
View running containers:
docker ps # running containers only
docker ps -a # all containers (including stopped)
docker ps --filter "status=exited"
Start, stop, and restart containers:
docker stop my-app
docker start my-app
docker restart my-app
Remove containers:
docker rm my-app # remove stopped container
docker rm -f my-app # force remove (even if running)
4. Viewing Logs and Debugging
Stream logs from a running container:
docker logs -f my-app
docker logs --tail 100 my-app # last 100 lines
docker logs --since 1h my-app # logs from last hour
Inspect container details:
docker inspect my-app
docker exec -it my-app sh # open shell inside container
5. Docker Compose Commands
Docker Compose manages multi-container applications. Start all services:
docker compose up -d # start in background
docker compose up --build # rebuild before starting
Stop and remove all services:
docker compose down
docker compose down -v # also remove volumes
View logs and status:
docker compose logs -f
docker compose ps
6. Building Images
Build a custom image from a Dockerfile:
docker build -t my-app:latest .
docker build -t my-app:latest --build-arg NODE_ENV=production .
Build with no cache (useful when you need a fresh build):
docker build --no-cache -t my-app:latest .
7. Cleaning Up
Docker can accumulate a lot of disk space over time. Clean up all unused resources:
docker system prune # remove stopped containers, unused networks
docker system prune -a # also remove all unused images
docker system df # show disk usage
Common Workflows
Development Mode
docker compose up --build -d
docker compose logs -f app
docker compose exec app npm run dev
Production Deployment
docker build -t my-app:latest .
docker tag my-app:latest registry.com/my-app:v1.0.0
docker push registry.com/my-app:v1.0.0
Troubleshooting
Container exits immediately: Check logs with docker logs container-name
Port already in use: Find the process: docker ps | grep 8080 or use lsof -i :8080
Permission denied: On Linux, you may need sudo docker ... or add your user to the docker group.