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

Dockerfile

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

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

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

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

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

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

في المقابل، يسلط النص الثاني الضوء على استخدام الأمر في ملف Dockerfile. على غرار النص الأول، يبدأ بـ أمر لتعيين الصورة الأساسية و أمر لتحديد دليل العمل. الفرق الرئيسي هنا هو ADD الأمر، والذي يُستخدم لإضافة ملفات من عنوان URL بعيد، في هذه الحالة، . ال لا يقوم الأمر بنسخ الملفات فحسب، بل لديه أيضًا القدرة على استخراج الملفات المضغوطة تلقائيًا، كما هو موضح في الأمر التالي الأمر الذي يستخرج archive.tar.gz ملف في الدليل. وبعد هذا، يقوم الأمر بتثبيت حزم Python المطلوبة، وسيقوم ملف الأمر يجعل المنفذ 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

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

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

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

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

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