COPY
تعليمة COPY — نسخ الملفّات COPY
COPY تنسخ ملفّات من سياق البناء (أو مرحلة أخرى) إلى داخل الصورة — الطريقة الموصى بها لنسخ كودك، أبسط وأوضح من ADD.
COPY وADD متشابهتان في الاستخدام الأساسي، لكن ADD تضيف سلوكًا خفيًا: تفكّ أرشيفات tar تلقائيًا وتقدر تجلب من رابط URL مباشرة. هذا السلوك الإضافي غير متوقَّع أحيانًا، لذلك التوصية الرسمية الثابتة: استخدم COPY لنسخ الملفّات المحلّية دائمًا، واحفظ ADD فقط للحالات النادرة التي تحتاج فيها فكّ أرشيف تلقائيًا فعلًا.
--from تحوّل مصدر COPY من سياق البناء إلى مرحلة بناء سابقة (بالاسم من FROM ... AS) أو حتى صورة خارجية جاهزة — هذا أساس البناء متعدّد المراحل. --chown يضبط مالك الملفّات المنسوخة مباشرة دون أمر chown منفصل بعدها.
الصياغة
COPY [--from=<stage>] [--chown=<user>:<group>] <src>... <dest>
📄 مثال
FROM node:20-alpine AS build WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build FROM node:20-alpine WORKDIR /app # انسخ فقط ناتج البناء من المرحلة السابقة، لا كل شيء COPY --from=build --chown=node:node /app/dist ./dist USER node CMD ["node", "dist/server.js"]
أهم النقاط
| الخيار | الوظيفة |
|---|---|
| --from=<stage> | ينسخ من مرحلة بناء أخرى بدل سياق البناء الحالي |
| --chown=<user>:<group> | يضبط ملكية الملفّات المنسوخة أثناء النسخ نفسه |
| --chmod=<mode> | يضبط صلاحيات الملفّات المنسوخة أثناء النسخ |
💡 نصائح عملية
- انسخ package.json وثبّت الاعتماديات قبل نسخ بقيّة الكود — يستفيد من طبقة الكاش ويسرّع البناء التالي
- فضّل COPY --chown على COPY تليها RUN chown منفصلة — يقلّل طبقة كاملة من الصورة
⚠️ أخطاء شائعة
- استخدام ADD لنسخ ملفّات محلّية عادية دون حاجة فعلية لفكّ أرشيف — يضيف سلوكًا غير متوقَّع بلا فائدة
- نسخ كل شيء (COPY . .) قبل تثبيت الاعتماديات فيُبطِل كاش npm install عند أي تعديل بسيط بالكود
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DOCKER الكامل بالعربي.