Loading…
Dockerfile 格式化器的主要功能
- 清理 Dockerfiles 和 Containerfiles 的缩进、间距和换行
- 规范化多行 RUN 指令,保持反斜杠和缩进一致
- 尊重 Dockerfile 语义 – 不重新排序指令,不更改 shell 逻辑
- 确定性输出:相同输入和版本 ⇒ 相同的格式化 Dockerfile
- 使用 dprint 的预提交钩子、monorepos 和 CI 作业的完美伴侣
- 基于 Web 的编辑器,具有语法高亮、差异友好输出和复制/下载操作
- 适用于多阶段构建、构建参数和典型的 Node/.NET/Go 镜像
🛠️ 如何格式化 Dockerfile for dockerfile-formatter
1
1. 粘贴或上传您的 Dockerfile
将您的Dockerfile粘贴到编辑器中,或从项目中拖放Dockerfile/Containerfile。如果您只想进行实验,小片段(如单个FROM/RUN块)也可以使用。
2
2. 运行格式化工具
点击“格式化”。该工具将您的源代码发送到基于dprint的安全后端,调整缩进、间距、数组样式指令和多行RUN链,而不触及执行逻辑。
3
3. 查看、复制或下载
将格式化后的输出与原始文件进行比较。满意后,将结果复制回您的代码库,或下载格式化后的Dockerfile直接提交。
技术细节
支持的文件类型
该格式化工具针对Docker构建指令及在Docker、Podman和类似工具中使用的兼容容器构建文件。
| 类型 | 示例 | 备注 |
|---|---|---|
| Dockerfile | Dockerfile, Dockerfile.prod, Dockerfile.node18 | 用于镜像的经典Docker构建文件 |
| Containerfile | Containerfile | Podman / Buildah 风格的配置文件 |
| 内联片段 | FROM node:18-alpine | 也支持小片段或示例进行快速测试 |
格式化行为(dprint风格)
此工具使用的底层dprint插件的高级行为:
| 领域 | 行为 | 示例 |
|---|---|---|
| 缩进 | 规范化RUN和其他指令中续行的缩进 | RUN set -eux; \\n npm ci; \\n npm cache clean --force |
| 列表与数组 | 清理CMD/ENTRYPOINT/HEALTHCHECK中JSON样式数组的间距 | CMD ["npm", "start"] → CMD ["npm", "start"](但具有一致的间距) |
| 间距 | 移除指令周围多余的空白,同时保留含义 | ENV NODE_ENV=production |
| 换行 | 可能重新排列长RUN链以提高可读性,而不改变顺序 | 长shell管道在差异比较中更易于扫描和审查 |
| 注释 | 保留指令旁的全行和内联注释 | # 构建阶段的基础镜像\nFROM node:18 AS build |
非目标
此格式化工具特意限定于布局范围,以便您可将其与其他DevOps工具结合使用:
| 项目 | 是否处理? | 备注 |
|---|---|---|
| Hadolint风格的代码检查 | ❌ | 使用hadolint或类似工具进行最佳实践检查和警告 |
| 安全扫描 | ❌ | 不进行镜像或注册表的CVE或漏洞扫描 |
| 镜像构建 | ❌ | 不执行docker build或与Docker Engine交互 |
| 指令重排序 | ❌ | 从不重排指令;仅改变缩进和空白 |
| 基础镜像加固 | ❌ | 不推荐基础镜像;它格式化您提供的任何内容 |
命令行与CI等效操作
喜欢这个结果吗?通过dprint和配套工具在本地和CI中实现相同行为。
通用(dprint)
初始化dprint并添加Dockerfile插件
dprint init
# 在dprint.json中添加:
# {
# "plugins": ["https://plugins.dprint.dev/dockerfile-0.x.wasm"]
# }
# 然后格式化您的Dockerfiles:
dprint fmt Dockerfile与此在线格式化工具最接近的匹配,确保开发者和CI使用相同样式。
Linux/macOS
使用hadolint进行代码检查(补充格式化功能)
hadolint Dockerfile将格式化(样式)与代码检查(最佳实践、更小镜像、健康检查)结合使用。
Git / pre-commit
在提交前对更改的Dockerfiles运行dprint
# .pre-commit-config.yaml(概念性)
- repo: local
hooks:
- id: dprint-dockerfile
name: dprint Dockerfiles
entry: dprint fmt
language: system
files: "(Dockerfile|Containerfile)$"确保每个合并到主分支的Dockerfile都已格式化。
常见用例
开发与平台工程
- 在代码审查前规范化微服务中的Dockerfile
- 清理从多个团队或模板继承的遗留Dockerfile
- 在迁移镜像、基础操作系统版本或构建策略时标准化样式
# 典型的多阶段Dockerfile(简洁、便于审查)
FROM node:18 AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci && npm cache clean --force
COPY . .
RUN npm run build
FROM node:18-alpine
WORKDIR /app
COPY --from=build /app/dist ./
CMD ["node", "index.js"]CI/CD流水线
- 当Dockerfile格式不正确时使构建失败
- 通过预提交钩子或CI作业在功能分支上自动修复样式
- 在长期存在的单体仓库和平台仓库中保持Docker配置的可读性
# Git预提交钩子示例(伪代码)
#!/bin/sh
changed=$(git diff --cached --name-only --diff-filter=ACM | grep -E 'Dockerfile|Containerfile' || true)
[ -z "$changed" ] && exit 0
dprint fmt $changed
git add $changed团队入职与一致性
- 为新团队成员提供单一、规范的Dockerfile样式
- 从PR中移除代码样式争议:让格式化工具成为唯一标准
- 围绕相同的dprint配置统一本地格式化、仓库钩子和CI作业
# 文档/onboarding.md示例片段
1. 本地安装dprint
2. 从平台仓库复制共享的dprint.json
3. 在打开拉取请求前运行`dprint fmt Dockerfile`❓ Frequently Asked Questions
格式化会改变我的镜像构建方式吗?
不会。格式化工具仅处理空白字符、缩进和换行。它会保留Dockerfile指令的顺序和内容。只要您的原始Dockerfile是有效的,生成的镜像构建行为应该相同。
这与使用hadolint进行代码检查相同吗?
不同。此工具是格式化程序,而非代码检查器。它修复样式和布局问题(间距、缩进、换行),但不会警告您有关最佳实践的问题(如使用特定基础镜像、健康检查或层大小)。为此,请将其与hadolint或其他Dockerfile代码检查器结合使用。
我可以在CI中强制执行此样式吗?
可以。您可以在仓库中配置带有Dockerfile插件的dprint,并在CI流水线中运行`dprint fmt`(或`dprint check`)。这样,当Dockerfile偏离预期样式时,CI就会失败,与您在此在线格式化工具中看到的结果一致。
它支持多阶段构建吗?
支持。多阶段Dockerfile的格式化方式与其他文件相同。每个FROM、COPY、RUN和ENV指令都会被保留,布局在所有阶段之间保持一致,而不会改变构建语义。
我的Dockerfile会上传到服务器吗?
对于此工具,格式化通过使用基于dprint的格式化程序的安全后端端点执行。您的源代码用于计算响应,不会被长期存储。一如既往,除非您控制完整技术栈,否则请避免将高度机密的基础设施细节粘贴到任何在线工具中。
Pro Tips
Best Practice
在 CI 中自动运行格式化,确保 Dockerfile 样式在不同服务或团队间保持一致。
Best Practice
将此格式化工具与 hadolint 等检查工具配合使用,兼顾代码布局和最佳实践指导。
Best Practice
在项目早期确定标准的多阶段 Dockerfile 模板并保持格式化,确保新服务遵循相同结构。
Best Practice
若使用单体仓库,共享统一的 dprint 配置,使应用代码、基础设施代码和 Dockerfile 采用一致的规范。
Additional Resources
Other Tools
- CSS 美化器
- HTML 美化器
- JavaScript 美化器
- PHP 美化器
- 颜色选择器
- 精灵图提取器
- Base64 解码器
- Base64 编码器
- C# 格式化器
- CSV 格式化器
- Elm 格式化器
- ENV 格式化器
- Go 格式化器
- GraphQL 格式化器
- HCL 格式化器
- INI 格式化器
- JSON 格式化器
- LaTeX 格式化器
- Markdown 格式化器
- Objective-C 格式化器
- Php Formatter
- Proto 格式化器
- Python 格式化器
- Ruby 格式化器
- Rust 格式化器
- Scala 格式化器
- Shell 脚本格式化器
- SQL 格式化器
- SVG 格式化工具
- Swift 格式化工具
- TOML 格式化工具
- Typescript Formatter
- XML 格式化工具
- YAML 格式化工具
- Yarn 格式化工具
- CSS 压缩器
- Html Minifier
- Javascript Minifier
- JSON 压缩器
- XML 压缩器
- HTTP 头部查看器
- PDF 转文本
- 正则表达式测试器
- 搜索引擎排名检查器
- Whois 查询