Skip to content
Codeloom

Cheat Sheets

Docker Cheat Sheet

Docker commands you need every day — images, containers, volumes, networks, Compose, and Dockerfile patterns in one quick-reference page.

7 sections 23 snippets

Images

Build an image
docker build -t myapp:latest .
docker build -t myapp:v1.0 -f Dockerfile.prod .
List images
docker images
docker images --filter 'dangling=true'
Pull and push
docker pull nginx:alpine
docker tag myapp:latest registry.io/myapp:latest
docker push registry.io/myapp:latest
Remove images
docker rmi myapp:latest
docker image prune          # remove dangling
docker image prune -a       # remove all unused

Containers

Run a container
docker run -d --name web -p 8080:80 nginx:alpine
docker run -it --rm ubuntu bash
docker run -d -e DB_HOST=db --env-file .env myapp
List containers
docker ps            # running
docker ps -a         # all
Stop and remove
docker stop web
docker rm web
docker rm -f web     # force
docker container prune
Exec into container
docker exec -it web sh
docker exec web cat /etc/nginx/nginx.conf
Logs
docker logs web
docker logs -f web          # follow
docker logs --tail 50 web   # last 50 lines

Volumes

Create and list
docker volume create mydata
docker volume ls
Mount volumes
docker run -v mydata:/app/data myapp
docker run -v $(pwd)/src:/app/src myapp

Use named volumes for persistence, bind mounts for development

Remove
docker volume rm mydata
docker volume prune

Networks

Create and list
docker network create mynet
docker network ls
Connect containers
docker run -d --network mynet --name api myapp
docker run -d --network mynet --name db postgres

Containers on the same network can reach each other by name

Inspect
docker network inspect mynet

Dockerfile Patterns

Basic Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
Multi-stage build
FROM node:20-alpine AS builder
WORKDIR /app
COPY . .
RUN npm ci && npm run build

FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
.dockerignore
node_modules
.git
*.md
.env
dist

Docker Compose

Basic compose.yaml
services:
  web:
    build: .
    ports:
      - '3000:3000'
    environment:
      - DB_HOST=db
    depends_on:
      - db
  db:
    image: postgres:16-alpine
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: secret

volumes:
  pgdata:
Commands
docker compose up -d
docker compose down
docker compose logs -f web
docker compose exec web sh
docker compose build --no-cache
Profiles
# compose.yaml
services:
  debug:
    profiles: [dev]
    image: busybox

# Run with profile:
docker compose --profile dev up

Cleanup

Remove everything unused
docker system prune          # containers, networks, images
docker system prune -a       # include unused images
docker system prune --volumes
Disk usage
docker system df
docker system df -v