مولد ملفات 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، مع رموزها المسمّاة والرقمية، بالإضافة إلى خيار النسخ بنقرة واحدة للأحرف والرموز الخاصة.
مرجع اختصارات لوحة المفاتيح
ابحث في الاختصارات الافتراضية الموثقة لـ VS Code وChrome وBash مع GNU Readline على macOS وWindows وLinux.
عدّاد FPS
قِس معدل الإطارات FPS في المتصفح عبر requestAnimationFrame: تنعيم، وأدنى وأقصى معدل إطارات، وحد تنبيه، ورسم بياني اختياري. يعمل محليًا بلا رفع ملفات وبلا API.
منسق JSON
الصق JSON لتنسيقه بمسافتين أو أربع مسافات، أو تصغيره إلى ناتج مضغوط، أو فحص بنيته بسرعة قبل نسخ النتيجة.
مولد لوحة الألوان
أنشئ لوحات ألوان أحادية أو متجاورة أو مكملة أو ثلاثية أو رباعية من لون HEX أساسي، ثم صدّر متغيرات CSS جاهزة للنسخ.
الأداة متاحة بلغات أخرى
- Dockerfile 생성기 [KO]
- Trình tạo Dockerfile [VI]
- Dockerfile-generator [NL]
- Dockerfile 生成器 [ZH]
- Dockerfile-Generator [DE]
- Dockerfile Generator [EN]
- Generator Dockerfile [ID]
- Dockerfile-generator [SV]
- Generator Dockerfile [PL]
- ตัวสร้าง Dockerfile [TH]
- Generador de Dockerfile [ES]
- Générateur de Dockerfile [FR]
- Gerador de Dockerfile [PT]
- Dockerfile生成 [JA]
- Dockerfile Oluşturucu [TR]
- Generatore di Dockerfile [IT]
- Генератор Dockerfile [RU]