为什么需要Docker?
- 环境一致性:开发、测试、生产环境完全一致
- 快速部署:秒级启动,一键部署
- 资源隔离:每个容器独立运行
- 易于扩展:配合K8s轻松实现自动扩缩容
基础Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
生产级多阶段构建
# 第一阶段:安装依赖
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"]
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
镜像优化技巧
| 镜像 | 大小 | 适用场景 |
|---|---|---|
| node:18 | 1.1GB | 开发环境 |
| node:18-slim | 250MB | 通用场景 |
| node:18-alpine | 180MB | 生产环境 |
最佳实践
- 使用Alpine基础镜像减小体积
- 多阶段构建分离编译和运行环境
- 使用非root用户运行应用
- 配置健康检查
- 设置合理的资源限制
📢 本文为精简版,完整版包含独家工具推荐和深度分析,请访问 WD Tech Blog 查看!
关注我的博客获取最新科技资讯、AI教程和效率工具推荐!
Top comments (0)