Dockerfile 生成器

为 Node.js、Python、Go、Java、.NET、Rust 或静态站点生成可用于生产的 Dockerfile:多阶段构建、非 root 用户,并附带匹配的 .dockerignore。

Dockerfile
.dockerignore

生产环境中请固定镜像的精确版本或摘要,并定期重新构建以获取安全更新。

相关工具

查看全部

什么是 Dockerfile 生成器?

为 Node.js、Python、Go、Java (Maven)、.NET (ASP.NET Core)、Rust 或 由 Nginx 提供服务的静态网站 创建遵循当前最佳实践的 Dockerfile。选项包括用于缩小镜像的多阶段构建、以非 root 用户运行、运行时版本、端口和启动命令,工具还会生成匹配的 .dockerignore。

如何使用 Dockerfile 生成器

  1. 选择 语言 / 技术栈。
  2. 设置 运行时版本(镜像标签)、端口,以及启动文件、模块、JAR 或二进制名称。
  3. 除非有特殊原因,请保持勾选 多阶段构建(镜像更小) 和 以非 root 用户运行。
  4. 把 Dockerfile 和 .dockerignore 下载到项目根目录,然后运行 docker build -t myapp .。

示例

输入
Node.js 22, port 3000, start file dist/index.js, multi-stage, non-root, npm run build
输出
# syntax=docker/dockerfile:1

# ---- dependencies (production only) ----
FROM node:22-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev

# ---- build ----
FROM node:22-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build

# ---- runtime ----
FROM node:22-alpine
ENV NODE_ENV=production
WORKDIR /app
COPY --from=deps --chown=node:node /app/node_modules ./node_modules
COPY --from=build --chown=node:node /app/dist ./dist
COPY --chown=node:node package.json ./
# The official Node images ship an unprivileged "node" user
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]

何时使用 Dockerfile 生成器

适合用合理的默认值快速把典型的 Web 服务或 API 容器化。请针对你的项目检查生成的文件:构建命令、输出目录和入口点各不相同,原生依赖可能还需要额外的系统软件包。生产构建请固定确切的镜像版本或摘要,以便可重复构建。

Dockerfile 生成器 的工作原理

每个技术栈都有针对其官方镜像编写的模板。多阶段构建在完整的 SDK 镜像中安装和编译,只把结果复制到精简的运行时镜像中:Node 在单独的阶段用 npm ci --omit=dev 安装生产依赖;Python 构建虚拟环境并复制到 python:<ver>-slim;Go 编译静态二进制(CGO_ENABLED=0、-trimpath -ldflags="-s -w")并放入 distroless/static:nonroot;Java 把 JAR 复制到仅含 JRE 的 Temurin 镜像;.NET 发布到 aspnet 运行时镜像,并使用其内置的 $APP_UID 用户;Rust 把发布版二进制复制到 debian:bookworm-slim。非 root 模式使用镜像自带的无特权用户(node、nonroot、app),或创建 UID 为 10001 的用户。依赖清单会先于源代码复制,这样只修改代码时,Docker 的层缓存会跳过重新安装。

常见用例

  • 把 Node.js 或 Python API 容器化以便部署
  • 用 distroless 运行时缩小 Go 服务的镜像
  • 用非 root 的 Nginx 提供 React/Vue/Astro 构建产物
  • 教学或审查 Dockerfile 最佳实践

安全提示

切勿把 .env 文件或凭据 COPY 到镜像中;请在运行时或通过 BuildKit 的 secret 挂载传递密钥。

常见问题

为什么要使用多阶段构建?

编译器、开发依赖和源文件都留在构建阶段,所以最终镜像更小、启动更快,并且可能含有漏洞的软件包更少。

为什么要以非 root 用户运行?

如果应用被攻破,攻击者无法在容器内获得 root 权限,这样能限制损害,并阻止某些容器逃逸技术。

.dockerignore 有什么作用?

它把 node_modules、.git 和 .env 等文件排除在构建上下文之外,使构建更快,并让密钥不进入镜像。

探索更多分类