فهم الفروق بين أوامر "COPY" و"ADD" في ملف Dockerfile

فهم الفروق بين أوامر COPY وADD في ملف Dockerfile
فهم الفروق بين أوامر COPY وADD في ملف Dockerfile

شرح أوامر ملف Dockerfile

يعمل الأمران "COPY" و"ADD" في Dockerfile على إدخال الملفات إلى نظام ملفات الحاوية الخاصة بك، لكنهما يأتيان بوظائف مميزة وسيناريوهات الاستخدام الأفضل. يعد فهم هذه الاختلافات أمرًا ضروريًا لإدارة Dockerfile بكفاءة وضمان أداء التطبيقات الموجودة في حاويات كما هو متوقع.

بينما يتم استخدام "COPY" بشكل أساسي لنسخ الملفات بشكل مباشر، فإن "ADD" يوفر إمكانات إضافية، مثل التعامل مع عناوين URL البعيدة واستخراج الملفات المضغوطة. ستستكشف هذه المقالة الفروق الدقيقة في كل أمر، وسترشدك إلى متى تستخدم واحدًا بدلاً من الآخر لتحسين إصدارات Docker الخاصة بك.

يأمر وصف
FROM يحدد الصورة الأساسية التي سيتم استخدامها لصورة Docker التي يتم إنشاؤها.
WORKDIR يضبط دليل العمل داخل الحاوية.
COPY نسخ الملفات أو الدلائل من المضيف إلى نظام ملفات الحاوية.
ADD يضيف ملفات أو أدلة أو عناوين URL بعيدة إلى نظام ملفات الحاوية ويمكنه التعامل مع استخراج الملفات.
RUN ينفذ أمرًا في بيئة الحاوية.
EXPOSE إبلاغ Docker بأن الحاوية تستمع إلى منافذ الشبكة المحددة في وقت التشغيل.

شرح تفصيلي لأوامر ملف Dockerfile

يوضح النص الأول استخدام COPY الأمر في ملف Dockerfile. ال COPY التعليمات واضحة وتستخدم لنسخ الملفات أو الدلائل من النظام المضيف إلى نظام ملفات حاوية Docker. في هذا المثال، يبدأ البرنامج النصي بـ FROM الأمر، الذي يحدد الصورة الأساسية ك python:3.8-slim-buster . ال WORKDIR يقوم الأمر بتعيين دليل العمل داخل الحاوية إلى /app . ويتبع ذلك COPY الأمر، الذي ينسخ محتويات الدليل الحالي على المضيف إلى ملف /app الدليل في الحاوية. بعد نسخ الملفات RUN يتم استخدام الأمر لتثبيت حزم Python الضرورية المحددة في ملف requirements.txt ملف. وأخيرا، فإن EXPOSE الأمر يجعل المنفذ 80 متاحًا للعالم الخارجي.

في المقابل، يسلط النص الثاني الضوء على استخدام ADD الأمر في ملف Dockerfile. على غرار النص الأول، يبدأ بـ FROM أمر لتعيين الصورة الأساسية و WORKDIR أمر لتحديد دليل العمل. الفرق الرئيسي هنا هو ADD الأمر، والذي يُستخدم لإضافة ملفات من عنوان URL بعيد، في هذه الحالة، https://example.com/data/archive.tar.gz . ال ADD لا يقوم الأمر بنسخ الملفات فحسب، بل لديه أيضًا القدرة على استخراج الملفات المضغوطة تلقائيًا، كما هو موضح في الأمر التالي RUN الأمر الذي يستخرج archive.tar.gz ملف في /app الدليل. وبعد هذا، RUN يقوم الأمر بتثبيت حزم Python المطلوبة، وسيقوم ملف EXPOSE الأمر يجعل المنفذ 80 متاحًا.

استخدام COPY في ملف Dockerfile

مثال ملف الإرساء

# Use an official Python runtime as a parent image
FROM python:3.8-slim-buster

# Set the working directory in the container
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

استخدام ADD في ملف Dockerfile

مثال ملف الإرساء

# Use an official Python runtime as a parent image
FROM python:3.8-slim-buster

# Set the working directory in the container
WORKDIR /app

# Add files from a remote URL
ADD https://example.com/data/archive.tar.gz /app/

# Extract the archive file
RUN tar -xzf /app/archive.tar.gz -C /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

تحليل متعمق للنسخ والإضافة في Dockerfile

بينما كلاهما COPY و ADD تخدم الأوامر غرض نسخ الملفات من النظام المضيف إلى نظام ملفات الحاوية، ولها ميزات وحالات استخدام مميزة تجعل كل منها مناسبًا في سيناريوهات مختلفة. ال COPY الأمر أبسط وأكثر قابلية للتنبؤ به. من الأفضل استخدامه لنسخ الملفات الأساسية حيث لا يلزم أي معالجة إضافية، مثل استخراج الأرشيفات أو جلب الملفات البعيدة. يضمن هذا الأمر نسخ الملفات والأدلة المحلية فقط إلى الحاوية، وبالتالي الحفاظ على بيئة بناء نظيفة وآمنة.

ومن ناحية أخرى فإن ADD يوفر الأمر المزيد من الوظائف ولكن مع تعقيد إضافي ومخاطر أمنية محتملة. ال ADD يمكن للأمر التعامل مع تنزيلات URL واستخراج الملفات المضغوطة تلقائيًا مثل .tar, .gzip، و .bzip2. يمكن أن يكون هذا مفيدًا في الحالات التي تتطلب فيها عملية الإنشاء أصولًا أو أرشيفات بعيدة يجب استخراجها أثناء إنشاء الصورة. ومع ذلك، تأتي هذه الميزات الإضافية مصحوبة بمخاطر، مثل الكتابة فوق غير المقصودة للملفات والثغرات الأمنية عند التنزيل من مواقع بعيدة. ولذلك، فمن الأهمية بمكان النظر بعناية في هذه العوامل عند الاختيار بين COPY و ADD.

أسئلة وأجوبة شائعة حول COPY وADD في Dockerfile

  1. ما هو الاستخدام الأساسي لل COPY الأمر في Dockerfile؟
  2. ال COPY يُستخدم الأمر بشكل أساسي لنسخ الملفات والأدلة المحلية من النظام المضيف إلى حاوية Docker.
  3. متى يجب عليك استخدام ADD أمر بدلا من COPY؟
  4. يجب عليك استخدام ADD الأمر عندما تحتاج إلى نسخ الملفات من عنوان URL أو عندما تحتاج إلى استخراج الملفات المضغوطة أثناء عملية الإنشاء.
  5. ما هي الآثار الأمنية لاستخدام ADD يأمر؟
  6. ال ADD يمكن أن يؤدي الأمر إلى مخاطر أمنية، خاصة عند تنزيل الملفات من عناوين URL بعيدة، حيث من المحتمل أن يقوم بالكتابة فوق الملفات الموجودة أو تقديم ثغرات أمنية.
  7. يمكن لل COPY أمر استخراج الملفات المضغوطة؟
  8. لا، COPY الأمر ليس لديه القدرة على استخراج الملفات المضغوطة؛ إنه ببساطة ينسخها كما هي.
  9. كيف ADD التعامل مع الملفات المضغوطة بشكل مختلف عن COPY؟
  10. ال ADD يقوم الأمر تلقائيًا باستخراج الملفات المضغوطة مثل .tar, .gzip، و .bzip2 عند إضافتها إلى الحاوية.
  11. هل من الممكن استخدام أحرف البدل مع COPY يأمر؟
  12. نعم، يمكنك استخدام أحرف البدل مع COPY أمر لنسخ ملفات أو أدلة متعددة تتطابق مع النمط.
  13. ماذا يحدث إذا تم تقديم عنوان URL إلى ADD الأمر لا يمكن الوصول إليه؟
  14. إذا تم تقديم عنوان URL إلى ADD الأمر غير قابل للوصول، ستفشل عملية إنشاء Docker.
  15. ما الأمر الذي يجب عليك استخدامه لعملية نسخ ملف محلي بسيطة؟
  16. بالنسبة لعمليات نسخ الملفات المحلية البسيطة، يجب عليك استخدام الملف COPY الأمر لأنه أكثر وضوحًا وأمانًا.
  17. يمكن لل ADD هل يمكن استخدام الأمر لإضافة ملفات من المصادر المحلية والبعيدة؟
  18. نعم ADD يمكن للأمر إضافة ملفات من المصادر المحلية وعناوين URL البعيدة، مما يجعله أكثر تنوعًا في سيناريوهات معينة.

اختتام أوامر Docker COPY و ADD

فهم متى تستخدم COPY و ADD يعد Dockerfile الموجود في Dockerfile ضروريًا لتحسين إنشاءات الحاوية الخاصة بك. بينما COPY واضح ومباشر وآمن للملفات المحلية، ADD يوفر إمكانات إضافية على حساب التعقيد الإضافي والمخاوف الأمنية المحتملة. يمكن أن يؤدي اختيار الأمر الصحيح بناءً على احتياجاتك المحددة إلى تحسين كفاءة وأمان صور Docker الخاصة بك.