Dockerfile 生成器
FROM node:20-alpine WORKDIR /app # 复制依赖文件 COPY package*.json ./ # 安装依赖 RUN npm ci --only=production # 复制应用代码 COPY . . EXPOSE 3000 CMD ["/bin/sh", "-c", "node index.js"]
- 使用 alpine 镜像可以大幅减小镜像体积(通常只有 slim 的 1/3)
- 多阶段构建可以分离构建环境和运行环境,减小最终镜像
- 使用非 root 用户运行以提高安全性
- 合理使用 .dockerignore 排除 node_modules、.git 等不必要文件
- 将不常变化的层(如依赖安装)放在前面以利用 Docker 缓存
- 使用 npm ci 替代 npm install 确保依赖一致性
| 场景 | 说明 | 建议 |
|---|---|---|
| Node.js 项目 | 为 Express/Nest.js/Nuxt 等 Node.js 项目生成 Dockerfile | 选择 Node.js 模板,使用 alpine 镜像减小体积 |
| Python 项目 | 为 Flask/Django/FastAPI 等 Python 项目生成 Dockerfile | 使用 slim 镜像 + pip install --no-cache-dir |
| Go 项目 | 使用多阶段构建,编译后只保留二进制文件 | 开启多阶段构建,最终镜像仅含二进制文件,极小 |
| Java/Spring Boot | 为 Spring Boot 应用生成 JAR 运行环境 | 使用 JRE 镜像而非 JDK,减小镜像体积 |
| 前端静态站点 | 为 Vue/React 构建产物或纯静态页面部署 | 选择 Static 模板,COPY dist/ 目录到 Nginx |
| CI/CD 流水线 | 在 Jenkins/GitHub Actions 中使用生成的 Dockerfile 构建镜像 | 配合 .dockerignore 排除不必要文件加速构建 |
alpine 基于 Alpine Linux(约 5MB),体积极小但使用 musl libc,某些 npm 包可能不兼容;slim 基于 Debian(约 30-50MB),兼容性更好。建议先试 alpine,遇到兼容问题再换 slim。
多阶段构建使用多个 FROM 指令,在构建阶段安装编译工具和依赖,在运行阶段只复制编译产物。最终镜像不包含构建工具,体积大幅减小。Go 项目特别适合多阶段构建。
容器默认以 root 运行,如果应用被攻破,攻击者将获得容器内的 root 权限。创建专用的非 root 用户(如 appuser)运行应用可以限制攻击面,提高安全性。
HEALTHCHECK 让 Docker 定期检查容器是否正常运行。配合 Docker Swarm 或 Kubernetes 使用时,不健康的容器会被自动重启或替换。常见检查方式:curl localhost:端口/health。
应排除:node_modules、.git、.env、*.log、.dockerignore 自身、Dockerfile、构建产物(dist/build)、IDE 配置文件等。这些文件不需要进入镜像,排除后可加速构建并减小体积。
CMD 指定容器启动时的默认命令,可以被 docker run 参数覆盖;ENTRYPOINT 指定容器的主入口,不会被覆盖(追加到后面)。通常建议用 CMD,需要固定入口时用 ENTRYPOINT + CMD 组合。
Dockerfile 生成器是一款可视化生成 Dockerfile 的在线工具。支持 Node.js、Python、Go、Java、Nginx 等多种语言和框架的最佳实践模板,可配置基础镜像、端口、环境变量、多阶段构建等。
核心功能:
- 6 种语言模板:Node.js、Python、Go、Java、Nginx、Static 一键加载默认配置
- 基础配置:自定义基础镜像、工作目录、暴露端口、启动命令、安装命令
- 高级选项:环境变量、多阶段构建、非 root 用户、健康检查
- 一键导出:支持复制到剪贴板或下载为 Dockerfile 文件
使用方式:选择语言模板 → 调整基础配置 → 开启高级选项 → 复制/下载生成的 Dockerfile → 在项目目录执行 docker build -t myapp .。