مولد ملفات Docker
ملف Docker هو أحد تلك الملفات التي تبدو قصيرة حتى تتذكر التفاصيل: ترتيب الطبقات مهم للتخزين المؤقت، وCOPY package.json يأتي قبل RUN npm install، واللغات المترجمة تستفيد من البناء متعدد المراحل. يكتب هذا المولّد ملف Docker جاهزًا للاستخدام للتقنية التي تختارها، مع نمط تخزين مؤقت صحيح منذ البداية.
كيفية إنشاء ملف Docker
-
1
اختر التقنية
Node.js أو Python أو PHP أو Go أو Rust. تستخدم كل قالب صورة أساسية مناسبة لتلك اللغة وأمر تثبيت التبعيات الصحيح.
-
2
حدد مجلد العمل والمنفذ
اختر WORKDIR والمنفذ الذي يستمع إليه تطبيقك؛ يُكتب كلاهما في الملف الناتج.
-
3
راجع ملف Docker
تأكد من أن سطر EXPOSE وأمر التشغيل يتوافقان مع تطبيقك. يستخدم قالبا Go وRust البناء متعدد المراحل.
-
4
انسخ ملف Docker
انسخ النتيجة والصقها في جذر مستودعك، ثم ابنِ الصورة.
لماذا البناء متعدد المراحل
يُثبّت ملف Docker البسيط سلسلة أدوات المترجم كاملة في الصورة النهائية. يمنحك البناء متعدد المراحل مرحلة “builder” تقوم بالترجمة ومرحلة نهائية تحمل الأثر المترجم فقط:
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]
تتخلص الصورة النهائية من كل تبعيات التطوير وملفات المصدر وذاكرة التخزين المؤقت للبناء، وغالبًا ما تقلص حجم الصورة بنسبة 60-80 بالمئة.
أصناف الصورة الأساسية
تستخدم القوالب صورًا slim أو alpine حيثما أمكن. إذا عدّلت الصورة الأساسية بنفسك، فهذه هي الخيارات النموذجية:
| الصنف | الحجم النموذجي | متى تختاره |
|---|---|---|
| full | 300-900 م.ب | صور التطوير، تبعيات نظام غير مألوفة |
| slim | 80-200 م.ب | معيار الإنتاج لمعظم اللغات |
| alpine | 30-100 م.ب | صور صغيرة، انتبه لمشاكل glibc مقابل musl |
| distroless | 20-80 م.ب | أقصى أمان؛ بلا قشرة أوامر وبلا مدير حزم |
قواعد التخزين المؤقت للطبقات
يخزّن Docker كل سطر مؤقتًا؛ عندما تتغير طبقة، يُعاد بناء كل ما تحتها. الترتيب من الأقل إلى الأكثر تغيرًا:
- صورة
FROMالأساسية (نادرًا ما تتغير). - حزم النظام (
apt-get install)، تغييرات نادرة. - ملفات التبعيات (
package.json،requirements.txt،composer.json). - خطوة تثبيت التبعيات. تُنفَّذ فقط عند تغيّر ملف التبعيات.
- نسخ الكود المصدري. الطبقة الأكثر نشاطًا؛ يُعاد بناء كل ما بعدها في كل commit.
- الترجمة و
CMDالنهائي.
خرق هذا الترتيب هو السبب الأكثر شيوعًا لبطء عمليات بناء CI.
قائمة التحقق الأمنية
- شغّل كغير root. ضع
USER appuser(أوUSER 1000) قرب النهاية. - ثبّت الإصدارات.
python:3.12.7-slimأفضل منpython:3.12، وهو أفضل منpython:latest. - حدد
WORKDIRصريحًا بدلًا من الاعتماد على/. - استخدم
COPYلاADDللملفات المحلية؛ لأنADDله آثار جانبية لفك الضغط التلقائي. - أضف
HEALTHCHECKحتى تكتشف الأنظمة المنسقة العملية المتعثرة. - نظّف مخابئ الحزم في سطر
RUNنفسه:apt-get install ... && rm -rf /var/lib/apt/lists/*.
الأسئلة الشائعة
slim خيار افتراضي أكثر أمانًا لأنه ما زال يعتمد على glibc، مثل معظم الحزم المترجمة مسبقًا للمكتبات. يستخدم alpine نواة musl التي تسبب أحيانًا أخطاء تشغيل غامضة في Python (pandas وnumpy) أو Node (وحدات node-gyp الأصلية). اختر alpine عندما يكون حجم الصورة حرجًا وبعد اختبار التقنية.
نعم، أضف واحدًا إلى مشروعك. بدونه يرسل Docker مستودعك كاملًا إلى الخادم كسياق بناء: سجل git وnode_modules وملفات .env المحلية والاختبارات. ذلك بطيء ويهدر التخزين المؤقت ويُسرّب الأسرار.
نعم. استخدم docker buildx مع خيار --platform للبناء للمعماريتين معًا. الصور الأساسية التي تستخدمها القوالب تنشر إصدارات arm64.
لا. تُستخدم التقنية ومجلد العمل والمنفذ المختارين فقط لإنشاء ملف Docker في هذه الصفحة؛ لا يُحفظ شيء ولا يُشارَك.
أدوات ذات صلة
مرجع جدول ASCII
جدول ASCII كامل من 0 إلى 127 مع التمثيل العشري والست عشري والثماني والثنائي والمرجع الرقمي في HTML لكل محرف، بما في ذلك أكواد التحكم مثل NUL وLF وDEL.
مرجع أحرف HTML
قائمة قابلة للبحث بكيانات HTML، مع رموزها المسمّاة والرقمية، بالإضافة إلى خيار النسخ بنقرة واحدة للأحرف والرموز الخاصة.
أداة إزالة التشفير في لغة جافا سكريبت (JavaScript Deobfuscator)
إزالة التشفير من كود جافا سكريبت مُصغَّر أو مُعبَّأ باستخدام إعادة تسمية المتغيرات، وفك ترميز السلاسل النصية ومصفوفات البيانات، بالإضافة إلى عكس تسطيح تدفق التحكم وتحسين هيكله.
مولد تراخيص
قم بإنشاء النص الكامل لترخيصات المصدر المفتوح مع إدخال اسمك والسنة المقابلة، ويشمل ذلك تراخيص MIT وApache 2.0 وGPLv3 وBSD-3 وMPL-2.0 وCC.
مولّد إعدادات Nginx
أنشئ كتل server في Nginx مع TLS وHTTP/2 وgzip والتخزين المؤقت في المتصفح وقواعد الوكيل العكسي، انطلاقًا من نموذج بسيط.
مدقق البريد الإلكتروني
تحقق من عنوان بريد إلكتروني: فحص صياغة RFC 5322، واستعلام حي عن سجل MX، بالإضافة إلى تفاصيل الجزء المحلي والنطاق والطول. لا يتم إرسال أي بريد.
الأداة متاحة بلغات أخرى
- Generador de Dockerfile [ES]
- Trình tạo Dockerfile [VI]
- Dockerfile 생성기 [KO]
- Generator Dockerfile [ID]
- Gerador de Dockerfile [PT]
- Générateur de Dockerfile [FR]
- Dockerfile-Generator [DE]
- Generator Dockerfile [PL]
- Dockerfile生成 [JA]
- Dockerfile-generator [NL]
- Dockerfile-generator [SV]
- ตัวสร้าง Dockerfile [TH]
- Dockerfile Generator [EN]
- Generatore di Dockerfile [IT]
- Генератор Dockerfile [RU]
- Dockerfile Oluşturucu [TR]
- Dockerfile 生成器 [ZH]