Loading…

درباره قالب‌بند رایگان آنلاین Dockerfile

داکرفایل به هم ریخته دارید؟ تورفتگی شکسته، فاصله‌های ناهماهنگ و زنجیره‌های RUN ناخوانا؟ این قالب‌بند Dockerfile از موتوری مبتنی بر dprint (از طریق یک بک‌اند امن) استفاده می‌کند تا داکرفایل‌ها و Containerfiles شما را با چیدمانی تمیز و نظرخواهی شده نرمال کند. این ابزار دستورالعمل‌های شما را دقیقاً در جای خود نگه می‌دارد در حالی که فایل را برای بررسی، نسخه‌بندی و اتوماسیون در محیط‌های مختلف آسان‌تر می‌کند.

ویژگی‌های کلیدی قالب‌بند Dockerfile

  • تورفتگی، فاصله و شکستن خطوط را برای Dockerfiles و Containerfiles پاکسازی می‌کند
  • دستورالعمل‌های RUN چندخطی را با بک‌اسلش‌ها و تورفتگی یکپارچه نرمال می‌کند
  • معناشناسی Dockerfile را رعایت می‌کند – بدون تغییر ترتیب دستورات، بدون تغییر منطق shell
  • خروجی قطعی: ورودی و نسخه یکسان ⇒ داکرفایل قالب‌بندی شده یکسان
  • همراهی ایده‌آل برای هوک‌های pre-commit، monorepos و jobهای CI با استفاده از dprint
  • ویرایشگر مبتنی بر وب با هایلایت سینتکس، خروجی مناسب diff و اقدامات کپی/دانلود
  • با ساخت‌های چندمرحله‌ای، آرگومان‌های build و تصاویر معمول Node/.NET/Go به خوبی کار می‌کند

🛠️ نحوه قالب‌بندی یک Dockerfile for dockerfile-formatter

1

1. داکرفایل خود را paste یا upload کنید

Dockerfile خود را در ویرایشگر قرار دهید یا یک Dockerfile/Containerfile از پروژه خود رها کنید. قطعات کوچک (مانند یک بلوک FROM/RUN تنها) نیز در صورتی که فقط می‌خواهید آزمایش کنید، کار می‌کنند.

2

۲. اجرای فرمت‌کننده

روی «فرمت» کلیک کنید. این ابزار منبع شما را به یک بک‌اند امن مبتنی بر dprint ارسال می‌کند که فاصله‌گذاری، فاصله‌های خالی، دستورالعمل‌های آرایه‌ای و زنجیره‌های RUN چندخطی را بدون تغییر منطق اجرا تنظیم می‌کند.

3

۳. بررسی، کپی یا دانلود

خروجی فرمت شده را با فایل اصلی خود مقایسه کنید. وقتی راضی شدید، نتیجه را به مخزن خود برگردانید یا Dockerfile فرمت شده را برای کامیت مستقیم دانلود کنید.

جزئیات فنی

انواع فایل‌های پشتیبانی شده

این فرمت‌کننده دستورالعمل‌های ساخت داکر و فایل‌های ساخت کانتینر سازگار مورد استفاده در Docker، Podman و ابزارهای مشابه را هدف قرار می‌دهد.

نوعمثالیادداشت‌ها
DockerfileDockerfile, Dockerfile.prod, Dockerfile.node18فایل‌های ساخت کلاسیک داکر برای تصاویر
ContainerfileContainerfileفایل‌های پیکربندی سبک 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

آیا قالب‌بندی روی ساخت تصویر من تأثیر می‌گذارد؟

خیر. فرمتر فقط فاصله‌ها، تورفتگی و شکستن خطوط را تغییر می‌دهد. ترتیب و محتوای دستورات Dockerfile شما را حفظ می‌کند. تا زمانی که Dockerfile اصلی شما معتبر بوده، ساخت تصویر نتیجه‌ای یکسان خواهد داشت.

آیا این همان لینت کردن با hadolint است؟

خیر. این ابزار یک فرمتر است، نه لینتر. مشکلات سبک و چیدمان (فاصله‌گذاری، تورفتگی، شکستن خط) را رفع می‌کند، اما در مورد بهترین روش‌ها (مانند استفاده از تصاویر پایه خاص، بررسی سلامت یا اندازه لایه‌ها) به شما هشدار نمی‌دهد. برای آن، آن را با hadolint یا لینتر Dockerfile دیگری ترکیب کنید.

آیا می‌توانم این سبک را در CI اعمال کنم؟

بله. می‌توانید dprint را با پلاگین Dockerfile در مخزن خود پیکربندی کرده و `dprint fmt` (یا `dprint check`) را در خط لوله CI خود اجرا کنید. به این ترتیب، CI وقتی Dockerfileها از سبک مورد انتظار منحرف شوند، می‌تواند متوقف شود، مطابق با آنچه در این فرمتر آنلاین می‌بینید.

آیا از ساخت‌های چندمرحله‌ای پشتیبانی می‌کند؟

بله. 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