تخطَّ إلى المحتوى

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 الكامل بالعربي.