مولّد Dockerfile

ولّد Dockerfile جاهزًا للإنتاج لـ Node.js وPython وGo وJava و.NET وRust أو موقع ثابت: بناء متعدد المراحل ومستخدم غير root وملف .dockerignore مطابق.

Dockerfile
.dockerignore

ثبّت إصدارات الصور أو بصماتها بدقة في الإنتاج، وأعد البناء بانتظام للحصول على التحديثات الأمنية.

أدوات ذات صلة

عرض الكل

ما هو مولّد Dockerfile؟

أنشئ Dockerfile يتبع أفضل الممارسات الحالية لـ Node.js أو Python أو Go أو Java (Maven) أو .NET (ASP.NET Core) أو Rust أو موقع ثابت يُقدَّم عبر Nginx. تشمل الخيارات البناء متعدد المراحل لصور أصغر، والتشغيل بمستخدم غير root، وإصدار بيئة التشغيل والمنفذ وأمر البدء، وتنتج الأداة كذلك ملف .dockerignore مطابقًا.

كيفية استخدام مولّد Dockerfile

  1. اختر اللغة / التقنية.
  2. اضبط إصدار بيئة التشغيل (وسم الصورة) والمنفذ واسم ملف البدء أو الوحدة أو JAR أو الملف التنفيذي.
  3. أبقِ بناء متعدد المراحل (صورة أصغر) والتشغيل بمستخدم غير root مفعّلين ما لم يكن لديك سبب لغير ذلك.
  4. نزّل Dockerfile و.dockerignore إلى جذر مشروعك وشغّل docker build -t myapp ..

مثال

الإدخال
Node.js 22, port 3000, start file dist/index.js, multi-stage, non-root, npm run build
الإخراج
# syntax=docker/dockerfile:1

# ---- dependencies (production only) ----
FROM node:22-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev

# ---- build ----
FROM node:22-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build

# ---- runtime ----
FROM node:22-alpine
ENV NODE_ENV=production
WORKDIR /app
COPY --from=deps --chown=node:node /app/node_modules ./node_modules
COPY --from=build --chown=node:node /app/dist ./dist
COPY --chown=node:node package.json ./
# The official Node images ship an unprivileged "node" user
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]

متى تستخدم مولّد Dockerfile

استخدمه لتحويل خدمة ويب أو API نمطية إلى حاويات بسرعة بإعدادات افتراضية معقولة. راجع الملف المولَّد لمشروعك: تختلف أوامر البناء ومجلدات المخرجات ونقاط الدخول، وقد تحتاج الاعتماديات الأصلية إلى حزم نظام إضافية. ثبّت إصدارات الصور أو مختصراتها (digests) بدقة لبناءات إنتاج قابلة للتكرار.

كيف يعمل مولّد Dockerfile

لكل تقنية قالب مكتوب لصورها الرسمية. تثبّت عمليات البناء متعددة المراحل وتترجم في صورة SDK كاملة ولا تنسخ إلى صورة تشغيل خفيفة إلا النتيجة: يثبّت Node اعتماديات الإنتاج بـ npm ci --omit=dev في مرحلة منفصلة؛ وتبني Python بيئة افتراضية وتنسخها إلى python:<ver>-slim؛ وتترجم Go ملفًا تنفيذيًا ساكنًا (CGO_ENABLED=0 و-trimpath -ldflags="-s -w") إلى distroless/static:nonroot؛ وتنسخ Java ملف JAR إلى صورة Temurin بـ JRE فقط؛ وينشر .NET إلى صورة تشغيل aspnet ويستخدم مستخدمها المدمج $APP_UID؛ وتنسخ Rust الملف التنفيذي للإصدار إلى debian:bookworm-slim. ويستخدم وضع غير root مستخدم الصورة غير المميز (node أو nonroot أو app) أو ينشئ مستخدمًا بمعرّف UID 10001. وتُنسخ ملفات الاعتماديات قبل المصدر ليتخطى مخزن طبقات Docker إعادة التثبيت عند تغيّر الكود فقط.

حالات الاستخدام الشائعة

  • تحويل API بـ Node.js أو Python إلى حاويات للنشر
  • تقليص صورة خدمة Go ببيئة تشغيل distroless
  • تقديم بناء React/Vue/Astro عبر Nginx بمستخدم غير root
  • تعليم أو مراجعة أفضل ممارسات Dockerfile

ملاحظة أمنية

لا تنسخ ملفات .env أو بيانات الاعتماد إلى صورة أبدًا؛ مرّر الأسرار وقت التشغيل أو عبر BuildKit secret mounts.

الأسئلة الشائعة

لماذا أستخدم بناءً متعدد المراحل؟

تبقى المترجمات واعتماديات التطوير وملفات المصدر في مرحلة البناء، فتكون الصورة النهائية أصغر وأسرع إقلاعًا وفيها حزم أقل قد تحتوي ثغرات.

لماذا أشغّل بمستخدم غير root؟

إذا اختُرق التطبيق فلن يحصل المهاجم على صلاحيات root داخل الحاوية، مما يحدّ من الضرر ويمنع بعض تقنيات الهروب من الحاويات.

ماذا يفعل .dockerignore؟

يستبعد ملفات مثل node_modules و.git و.env من سياق البناء، فتصبح البناءات أسرع وتبقى الأسرار خارج الصورة.

استكشف المزيد من الفئات