Docker 容器化的核心价值

容器化已成为现代应用部署的标准。本文分享 Docker 容器化开发的最佳实践,帮助你构建高效、安全的容器应用。

1. 多阶段构建

使用多阶段构建大幅减小镜像体积:

# 构建阶段
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 运行阶段
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/server.js"]

2. 镜像层优化

合理组织 Dockerfile 指令,利用层缓存:

3. 安全配置

容器安全是生产环境的重中之重:

# 使用非 root 用户
RUN addgroup -g 1001 appuser && \
    adduser -D -u 1001 -G appuser appuser
USER appuser

# 只读文件系统
docker run --read-only --tmpfs /tmp myapp

# 资源限制
docker run --memory="512m" --cpus="1.0" myapp

4. 健康检查

添加健康检查确保容器正常运行:

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

5. 日志管理

合理配置日志驱动和输出:

6. Docker Compose 最佳实践

开发环境使用 Docker Compose 管理多容器应用:

version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=development
    volumes:
      - .:/app
      - /app/node_modules
    depends_on:
      - db
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: myapp
    volumes:
      - pgdata:/var/lib/postgresql/data

实战经验

通过应用这些最佳实践,我们将一个 Node.js 应用的镜像从 1.2GB 减小到 180MB,启动时间从 15 秒降低到 3 秒。

总结

Docker 容器化不仅仅是技术选择,更是一套完整的开发和部署理念。持续学习和实践这些最佳实践,才能充分发挥容器化的价值。