ویژگیهای کلیدی قالببند Dockerfile
- تورفتگی، فاصله و شکستن خطوط را برای Dockerfiles و Containerfiles پاکسازی میکند
- دستورالعملهای RUN چندخطی را با بکاسلشها و تورفتگی یکپارچه نرمال میکند
- معناشناسی Dockerfile را رعایت میکند – بدون تغییر ترتیب دستورات، بدون تغییر منطق shell
- خروجی قطعی: ورودی و نسخه یکسان ⇒ داکرفایل قالببندی شده یکسان
- همراهی ایدهآل برای هوکهای pre-commit، monorepos و jobهای CI با استفاده از dprint
- ویرایشگر مبتنی بر وب با هایلایت سینتکس، خروجی مناسب diff و اقدامات کپی/دانلود
- با ساختهای چندمرحلهای، آرگومانهای build و تصاویر معمول Node/.NET/Go به خوبی کار میکند
🛠️ نحوه قالببندی یک Dockerfile for dockerfile-formatter
1. داکرفایل خود را paste یا upload کنید
Dockerfile خود را در ویرایشگر قرار دهید یا یک Dockerfile/Containerfile از پروژه خود رها کنید. قطعات کوچک (مانند یک بلوک FROM/RUN تنها) نیز در صورتی که فقط میخواهید آزمایش کنید، کار میکنند.
۲. اجرای فرمتکننده
روی «فرمت» کلیک کنید. این ابزار منبع شما را به یک بکاند امن مبتنی بر dprint ارسال میکند که فاصلهگذاری، فاصلههای خالی، دستورالعملهای آرایهای و زنجیرههای RUN چندخطی را بدون تغییر منطق اجرا تنظیم میکند.
۳. بررسی، کپی یا دانلود
خروجی فرمت شده را با فایل اصلی خود مقایسه کنید. وقتی راضی شدید، نتیجه را به مخزن خود برگردانید یا Dockerfile فرمت شده را برای کامیت مستقیم دانلود کنید.
جزئیات فنی
انواع فایلهای پشتیبانی شده
این فرمتکننده دستورالعملهای ساخت داکر و فایلهای ساخت کانتینر سازگار مورد استفاده در Docker، Podman و ابزارهای مشابه را هدف قرار میدهد.
| نوع | مثال | یادداشتها |
|---|---|---|
| Dockerfile | Dockerfile, Dockerfile.prod, Dockerfile.node18 | فایلهای ساخت کلاسیک داکر برای تصاویر |
| Containerfile | Containerfile | فایلهای پیکربندی سبک Podman / Buildah |
| قطعات درونخطی | FROM node:18-alpine | قطعات کوچک یا مثالها نیز برای آزمایش سریع پشتیبانی میشوند |
رفتار فرمتدهی (سبک dprint)
رفتارهای سطح بالای پلاگین dprint زیربنایی مورد استفاده این ابزار:
| حوزه | رفتار | مثال |
|---|---|---|
| تورفتگی | تورفتگی خطوط ادامهدار در RUN و سایر دستورالعملها را نرمال میکند | RUN set -eux; \\n npm ci; \\n npm cache clean --force |
| لیستها و آرایهها | فاصلهها را در آرایههای سبک JSON برای CMD/ENTRYPOINT/HEALTHCHECK پاک میکند | CMD ["npm", "start"] → CMD ["npm", "start"] (اما با فاصلههای یکنواخت) |
| فاصلهگذاری | فاصلههای اضافی اطراف دستورالعملها را حذف میکند در حالی که معنا حفظ میشود | ENV NODE_ENV=production |
| شکستن خط | ممکن است زنجیرههای RUN طولانی را برای خوانایی بهتر بدون تغییر ترتیب بازچینش کند | خطوط لوله شل طولانی در diffها اسکن و بررسی آسانتری پیدا میکنند |
| نظرات | نظرات کامل خط و درون خطی را در کنار دستورالعملها حفظ میکند | # تصویر پایه برای مرحله ساخت FROM node:18 AS build |
اهداف غیر
این فرمتکننده عمداً به چیدمان محدود شده است، بنابراین میتوانید آن را با سایر ابزارهای DevOps ترکیب کنید:
| مورد | پردازش شده؟ | یادداشتها |
|---|---|---|
| لینتینگ به سبک Hadolint | ❌ | برای بررسیهای بهترین روشها و هشدارها از hadolint یا ابزارهای مشابه استفاده کنید |
| اسکن امنیتی | ❌ | بدون اسکن CVE یا آسیبپذیری تصاویر یا رجیستریها |
| ساخت تصویر | ❌ | دستور docker build را اجرا نمیکند یا با Docker Engine تعامل ندارد |
| تغییر ترتیب دستورات | ❌ | هرگز ترتیب دستورات را تغییر نمیدهد؛ فقط تورفتگی و فاصله سفید تغییر میکند |
| سختسازی تصویر پایه | ❌ | تصاویر پایه را توصیه نمیکند؛ هر چیزی که ارائه دهید را فرمت میکند |
معادلهای CLI و CI
از نتیجه راضی هستید؟ همان رفتار را به صورت محلی و در CI با dprint و ابزارهای مکمل بازتاب دهید.
جهانی (dprint)
dprint را راهاندازی کرده و پلاگین Dockerfile را اضافه کنید
dprint init
# در dprint.json، اضافه کنید:
# {
# "plugins": ["https://plugins.dprint.dev/dockerfile-0.x.wasm"]
# }
# سپس Dockerfileهای خود را فرمت کنید:
dprint fmt Dockerfileنزدیکترین匹配 به این فرمتکننده آنلاین، بنابراین توسعهدهندگان و CI از یک سبک استفاده میکنند.
Linux/macOS
لینت با hadolint (مکمل فرمتدهی)
hadolint Dockerfileفرمتدهی (سبک) را با لینتینگ (بهترین روشها، تصاویر کوچکتر، healthchecks) ترکیب کنید.
Git / pre-commit
اجرای dprint روی Dockerfileهای تغییر یافته قبل از commit
# .pre-commit-config.yaml (مفهومی)
- repo: local
hooks:
- id: dprint-dockerfile
name: dprint Dockerfiles
entry: dprint fmt
language: system
files: "(Dockerfile|Containerfile)$"تضمین میکند که هر Dockerfile ادغام شده به main از قبل فرمت شده است.
موارد استفاده متداول
مهندسی توسعه و پلتفرم
- یکسانسازی Dockerfileها در میکروسرویسها قبل از بازبینی کد
- پاکسازی Dockerfileهای قدیمی به ارث رسیده از تیمها یا قالبهای متعدد
- استانداردسازی سبک هنگام مهاجرت تصاویر، نسخههای سیستم عامل پایه یا استراتژیهای ساخت
# Dockerfile چندمرحلهای معمولی (تمیز، مناسب بازبینی)\nFROM node:18 AS build\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci && npm cache clean --force\nCOPY . .\nRUN npm run build\n\nFROM node:18-alpine\nWORKDIR /app\nCOPY --from=build /app/dist ./\nCMD ["node", "index.js"]خطوط لوله CI/CD
- متوقف کردن ساختها وقتی Dockerfileها به درستی قالببندی نشدهاند
- رفع خودکار سبک در شاخههای ویژگی از طریق هوکهای پیشاز کامیت یا وظایف CI
- حفظ خوانایی پیکربندی Docker در مخازن مونورپوی با عمر طولانی و مخازن پلتفرم
# مثال هوک پیشاز کامیت Git (کد شبه)\n#!/bin/sh\nchanged=$(git diff --cached --name-only --diff-filter=ACM | grep -E 'Dockerfile|Containerfile' || true)\n[ -z "$changed" ] && exit 0\ndprint fmt $changed\ngit add $changedراهاندازی و یکپارچگی تیم
- ارائه یک سبک واحد و مشخص Dockerfile برای اعضای جدید تیم
- حذف بحثهای سبک کد از PRها: اجازه دهید فرمتر منبع حقیقت باشد
- همترازی قالببندی محلی، هوکهای مخزن و وظایف CI حول پیکربندی dprint یکسان
# مثال بخشی برای docs/onboarding.md\n1. نصب dprint به صورت محلی\n2. کپی dprint.json مشترک از مخزن پلتفرم\n3. اجرای `dprint fmt Dockerfile` قبل از باز کردن درخواست pull❓ Frequently Asked Questions
آیا قالببندی روی ساخت تصویر من تأثیر میگذارد؟
آیا این همان لینت کردن با hadolint است؟
آیا میتوانم این سبک را در CI اعمال کنم؟
آیا از ساختهای چندمرحلهای پشتیبانی میکند؟
آیا Dockerfile من به سرور آپلود میشود؟
Pro Tips
قالببندی را به طور خودکار در CI اجرا کنید تا سبک Dockerfile بین سرویسها یا تیمها منحرف نشود.
این فرمتر را با یک لینتر مانند hadolint جفت کنید تا هر دو راهنمای چیدمان و بهترین شیوهها پوشش داده شود.
در ابتدای پروژه روی یک الگوی استاندارد Dockerfile چندمرحلهای توافق کنید و آن را قالببندی نگه دارید تا سرویسهای جدید از همان ساختار پیروی کنند.
اگر در یک مونورپو کار میکنید، یک پیکربندی 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
- فرمتدهنده اسکریپت شل
- فرمتدهنده SQL
- قالببندی SVG
- قالببندی Swift
- قالببندی TOML
- Typescript Formatter
- قالببندی XML
- قالببندی YAML
- قالببندی Yarn
- کوچککننده CSS
- Html Minifier
- Javascript Minifier
- کوچککننده JSON
- کوچککننده XML
- نمایشگر هدرهای HTTP
- PDF به متن
- تستکننده Regex
- بررسیکننده رتبه SERP
- جستجوی Whois