Dockerfile 生成器
Dockerfile 属于那种看着很短、直到你想起细节才发现不简单的文件:层顺序对缓存至关重要,COPY package.json 要放在 RUN npm install 之前,而编译语言能从多阶段构建中受益。本生成器会为你选择的技术栈写出开箱即用的 Dockerfile,缓存模式从一开始就是正确的。
如何生成 Dockerfile
-
1
选择技术栈
Node.js、Python、PHP、Go 或 Rust。每个模板都会为该语言使用合适的基础镜像和正确的依赖安装命令。
-
2
设置工作目录和端口
选择 WORKDIR 以及应用监听的端口,两者都会写入生成的文件。
-
3
检查 Dockerfile
确认 EXPOSE 行和启动命令与你的应用匹配。Go 和 Rust 模板使用多阶段构建。
-
4
复制 Dockerfile
复制结果并粘贴到仓库根目录,然后构建镜像。
为什么用多阶段构建
简单的 Dockerfile 会把整套编译器工具链装进最终镜像。多阶段构建给你一个负责编译的 “builder” 阶段,以及一个只携带编译产物的最终阶段:
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]
最终镜像会去掉所有开发依赖、源文件和构建缓存,镜像体积通常能缩小 60-80%。
基础镜像种类
模板在可能的情况下使用 slim 或 alpine 镜像。如果你要自行调整基础镜像,常见的选项如下:
| 类型 | 常见大小 | 何时选择 |
|---|---|---|
| full | 300-900 MB | 开发镜像、不常见的系统依赖 |
| slim | 80-200 MB | 大多数语言的生产默认选择 |
| alpine | 30-100 MB | 小型镜像,注意 glibc 与 musl 的差异 |
| distroless | 20-80 MB | 最高安全性;无 shell、无包管理器 |
层缓存规则
Docker 会缓存每一行;一旦某层发生变化,其下所有内容都会重建。按易变程度从低到高排列:
FROM基础镜像(很少变化)。- 系统软件包(
apt-get install),变化较少。 - 依赖清单(
package.json、requirements.txt、composer.json)。 - 依赖安装步骤。只在清单变化时运行。
- 源码复制。最繁忙的层;它之后的一切会在每次提交时重建。
- 编译和最终的
CMD。
打破这个顺序是 CI 构建变慢最常见的原因。
安全检查清单
- 以非 root 用户运行。 在接近末尾处设置
USER appuser(或USER 1000)。 - 固定版本。
python:3.12.7-slim优于python:3.12,后者又优于python:latest。 - 设置明确的
WORKDIR,不要依赖/。 - 本地文件用
COPY而不是ADD;ADD有自动解压的副作用。 - 添加
HEALTHCHECK,让编排器能发现卡住的进程。 - 在同一行
RUN中清理包缓存:apt-get install ... && rm -rf /var/lib/apt/lists/*。
常见问题
slim 是更安全的默认选择,因为它仍基于 glibc,与大多数库的预编译 wheel 一致。alpine 使用 musl,偶尔会在 Python(pandas、numpy)或 Node(node-gyp 原生模块)中引发难以排查的运行时错误。只有当镜像体积很关键且你已测试过该技术栈时,才选 alpine。
需要,请添加到你的项目。没有它,Docker 会把整个仓库作为构建上下文发给守护进程:git 历史、node_modules、本地 .env 文件、测试。这既慢又浪费缓存,还会泄露机密。
可以。使用 docker buildx 加 --platform 选项,可同时构建两种架构。模板使用的基础镜像都发布 arm64 版本。
不会。所选的技术栈、工作目录和端口仅用于在本页生成 Dockerfile,不会被保存或共享。
相关工具
ASCII 表参考
完整 ASCII 表,覆盖 0 到 127;列出每个代码的十进制、十六进制、八进制、二进制值和 HTML 数字字符引用写法,包括 NUL、LF、DEL。
HTML 字符参考
可搜索的 HTML 实体列表,含命名代码与数值代码,并支持一键复制特殊字符和符号。
键盘快捷键参考
搜索 macOS、Windows 和 Linux 上 VS Code、Chrome 以及使用 GNU Readline 的 Bash 的文档默认快捷键。
电话号码验证器
根据各国号码规划检查结构,并显示地区、类型以及E.164、国际、国内和RFC 3966格式。
变更日志生成器
根据分类条目生成 Keep a Changelog 风格的 Markdown 部分。将条目粘贴到 Added、Changed、Fixed 和 Removed 下,选择 Markdown 或纯文本,然后复制输出。
cURL 命令生成器
根据 HTTP URL、请求头、认证、JSON、原始数据或表单字段,在浏览器中私密生成适用于 POSIX Shell 或 PowerShell 的 cURL 命令。
此工具还提供其他语言版本
- Generator Dockerfile [PL]
- Gerador de Dockerfile [PT]
- مولد ملفات Docker [AR]
- Generador de Dockerfile [ES]
- Générateur de Dockerfile [FR]
- Dockerfile 생성기 [KO]
- Dockerfile Oluşturucu [TR]
- Dockerfile-generator [SV]
- Dockerfile Generator [EN]
- Trình tạo Dockerfile [VI]
- Generator Dockerfile [ID]
- Dockerfile生成 [JA]
- ตัวสร้าง Dockerfile [TH]
- Dockerfile-generator [NL]
- Dockerfile-Generator [DE]
- Generatore di Dockerfile [IT]
- Генератор Dockerfile [RU]