docker-containerization

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Docker & Containerization

Docker & 容器化

Best practices for Docker and containerized applications.
Docker与容器化应用的最佳实践。

When to Use

适用场景

  • Containerizing applications
  • Writing or optimizing Dockerfiles
  • Setting up development or production environments
  • 应用容器化
  • 编写或优化Dockerfile
  • 搭建开发或生产环境

Dockerfile Best Practices

Dockerfile最佳实践

Multi-Stage Builds

多阶段构建

dockerfile
undefined
dockerfile
undefined

Build stage

Build stage

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

Production stage

Production stage

FROM node:20-alpine WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules EXPOSE 3000 CMD ["node", "dist/index.js"]
undefined
FROM node:20-alpine WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules EXPOSE 3000 CMD ["node", "dist/index.js"]
undefined

Security Practices

安全实践

dockerfile
undefined
dockerfile
undefined

Use specific versions, not latest

Use specific versions, not latest

FROM python:3.11-slim
FROM python:3.11-slim

Create non-root user

Create non-root user

RUN useradd -m appuser USER appuser
RUN useradd -m appuser USER appuser

Minimize layers and cache

Minimize layers and cache

RUN apt-get update && apt-get install -y --no-install-recommends
package
&& rm -rf /var/lib/apt/lists/*
undefined
RUN apt-get update && apt-get install -y --no-install-recommends
package
&& rm -rf /var/lib/apt/lists/*
undefined

.dockerignore

.dockerignore

node_modules
.git
*.log
.env
.DS_Store
node_modules
.git
*.log
.env
.DS_Store

Docker Compose

Docker Compose

yaml
version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    depends_on:
      - db
  
  db:
    image: postgres:15-alpine
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:
yaml
version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    depends_on:
      - db
  
  db:
    image: postgres:15-alpine
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

Resources

参考资源