Docker Best Practices for Development and Production

Tools
2 minutes read

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa.

Suspendisse consequat ornare venenatis. Suspendisse mi quam, consequat sit amet lectus vitae, auctor ullamcorper nisl. Morbi mauris risus, venenatis et tortor a, finibus aliquam justo. Class aptent taciti sociosqu ad litora torquent per conubia nostra.


Image Building Best Practices

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin fermentum, nisi nec vulputate cursus:

# Good practice - specific tags
FROM node:20.10.0-alpine3.18

# Bad practice
FROM node:latest

Multi-stage Builds

Vestibulum ante ipsum primis in faucibus orci luctus:

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

# Production stage
FROM node:20.10.0-alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
CMD ["node", "dist/index.js"]

Security Best Practices

Pellentesque habitant morbi tristique senectus et netus:

Run as Non-root User

Lorem ipsum dolor sit amet, consectetur adipiscing elit:

FROM node:20.10.0-alpine
WORKDIR /app
COPY --chown=node:node . .
USER node
CMD ["npm", "start"]

Secret Management

Aliquam erat volutpat. Donec nec urna vitae lacus dictum iaculis:

# docker-compose.yml with secrets
services:
  app:
    image: my-app:1.0.0
    secrets:
      - db_password
    environment:
      - DB_USER=admin

secrets:
  db_password:
    file: ./secrets/db_password.txt

Development Workflow

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus efficitur ex a sem pretium:

# docker-compose.dev.yml
services:
  app:
    build:
      context: .
      target: development
    volumes:
      - .:/app
      - /app/node_modules
    ports:
      - "3000:3000"

Health Checks

Ut sed erat nec turpis sollicitudin blandit:

HEALTHCHECK --interval=30s --timeout=30s --start-period=5s \
  CMD curl -f http://localhost:3000/health || exit 1

"Lorem ipsum dolor sit amet. Docker best practices improve security, efficiency, and maintainability."
— Container Guide

Related Posts