مقدمة في بناء صور الدوكر ونشرها

docker build docker push dockerfile

تُعد صور الدوكر اللبنات الأساسية لحاويات الدوكر. تحتوي الصورة على كل ما هو مطلوب لتشغيل تطبيق أو خدمة داخل حاوية – الشفرة أو الثنائيات، وقت التشغيل، الاعتماديات، والإعدادات.

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

هناك خطوتان رئيسيتان للعمل مع صور الدوكر:

  1. البناء – إنشاء صورة دوكر من ملف Dockerfile
  2. الدفع – تحميل صورة إلى سجل مثل Docker Hub

سيغطي هذا الدليل هاتين الخطوتين بالتفصيل، بما في ذلك:

  • أساسيات ملف Dockerfile
  • بناء الصور محليًا
  • وسم الصور
  • دفع الصور إلى السجلات
  • إدارة الصور

أساسيات ملف Dockerfile

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

تشمل بعض تعليمات Dockerfile الشائعة ما يلي:

  • FROM – تحدد الصورة الأساسية للبناء عليها
  • COPY – نسخ الملفات من المضيف إلى الصورة
  • RUN – تشغيل الأوامر ونصوص الشل أثناء البناء
  • EXPOSE – تعريض منافذ الشبكة التي ستستمع عليها الحاوية
  • ENV – تعيين متغيرات البيئة
  • ENTRYPOINT – تحديد الملف التنفيذي لتشغيله عند بدء تشغيل الحاوية
  • CMD – معلمات افتراضية يتم تمريرها إلى ENTRYPOINT

فيما يلي مثال بسيط لملف Dockerfile يبني تطبيق Node.js:

# Use the latest Node.js 11 base image
FROM node:11
# Set the working directory in the container  
WORKDIR /app
# Copy package files and install dependencies
COPY package*.json ./
RUN npm install 
# Copy app source code
COPY . .
# Expose port and start application
EXPOSE 8080
CMD ["node", "app.js"] 

يستخدم هذا صورة node:11 كنقطة انطلاق، وينسخ مصدر تطبيق الويب إلى الصورة، ويثبّت الاعتماديات، ويعين التطبيق للبدء عند إطلاق الحاوية.

بناء الصور محليًا

مع جهوزية ملف Dockerfile، يمكنك بناء صورة باستخدام الأمر docker build. سيقوم هذا ببناء الصورة خطوة بخطوة وفقًا لتعليمات Dockerfile.

التنسيق الأساسي هو:

$ docker build [options] PATH

حيث المسار هو موقع ملف Dockerfile.

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

$ docker build -t my-app .

سيبحث عن ملف Dockerfile في الدليل الحالي ويبني صورة تُسمى my-app منه.

بعض الخيارات الرئيسية:

  • -t – وسم الصورة باسم مستودع ووسم
  • --no-cache – إعادة بناء الصورة من البداية بدلاً من استخدام الكاش
  • -f – مسار إلى ملف Dockerfile إذا لم يكن في الدليل الحالي

يمكنك بناء صور لبيئات أو معلمات مختلفة ببساطة عن طريق الاحتفاظ بملفات Dockerfile متعددة، على سبيل المثال Dockerfile.dev، Dockerfile.prod.

أثناء التطوير، سترغب في التكرار بسرعة عن طريق إعادة بناء الصور بشكل متكرر مع إجراء تغييرات على التطبيق. إن استخدام الكاش يسرع من أوقات إعادة البناء بشكل كبير.

وسم الصور

تُعرّف علامات الصورة صورة بأنها تنتمي إلى مستودع وتوفر اسم إصدار أو متغير.

تتكون العلامات من اسم المستودع واسم العلامة المفصولين بنقطتين، مثل my-app:latest.

عند بناء صورة، يقوم العلم -t بوسمها:

$ docker build -t my-app:latest .

يسمي هذا الصورة my-app ويوسمها latest.

إذا لم يتم توفير أي علامة، فيفترض latest.

بعض استراتيجيات التوسيم الشائعة:

  • latest – أحدث الإصدارات المستقرة
  • Git commit SHA – علامة البناء بـ SHA للارتباط
  • الإصدارات الدلالية – علامات مثل v1.0.2 لإصدارات النشر
  • علامات متغيرة – مثل prod، test، dev للإشارة إلى الغرض من الصورة

ملاحظة: تُعطي العلامات معنى وسياقًا للصورة. الصور غير الموسومة صعبة الإدارة.

يمكنك إعادة توسيم صورة موجودة لإضافة أو تعديل العلامات:

$ docker tag my-app:latest my-app:v1.0

دفع الصور إلى سجلات Docker

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

السجل الافتراضي هو Docker Hub، الذي يحتوي على مستودعات عامة وخاصة.

لدفع صورة:

  1. وسّم الصورة باسم السجل:
$ docker tag my-app:latest mydockerid/my-app:latest
  1. ادفع الصورة الموسومة:
$ docker push mydockerid/my-app:latest

سيقوم هذا بتحميل الصورة my-app:latest إلى مساحة التسمية mydockerid على Docker Hub.

للدفع إلى سجل مختلف:

$ docker push registry.example.com/my-app:latest

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

في سلسلة CI/CD، يمكنك أتمتة بناء الصور ودفعها إلى السجلات عند كل تغيير في الشفرة. هذا يتيح نشر التطبيقات باستمرار باستخدام أحدث الصور.

إدارة الصور المحلية

مع بناء الصور، سيقوم مضيف Docker بتخزينها محليًا في محرك Docker. لتحرير مساحة القرص، ستحتاج إلى تنظيف الصور القديمة وغير المستخدمة من حين لآخر.

بعض الأوامر المفيدة لإدارة الصور:

  • docker images – سرد جميع الصور على المضيف
  • docker image rm – إزالة صورة أو أكثر
  • docker image prune – إزالة الصور غير المستخدمة والمعلقة
  • docker rmi – إزالة الصورة بالمعرف أو الاسم

مثال على إزالة الصور:

# Remove specific image
$ docker image rm my-app:latest 
# Remove all images matching name
$ docker image rm my-app
# Remove dangling images 
$ docker image prune
# Remove all images 
$ docker rmi $(docker images -q)

استخدم هذه الأوامر بحذر لتجنب إزالة الصور قيد الاستخدام أو المطلوبة عن طريق الخطأ.

يمكنك أيضًا إعداد سياسات آلية لحذف الصور القديمة. على سبيل المثال، الاحتفاظ فقط بأحدث 10 علامات صورة لكل مستودع.

الخلاصة

هذا يغطي أساسيات بناء وتوسيم ودفع وإدارة صور Docker!

النقاط الرئيسية التي يجب تذكرها تشمل:

  • تُعرّف ملفات Dockerfile كيفية بناء الصور
  • docker build يحول ملف Dockerfile إلى صورة قابلة للتشغيل
  • يجب توسيم الصور باسم المستودع وأسماء الإصدار
  • docker push يرفع الصور إلى سجلات مثل Docker Hub
  • تُدير أوامر docker image الصور على مضيف Docker

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

LEAVE A COMMENT