
تُعد صور الدوكر اللبنات الأساسية لحاويات الدوكر. تحتوي الصورة على كل ما هو مطلوب لتشغيل تطبيق أو خدمة داخل حاوية – الشفرة أو الثنائيات، وقت التشغيل، الاعتماديات، والإعدادات.
الصور ثابتة، مما يعني أنه لا يمكن تغييرها بمجرد بنائها. لإجراء تغييرات، عليك بناء صورة جديدة. كما أن الصور مطبقة، مما يعني أن كل صورة تبنى فوق صورة أساسية، مضيفة فقط التغييرات اللازمة لتلك الصورة المحددة. هذا يجعل الصور خفيفة وقابلة لإعادة الاستخدام وسريعة البناء.
هناك خطوتان رئيسيتان للعمل مع صور الدوكر:
- البناء – إنشاء صورة دوكر من ملف Dockerfile
- الدفع – تحميل صورة إلى سجل مثل 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، الذي يحتوي على مستودعات عامة وخاصة.
لدفع صورة:
- وسّم الصورة باسم السجل:
$ docker tag my-app:latest mydockerid/my-app:latest
- ادفع الصورة الموسومة:
$ 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 ناضجة.