Skip to content

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

docker version
docker info
docker context ls
docker system df
docker system events

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

docker exec -it <container> sh
docker exec -it <container> bash

Check Resource Usage

docker stats
docker stats --no-stream

Clean Up the Environment

docker compose down -v --remove-orphans
docker system prune -a --volumes

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:stable and postgres:16 instead of relying on a floating latest.
  • For debugging, start with docker logs, then docker inspect, then docker exec.
  • For local development, docker compose is usually enough; Swarm is uncommon in a typical DevOps stack.
  • Run prune commands carefully because they remove unused resources.

References