DEV Community

WDSEGA
WDSEGA

Posted on

Docker容器化Node.js应用:从Dockerfile到生产部署

为什么需要Docker?

  • 环境一致性:开发、测试、生产环境完全一致
  • 快速部署:秒级启动,一键部署
  • 资源隔离:每个容器独立运行
  • 易于扩展:配合K8s轻松实现自动扩缩容

基础Dockerfile

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Enter fullscreen mode Exit fullscreen mode

生产级多阶段构建

# 第一阶段:安装依赖
FROM node:18-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

# 第二阶段:运行
FROM node:18-alpine AS runner
RUN addgroup -g 1001 -S nodejs && adduser -S nodejs -u 1001
WORKDIR /app
COPY --from=deps --chown=nodejs:nodejs /app ./
USER nodejs
ENV NODE_ENV=production
HEALTHCHECK --interval=30s CMD wget --spider http://localhost:3000/health || exit 1
EXPOSE 3000
CMD ["node", "app.js"]
Enter fullscreen mode Exit fullscreen mode

Docker Compose开发环境

version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/app
    environment:
      - NODE_ENV=development
  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: secret
Enter fullscreen mode Exit fullscreen mode

镜像优化技巧

镜像 大小 适用场景
node:18 1.1GB 开发环境
node:18-slim 250MB 通用场景
node:18-alpine 180MB 生产环境

最佳实践

  1. 使用Alpine基础镜像减小体积
  2. 多阶段构建分离编译和运行环境
  3. 使用非root用户运行应用
  4. 配置健康检查
  5. 设置合理的资源限制

📢 本文为精简版,完整版包含独家工具推荐和深度分析,请访问 WD Tech Blog 查看!

关注我的博客获取最新科技资讯、AI教程和效率工具推荐!

Top comments (0)