English

Master Docker for consistent development environments and scalable deployments.

Basic Dockerfile

# Node.js application
FROM node:20-alpine

WORKDIR /app

COPY package*.json ./
RUN npm ci --only=production

COPY . .

EXPOSE 3000

CMD ["node", "server.js"]

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 package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist
EXPOSE 3000
CMD ["node", "dist/server.js"]

Docker Compose

version: '3.8'

services:
  app:
    build: .
    ports:
      - '3000:3000'
    environment:
      - DATABASE_URL=postgresql://postgres:password@db:5432/mydb
    depends_on:
      - db

  db:
    image: postgres:15
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  postgres-data:

Docker Commands

# Build image
docker build -t myapp .

# Run container
docker run -d -p 3000:3000 myapp

# View logs
docker logs -f container_id

# Docker Compose commands
docker-compose up -d
docker-compose down
docker-compose logs -f

Best Practices

  1. Use multi-stage builds to reduce image size
  2. Don't run as root - use a non-root user
  3. Use .dockerignore to exclude unnecessary files
  4. Pin specific versions for reproducible builds
  5. Leverage layer caching by ordering commands properly
0
0
0
0