Docker has revolutionized modern software engineering, cloud infrastructure, and DevOps by standardizing how application software is built, packaged, shipped, and executed across development, testing, and production environments.

1. Virtual Machines vs Docker Containers

While Virtual Machines (VMs) virtualize physical hardware and require an entire Guest Operating System for each instance, Docker containers virtualize the host operating system kernel, making them lightweight, fast, and portable.

Feature Virtual Machines (VMs) Docker Containers
Architecture Requires Hypervisor + full Guest OS per VM. Shared host OS kernel; isolated user-space processes.
Startup Time Minutes (boots full operating system). Milliseconds to Seconds (launches process).
Image Size Gigabytes (GBs). Megabytes (MBs).
Resource Efficiency High CPU & RAM overhead. Minimal system overhead; high density per server.

2. Production Multi-Stage `Dockerfile` Example

Multi-stage builds allow separating the heavy build compilation environment from the lean production runtime image, minimizing security vulnerabilities and final image size dramatically.

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

# STAGE 2: Production Runtime Phase
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist
EXPOSE 3000
USER node
CMD ["node", "dist/server.js"]

3. Essential Docker CLI Cheat Sheet

Master these core CLI commands for building, running, and managing container environments daily:

  • docker build -t myapp:v1 . — Build a Docker image from a local Dockerfile.
  • docker run -d -p 8080:3000 --name my-app-container myapp:v1 — Run container in detached mode with port forwarding.
  • docker ps -a — List all active and stopped container instances.
  • docker logs -f <container_id> — Stream live logs from a running container.
  • docker exec -it <container_id> /bin/sh — Open an interactive shell terminal inside container.
  • docker system prune -a — Reclaim disk space by cleaning up unused images and stopped containers.

4. Multi-Container Orchestration with `docker-compose.yml`

Docker Compose allows defining multi-container web applications (e.g., Node.js web app + PostgreSQL database + Redis cache) in a single declarative file:

version: '3.8'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DB_HOST=postgres
    depends_on:
      - postgres

  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: appdb
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: secret
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:
Master Cloud & DevOps Engineering at Telugu IT Tutorials

Learn Docker, Kubernetes, AWS, and GitOps CI/CD pipelines in our hands-on live training courses. Explore Courses →