为 Node.js、Python、Go、Java 和 Nginx 生成可用于生产环境的 Dockerfile,支持多阶段构建和优化的层顺序。
# Build stage FROM node:20-alpine AS builder WORKDIR /app # Copy dependency manifests first to leverage Docker layer cache COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # Production stage FROM node:20-alpine WORKDIR /app RUN addgroup -S appgroup && adduser -S appuser -G appgroup USER appuser COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules ENV NODE_ENV=production EXPOSE 3000 CMD ["node", "dist/index.js"]
.git .gitignore *.md .env .env.* .DS_Store Thumbs.db node_modules npm-debug.log* .npm dist build coverage .nyc_output .eslintcache
Dockerfile 是一个文本文件,用于定义如何构建容器镜像。指令顺序对缓存效率至关重要:依赖项会在源代码复制之前安装,这样 Docker 就可以在仅应用程序代码更改时重用缓存层,而不是在依赖项更改时重用缓存层。
选择语言和基础镜像,可选择启用或禁用多阶段构建,设置构建和启动命令,并添加任何环境变量。生成器默认强制执行最佳实践的层级顺序,并创建一个非 root 用户以确保安全。
多阶段构建通过将构建环境与运行时环境分离,生成更小的最终镜像。构建阶段编译应用程序,然后仅将编译后的产物复制到精简的运行时阶段。这对于 Go 和 Java 应用程序尤其有效。