Skip to content

Instantly share code, notes, and snippets.

@josepereza
Created February 14, 2026 17:11
Show Gist options
  • Select an option

  • Save josepereza/ea8569085562f98cce9735d170580b44 to your computer and use it in GitHub Desktop.

Select an option

Save josepereza/ea8569085562f98cce9735d170580b44 to your computer and use it in GitHub Desktop.
Docker y docker compose cheat sheets

Docker Cheat Sheet — Containerization Platform

Complete Docker reference — images, containers, volumes, networks, Compose, Dockerfile, and multi-stage builds.

Images

docker images                        # List images
docker pull nginx:latest             # Pull image
docker build -t myapp:1.0 .         # Build from Dockerfile
docker build -t myapp -f Dockerfile.prod .  # Custom Dockerfile
docker tag myapp:1.0 user/myapp:1.0 # Tag image
docker push user/myapp:1.0          # Push to registry
docker rmi image_name                # Remove image
docker image prune -a                # Remove unused images
docker save myapp > myapp.tar       # Export image
docker load < myapp.tar              # Import image
docker history myapp                 # Show image layers

Containers

# Run
docker run nginx                     # Run (foreground)
docker run -d nginx                  # Detached (background)
docker run -d -p 8080:80 nginx      # Map port
docker run -d -p 3000:3000 -p 5432:5432 app  # Multiple ports
docker run -d --name myapp app       # Named container
docker run -d -v /host:/container app  # Bind mount
docker run -d -v mydata:/data app    # Named volume
docker run -d -e DB_HOST=localhost app  # Environment variable
docker run -d --env-file .env app    # Env file
docker run --rm -it node:20 bash     # Interactive + remove on exit
docker run -d --restart unless-stopped app  # Auto-restart
docker run -d --memory 512m --cpus 0.5 app  # Resource limits
docker run -d --network mynet app    # Specific network

# Manage
docker ps                            # Running containers
docker ps -a                         # All containers (including stopped)
docker stop container_name           # Stop
docker start container_name          # Start stopped
docker restart container_name        # Restart
docker rm container_name             # Remove (stopped)
docker rm -f container_name          # Force remove (running)
docker container prune               # Remove all stopped

# Inspect & Debug
docker logs container_name           # View logs
docker logs -f container_name        # Follow logs
docker logs --tail 100 container     # Last 100 lines
docker exec -it container bash       # Shell into container
docker exec container ls /app        # Run command
docker inspect container             # Full JSON details
docker stats                         # Resource usage (live)
docker top container                 # Running processes
docker cp container:/app/file .      # Copy from container
docker cp file container:/app/       # Copy to container

Dockerfile

# Node.js app
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

# Python app
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

Multi-Stage Build

# Build stage
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Production stage
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/package*.json ./
RUN npm ci --only=production
EXPOSE 3000
USER node
CMD ["node", "dist/server.js"]

Docker Compose

# docker-compose.yml
version: "3.9"

services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgresql://user:pass@db:5432/mydb
    depends_on:
      db:
        condition: service_healthy
    volumes:
      - ./src:/app/src                # Dev: bind mount
    restart: unless-stopped
    networks:
      - backend

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mydb
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U user"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - backend

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    networks:
      - backend

volumes:
  pgdata:
  redis-data:

networks:
  backend:
# Compose commands
docker compose up                    # Start all services
docker compose up -d                 # Detached
docker compose up --build            # Rebuild + start
docker compose down                  # Stop + remove
docker compose down -v               # + remove volumes
docker compose ps                    # List services
docker compose logs -f app           # Follow service logs
docker compose exec app sh           # Shell into service
docker compose restart app           # Restart service
docker compose pull                  # Pull latest images
docker compose build --no-cache      # Rebuild without cache

Volumes & Networks

# Volumes
docker volume ls                     # List volumes
docker volume create mydata          # Create volume
docker volume inspect mydata         # Volume details
docker volume rm mydata              # Remove volume
docker volume prune                  # Remove unused

# Networks
docker network ls                    # List networks
docker network create mynet          # Create network
docker network connect mynet container  # Connect container
docker network disconnect mynet container
docker network inspect mynet
docker network prune                 # Remove unused

Cleanup

docker system df                     # Disk usage summary
docker system prune                  # Remove unused (containers, networks, images)
docker system prune -a --volumes     # Remove EVERYTHING unused
docker builder prune                 # Remove build cache

Useful Tools:

All tools at nextool.app/free-tools — 230+ free browser-based developer tools.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment