Dockerfile
常用指令说明
| 指令 | 说明 | 示例 |
|---|---|---|
FROM |
基础镜像 | FROM node:18-alpine |
WORKDIR |
工作目录 | WORKDIR /app |
COPY |
复制文件 | COPY . . |
RUN |
执行命令 | RUN npm install |
EXPOSE |
暴露端口 | EXPOSE 3000 |
CMD |
容器启动命令 | CMD ["node", "app.js"] |
ENV |
环境变量 | ENV NODE_ENV=production |
Node.js应用示例
# 使用官方Node.js运行时作为基础镜像 FROM node:18-alpine # 设置工作目录 WORKDIR /app # 复制package文件 COPY package*.json ./ # 安装依赖 RUN npm ci --only=production # 复制应用代码 COPY . . # 创建非root用户 RUN addgroup -g 1001 -S nodejs RUN adduser -S nextjs -u 1001 # 更改文件所有者 RUN chown -R nextjs:nodejs /app USER nextjs # 暴露端口 EXPOSE 3000 # 健康检查 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost:3000/health || exit 1 # 启动应用 CMD ["node", "server.js"]
多阶段构建示例
# 构建阶段 FROM node:18-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # 生产阶段 FROM node:18-alpine AS production WORKDIR /app ENV NODE_ENV=production COPY package*.json ./ RUN npm ci --only=production COPY --from=builder /app/dist ./dist EXPOSE 3000 CMD ["node", "dist/main.js"]
多阶段构建优势
- 减小最终镜像体积
- 分离构建依赖和运行依赖
- 提高安全性(不包含构建工具)