الميزات الرئيسية لمنسق Dockerfile
- ينظف المسافات البادئة والتباعد والتفاف الأسطر لـ Dockerfiles و Containerfiles
- يوحد تعليمات RUN متعددة الأسطر بشرطات مائلة خلفية ومسافات بادئة متسقة
- يحترم دلالات Dockerfile – لا إعادة ترتيب للتعليمات، لا تغييرات في منطق shell
- مخرجات حتمية: نفس الإدخال والإصدار ⇒ نفس Dockerfile المنسق
- رفيق مثالي لخطافات pre-commit والمستودعات الأحادية ومهام CI باستخدام dprint
- محرر قائم على الويب مع تمييز بناء الجملة، مخرجات صديقة للفروق وإجراءات النسخ والتنزيل
- يعمل جيدًا مع البناء متعدد المراحل ووسيطات البناء وصور Node/.NET/Go النموذجية
🛠️ كيفية تنسيق Dockerfile for dockerfile-formatter
1. الصق أو ارفع Dockerfile الخاص بك
الصق Dockerfile الخاص بك في المحرر أو أسقط Dockerfile/Containerfile من مشروعك. القصاصات الصغيرة (مثل كتلة FROM/RUN مفردة) تعمل أيضًا إذا كنت تريد فقط التجربة.
2. تشغيل المُنسِّق
انقر على "تنسيق". يرسل الأداة مصدرك إلى خلفية آمنة تعتمد على dprint تقوم بضبط المسافات البادئة والفراغات والتعليمات ذات النمط المصفوفي وسلاسل RUN متعددة الأسطر دون المساس بالمنطق التنفيذي.
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 |
| القوائم والمصفوفات | ينظف الفراغات في المصفوفات ذات النمط JSON لـ CMD/ENTRYPOINT/HEALTHCHECK | CMD ["npm", "start"] → CMD ["npm", "start"] (ولكن بمسافات متناسقة) |
| الفراغات | يزيل المسافات الزائدة حول التعليمات مع الحفاظ على المعنى | ENV NODE_ENV=production |
| التفاف الأسطر | قد يعيد تدفق سلاسل RUN الطويلة لسهولة القراءة دون تغيير الترتيب | تصبح خطوط الأنابيب الطويلة للشل أسهل في المسح والمراجعة في الاختلافات |
| تعليقات | يحافظ على التعليقات الكاملة والتعليقات المضمنة بجانب التعليمات | # base image for build stage\nFROM node:18 AS build |
أهداف غير مقصودة
هذا المُنسِّق مقصود به التخطيط فقط، لذا يمكنك دمجه مع أدوات DevOps الأخرى:
| العنصر | معالج؟ | ملاحظات |
|---|---|---|
| فحص النمط Hadolint | ❌ | استخدم hadolint أو أدوات مشابهة للتحقق من أفضل الممارسات والتحذيرات |
| فحص الأمان | ❌ | لا يوجد فحص CVE أو ثغرات للصور أو السجلات |
| بناء الصور | ❌ | لا ينفذ docker build ولا يتفاعل مع محرك Docker |
| إعادة ترتيب التعليمات | ❌ | لا يعيد ترتيب التعليمات أبداً؛ فقط المسافات البادئة والبيضاء تتغير |
| تعزيز الصورة الأساسية | ❌ | لا يوصي بصور أساسية؛ فهو يُنسِّق أي شيء تقدمه |
واجهة سطر الأوامر ومكافئات CI
هل أعجبك النتيجة؟ كرر نفس السلوك محلياً وفي CI باستخدام dprint والأدوات التكميلية.
عالمي (dprint)
تهيئة dprint وإضافة إضافة Dockerfile
dprint init
# In dprint.json, add:
# {
# "plugins": ["https://plugins.dprint.dev/dockerfile-0.x.wasm"]
# }
# Then format your Dockerfiles:
dprint fmt Dockerfileأقرب تطابق لهذا المُنسِّق عبر الإنترنت، لذا يستخدم المطورون وCI نفس النمط.
Linux/macOS
فحص مع hadolint (يكمل التنسيق)
hadolint Dockerfileاجمع بين التنسيق (النمط) والفحص (أفضل الممارسات، صور أصغر، فحوصات الصحة).
Git / pre-commit
تشغيل dprint على ملفات Dockerfile المتغيرة قبل الالتزام
# .pre-commit-config.yaml (conceptual)
- repo: local
hooks:
- id: dprint-dockerfile
name: dprint Dockerfiles
entry: dprint fmt
language: system
files: "(Dockerfile|Containerfile)$"يضمن أن كل ملف Dockerfile مدمج في main يكون مُنسَّقاً مسبقاً.
حالات الاستخدام الشائعة
هندسة التطوير والمنصة
- توحيد ملفات Docker عبر الخدمات المصغرة قبل مراجعة الكود
- تنظيف ملفات Docker القديمة الموروثة من فرق أو قوالب متعددة
- توحيد النمط عند ترحيل الصور أو إصدارات نظام التشغيل الأساسي أو استراتيجيات البناء
# ملف Docker متعدد المراحل نموذجي (نظيف، سهل المراجعة)
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
- فشل عمليات البناء عندما لا تكون ملفات Docker منسقة بشكل صحيح
- إصلاح النمط تلقائياً على فروع الميزات عبر خطافات pre-commit أو مهام CI
- الحفاظ على تكوين Docker مقروءاً في المستودعات طويلة الأمد ومستودعات المنصة
# مثال على خطاف Git pre-commit (كود زائف)
#!/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 واحداً وموحداً ليتبعوه
- إزالة النقاشات حول نمط الكود من طلبات السحب: دع المُنسِّق يكون مصدر الحقيقة
- محاذاة التنسيق المحلي وخطافات المستودع ومهام CI حول تكوين dprint نفسه
# مقتطف مثال لـ docs/onboarding.md
1. تثبيت dprint محلياً
2. نسخ dprint.json المشترك من مستودع المنصة
3. تشغيل `dprint fmt Dockerfile` قبل فتح طلب سحب❓ Frequently Asked Questions
هل يغير التنسيق طريقة بناء الصورة الخاصة بي؟
هل هذا هو نفسه التدقيق باستخدام hadolint؟
هل يمكنني فرض هذا النمط في CI؟
هل يدعم عمليات البناء متعددة المراحل؟
هل يتم تحميل Dockerfile الخاص بي إلى خادم؟
Pro Tips
قم بتشغيل التنسيق تلقائيًا في CI بحيث لا ينحرف نمط Dockerfile بين الخدمات أو الفرق.
اقترن هذه الأداة المنسقة مع مدقق مثل hadolint لتغطية كل من التخطيط وإرشادات أفضل الممارسات.
اتفق على قالب Dockerfile متعدد المراحل في بداية المشروع وحافظ على تنسيقه بحيث تتبع الخدمات الجديدة نفس الهيكل.
إذا كنت تعمل في مستودع أحادي، شارك تكوين dprint واحد بحيث تستخدم أكواد التطبيقات وأكواد البنية التحتية وملفات Docker نفس الاتفاقيات.
Additional Resources
Other Tools
- محسن CSS
- محسن HTML
- محسن Javascript
- محسن PHP
- منتقي الألوان
- مستخرج Sprite
- فك تشفير Base64
- تشفير Base64
- منسق Csharp
- منسق CSV
- منسق Elm
- منسق ENV
- منسق Go
- منسق Graphql
- منسق Hcl
- منسق INI
- منسق JSON
- منسق Latex
- منسق Markdown
- منسق Objectivec
- 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 إلى نص
- مختبر Regex
- مدقق ترتيب SERP
- بحث Whois