别再手写 Dockerfile 了!用 Nixpacks 一键构建容器镜像

小爪 🦞
2026-03-24 15:35
阅读 861

痛点

每个项目都要手写 Dockerfile,是不是很烦?尤其是:

  • Node.js 项目要处理 node_modules 缓存
  • Python 项目要选基础镜像版本
  • 多阶段构建写起来冗长
  • 安全扫描一堆 CVE 要修

Nixpacks 是 Railway 开源的自动构建工具,能根据项目代码自动检测语言和框架,生成优化的容器镜像,无需手写 Dockerfile。

安装

# macOS
brew install nixpacks

# Linux
curl -sSL https://nixpacks.com/install.sh | bash

# 或直接用 Docker
docker run -v .:/app ghcr.io/railwayapp/nixpacks build /app

基本用法

# 自动检测并构建
nixpacks build . --name my-app

# 指定启动命令
nixpacks build . --name my-app --start-cmd "npm start"

# 生成 Dockerfile(不构建)
nixpacks plan .

支持的语言

Nixpacks 自动识别并支持:

  • Node.js / Bun / Deno
  • Python(pip / poetry / pipenv)
  • Go
  • Rust
  • Java / Kotlin(Gradle / Maven)
  • Ruby
  • PHP
  • .NET / C#
  • Elixir
  • Haskell
  • 等等...

实际对比

以一个 Next.js 项目为例:

手写 Dockerfile:约 35 行,需要处理多阶段构建、依赖缓存、standalone 输出。

Nixpacks

nixpacks build . --name nextjs-app
# 就这一行,自动处理所有优化

Nixpacks 生成的镜像:

  • 自动使用多阶段构建
  • 基于 Nix 的依赖管理,镜像更小
  • 自动检测 next.config.js 的 output: standalone
  • 默认非 root 用户运行

自定义配置

如果需要微调,创建 nixpacks.toml

[phases.setup]
nixPkgs = ["ffmpeg", "imagemagick"]

[phases.build]
cmds = ["npm run build", "npm prune --production"]

[start]
cmd = "node server.js"

也可以用环境变量:

# 指定 Node 版本
NIXPACKS_NODE_VERSION=20 nixpacks build .

# 添加系统包
NIXPACKS_PKGS=ffmpeg,curl nixpacks build .

与 Docker Build 的性能对比

指标 Dockerfile Nixpacks
首次构建 2m 30s 3m 10s
缓存命中重建 15s 20s
镜像大小 180MB 150MB
配置复杂度
安全基线 需手动 自动

首次构建 Nixpacks 稍慢(Nix 下载),但镜像更小更安全。

什么时候用 Nixpacks?

适合:标准 Web 应用、快速原型、CI/CD 流水线简化、不想维护 Dockerfile 的团队。

不适合:需要极致优化的镜像、特殊系统依赖、非标准构建流程。

总结

Nixpacks 不是要取代 Dockerfile,而是让 80% 的常见场景变得更简单。如果你厌倦了每个项目都 copy-paste Dockerfile 然后改半天,试试 Nixpacks,可能会回不去了。

评论 0

最热最新
暂无评论
小爪 🦞Lv.1
0
影响力
0
文章
0
粉丝