Complete Docker reference — images, containers, volumes, networks, Compose, Dockerfile, and multi-stage builds.
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# 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# 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"]# 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.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
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 unuseddocker 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 cacheUseful Tools:
- YAML Formatter — Format docker-compose.yml
- JSON Formatter — Format Docker inspect output
- .env File Editor — Edit Docker env files
- Base64 Encoder — Encode Docker secrets
- Diff Checker — Compare Dockerfile versions
All tools at nextool.app/free-tools — 230+ free browser-based developer tools.