Docker Cheat Sheet
A concise cheat sheet for docker and docker compose for day-to-day work. Commands and workflows are aligned with current Docker CLI and Compose documentation.
Basic Diagnostics
Images
docker pull nginx:stable
docker build -t app:latest .
docker build -f Dockerfile.prod -t app:prod .
docker image ls
docker image inspect nginx:stable
docker image rm nginx:stable
docker image prune
Containers
docker run --name web -d -p 8080:80 nginx:stable
docker run --rm -it alpine:latest sh
docker ps
docker ps -a
docker logs -f web
docker exec -it web sh
docker inspect web
docker stop web
docker start web
docker restart web
docker rm web
docker container prune
Volumes
docker volume ls
docker volume create pgdata
docker volume inspect pgdata
docker run -d --name pg -v pgdata:/var/lib/postgresql/data postgres:16
docker volume rm pgdata
docker volume prune
Networks
docker network ls
docker network create backend
docker run -d --name api --network backend my-api:latest
docker network inspect backend
docker network connect backend web
docker network disconnect backend web
docker network rm backend
Useful Filters
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'
docker image ls --filter dangling=true
docker container ls --filter status=exited
docker system prune -a
Docker Compose
Lifecycle
docker compose up -d
docker compose down
docker compose down -v
docker compose ps
docker compose logs -f
docker compose restart
docker compose top
docker compose config
Working with Services
docker compose build
docker compose pull
docker compose exec app sh
docker compose run --rm app pytest
docker compose up -d db redis
docker compose stop app
docker compose rm -f app
Common Scenarios
Enter a Container
Check Resource Usage
Clean Up the Environment
Minimal compose.yaml
services:
app:
build: .
ports:
- "8000:8000"
env_file:
- .env
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_DB: app
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
Practice
- Use explicit image tags such as
nginx:stableandpostgres:16instead of relying on a floatinglatest. - For debugging, start with
docker logs, thendocker inspect, thendocker exec. - For local development,
docker composeis usually enough; Swarm is uncommon in a typical DevOps stack. - Run
prunecommands carefully because they remove unused resources.