كيفية إنشاء صور Dockerfile مخصصة خطوة بخطوة

    ,
  • يقوم ملف Dockerfile بأتمتة بناء صور Docker المخصصة.
  • تتيح لك التعليمات مثل FROM وRUN وCOPY وCMD تحديد كل طبقة من الصورة.
  • باستخدام Docker Compose، يمكنك دمج صورك المخصصة في بيئات متعددة الحاويات.
  • يجعل نشر الصور على Docker Hub التعاون والنشر عبر الفرق أسهل.

صورة Dockerfile مخصصة

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

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

ما هو Dockerfile ولماذا تحتاج إليه؟

ملف Dockerfile هو ببساطة ملف نص عادي يحتوي على تعليمات حتى يعرف Docker كيفية بناء الصورة. تشير كل تعليمة في Dockerfile إلى خطوة محددة، ويقوم Docker بتفسيرها كطبقة في الصورة النهائية التي يتم إنشاؤها.

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

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

ملف عامل ميناء

كيفية عمل ملف Dockerfile: الأساسيات

لإنشاء صور Dockerfile مخصصة، أول شيء هو تحديد الصورة الأساسية التي سنبدأ منها. يتم ذلك بالتوجيه من عند. على سبيل المثال:

FROM ubuntu:20.04

ومن هناك، يتم تضمين تعليمات إضافية للسماح لك ببناء الصورة وتخصيصها:

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

يمكن أن يكون المثال العملي لملف Dockerfile على النحو التالي:

FROM ubuntu:20.04
RUN apt-get update && apt-get install -y sudo nano curl nmap
COPY script.sh /usr/local/bin/script.sh
RUN chmod +x /usr/local/bin/script.sh
ENV direcIP=127.0.0.1
CMD ["/usr/local/bin/script.sh"]

يقوم هذا المثال بتثبيت الأدوات اللازمة وتكوين نص تحليل مخصص مع عنوان IP كمتغير، مما يسمح بتعديله بسهولة عند تشغيل الحاوية.

تنظيم سياق البناء

عندما يقوم Docker ببناء صورة، فإنه يفعل ذلك من دليل يُعرف باسم سياق البناء. يجب أن يحتوي هذا الدليل على:

  • الملف Dockerfile.
  • جميع الملفات التي تريد نسخها إلى الحاوية (كود المصدر، البرامج النصية، التكوينات…).
  • ملف .dockerignore لتجنب تضمين الملفات غير الضرورية.

على سبيل المثال، إذا كنت تقوم ببناء صورة باستخدام تطبيق Python، فيجب أن يتضمن سياق البناء الخاص بك ما يلي:

  • Dockerfile
  • app.py
  • requirements.txt

يعد هذا أمرًا حيويًا حتى يتمكن Docker من نسخ العناصر الضرورية بشكل صحيح إلى الحاوية أثناء عملية البناء.

عامل ميناء

تجميع الصورة المخصصة

بمجرد أن يكون لديك Dockerfile والسياق جاهزين، يمكنك إنشاء الصورة باستخدام الأمر:

docker build -t nombreimagen:versión .

على سبيل المثال:

docker build -t miimagenpython:1.0 .

تشير النقطة اللاحقة («.») إلى أن سياق البناء هو الدليل الحالي. عند الانتهاء، سيعرض لك Docker معرف الصورة ويمكنك عرضه باستخدام:

docker images

اختبار وتشغيل صورتك المخصصة

إن إطلاق حاوية من صورتك الجديدة أمر بسيط مثل:

docker run --name miapp -it miimagenpython:1.0

إذا قمت بتكوينه بشكل صحيح (على سبيل المثال باستخدام Flask أو nginx)، فيمكنك الوصول إليه من المتصفح طالما قمت بتعيين المنافذ بشكل مناسب:

docker run -p 4000:4000 miimagenpython:1.0

عامل ميناء

استخدام متغيرات البيئة (ENV)

التوجيه ENV يسمح لك بتعيين القيم الافتراضية، ولكن يمكنك أيضًا تجاوزها في وقت التشغيل. سيكون أحد الأمثلة العملية هو تعيين عنوان IP للفحص باستخدام nmap:

ENV direcIP=127.0.0.1

ثم قم بتشغيل الحاوية مثل هذا:

docker run -e direcIP=192.168.1.1 miimagen

يتيح هذا الحصول على صور أكثر تنوعًا وقابلة لإعادة الاستخدام دون الحاجة إلى تعديلها باستمرار.

الملفات القابلة للتنفيذ الافتراضية: CMD وENTRYPOINT

هناك طريقتان لتحديد ما سيتم تشغيله افتراضيًا عند بدء تشغيل الحاوية: CMD y نقطة الدخول. الفرق بين الاثنين هو أن يمكن الكتابة فوق CMD بسهولة من المحطة، بينما يقوم ENTRYPOINT بتحويل الحاوية إلى نوع من الملفات القابلة للتنفيذ "المغلقة".

الممارسة الجيدة هي استخدام ENTRYPOINT لتشغيل البرامج النصية لبدء التشغيل وCMD كإعدادات افتراضية. على سبيل المثال:

ENTRYPOINT ["/start.sh"]
CMD ["defaultvalue"]

بهذه الطريقة، يمكنك تمرير حجج محددة دون تغيير منطق البرنامج النصي المضمن.

أفضل ممارسات Dockerfile والتحسينات

فيما يلي بعض التوصيات الرئيسية عند إنشاء صور Dockerfile مخصصة:

  • استخدم صورًا ذات قاعدة ضوئية مثل Alpine كلما أمكن ذلك (لأنها تشغل مساحة أقل وتكون أسرع).
  • تعليمات تشغيل المجموعات في كتلة واحدة لتقليل عدد الطبقات.
  • تجنب التعليمات التفاعلية (مثل مطالبات التأكيد). استخدم دائما -y o --no-prompt في المرافق.
  • احذف الملفات المؤقتة بعد الاستخدام.
  • استخدم .dockerignore كما تفعل مع .gitignore لعدم تضمين الملفات غير الضرورية.

يؤدي تطبيق هذه الإرشادات إلى تحسين أداء الصورة وتقليل المخاطر الأمنية.

التحكم في ذاكرة التخزين المؤقت أثناء البناء

يستخدم Docker نظام تخزين مؤقت ذكي لتجنب إعادة الخطوات التي لم تتغير. يؤدي هذا إلى تسريع عملية إعادة البناء. إذا قمت بتحرير صور Dockerfile المخصصة، فسيتم إعادة بنائها فقط من السطر الذي تم تغييره.

إذا كنت تريد فرض إعادة البناء بالكامل، يمكنك استخدام:

docker build --no-cache -t nombreimagen .

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

محور عامل ميناء

مشاركة الصور: Docker Hub والسجلات

بمجرد التحقق من صورتك المخصصة، يمكنك تحميلها إلى مستودع (مثل دوكر هاب) لمشاركتها. سيكون التدفق:

  1. سجل في Docker Hub وإنشاء مستودع.
  2. قم بتوصيل عميلك بـ Docker Hub مع docker login.
  3. وضع علامة على الصورة مع اسم المستخدم الخاص بك:
docker tag miimagen username/miimagen:1.0
  1. قم بتحميل الصورة مع:
docker push username/miimagen:1.0

بمجرد أن يتم ذلك ، سيتمكن أي شخص من تنزيل صورتك المخصصة واستخدامها استخدام:

docker pull username/miimagen:1.0

التكامل مع Docker Compose

في المشاريع الأكثر تعقيدًا، من الشائع الحاجة إلى عدة حاويات (الويب، قاعدة البيانات، موازن التحميل، وما إلى ذلك). ولتحقيق هذا الغرض يتم استخدامه عامل ميناء-compose.yml، حيث يمكنك تحديد الخدمات التي سيتم تشغيلها.

مثال على الاستخدام مع صورتك الخاصة سيكون:

version: '3'
services:
  web:
    image: username/miimagen:1.0
    ports:
      - "4000:4000"
  redis:
    image: redis

وهكذا، يمكن لـ Docker-compose نشر الخدمات من الصور المخصصة ودمجها. مع المعايير الأخرى بطريقة متسقة.

عند الإطلاق docker-compose up، يتم بدء تشغيل جميع الخدمات المحددة، وهو أمر مثالي لبيئات التطوير الكاملة.

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