Docker للمطورين: الصور والحاويات وCompose
كمطور، من المحتمل أنك واجهت إحباط عدم اتساق البيئة: "إنه يعمل على جهازي!" يحل Docker هذه المشكلة عن طريق تغليف التطبيقات في حاويات. يشرح هذا الدليل صور Docker والحاويات وCompose لمساعدتك في بناء وشحن وتشغيل التطبيقات بشكل متسق.
ما هو Docker؟
Docker هو منصة لتطوير وشحن وتشغيل التطبيقات في حاويات. الحاويات هي حزم خفيفة الوزن ومستقلة وقابلة للتنفيذ تتضمن كل ما يلزم لتشغيل البرامج: الكود، وبيئة التشغيل، وأدوات النظام، والمكتبات، والإعدادات.
الصور مقابل الحاويات
الصورة هي قالب للقراءة فقط يحتوي على تعليمات لإنشاء حاوية. الحاوية هي نسخة قابلة للتشغيل من صورة. يمكنك إنشاء حاويات متعددة من نفس الصورة، كل منها معزولة عن الأخرى.
العمل مع الصور
يتم بناء الصور من Dockerfile، وهو ملف نصي يحتوي على تعليمات. إليك مثال بسيط لـ Node.js:
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
قم ببناء الصورة باستخدام:
docker build -t my-app .
سرد الصور: docker images
تشغيل الحاويات
ابدأ حاوية من صورة:
docker run -d -p 3000:3000 --name my-container my-app
يقوم هذا بتشغيل الحاوية في وضع منفصل (-d)، وربط المنفذ 3000، وتسميتها my-container.
سرد الحاويات قيد التشغيل: docker ps
إيقاف حاوية: docker stop my-container
إزالة حاوية: docker rm my-container
لماذا استخدام Docker Compose؟
عندما يعتمد تطبيقك على خدمات متعددة (قاعدة بيانات، ذاكرة تخزين مؤقت، إلخ)، تصبح إدارة الحاويات الفردية مرهقة. يتيح لك Docker Compose تعريف وتشغيل تطبيقات متعددة الحاويات باستخدام ملف YAML.
مثال على ملف Compose
أنشئ docker-compose.yml:
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: example
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
تشغيل جميع الخدمات: docker compose up -d
إيقاف وإزالة: docker compose down
أفضل الممارسات للمطورين
- استخدم .dockerignore: استبعد الملفات غير الضرورية (node_modules, .git) لتسريع عمليات البناء.
- عمليات بناء متعددة المراحل: حافظ على صور الإنتاج صغيرة عن طريق فصل مراحل البناء والتشغيل.
- استفد من التخزين المؤقت: رتب تعليمات Dockerfile من الأقل إلى الأكثر تغيرًا بشكل متكرر.
- قم بوسم الصور بشكل صحيح: تجنب استخدام
latestفي الإنتاج؛ استخدم الترقيم الدلالي. - افحص الثغرات الأمنية: استخدم
docker scanللتحقق من الصور بحثًا عن مشكلات معروفة.
ورقة مرجعية للأوامر الشائعة
| الأمر | الوصف |
|---|---|
docker build -t name . | بناء صورة من Dockerfile |
docker run -p host:container image | تشغيل حاوية وربط المنافذ |
docker ps -a | سرد جميع الحاويات |
docker exec -it container bash | فتح shell داخل حاوية قيد التشغيل |
docker compose up | تشغيل الخدمات المحددة في ملف Compose |
docker compose logs -f | متابعة السجلات من جميع الخدمات |
الأسئلة الشائعة
ما الفرق بين الصورة والحاوية؟
الصورة هي قالب ثابت؛ الحاوية هي نسخة قيد التشغيل من تلك الصورة. يمكنك إنشاء العديد من الحاويات من صورة واحدة.
متى يجب أن أستخدم Docker Compose؟
استخدم Compose عندما يتطلب تطبيقك خدمات متعددة (مثل خادم ويب، قاعدة بيانات، ذاكرة تخزين مؤقت) تحتاج إلى العمل معًا. إنه يبسط التنسيق للتطوير والاختبار.
كيف أحافظ على استمرارية البيانات في Docker؟
استخدم وحدات التخزين (volumes) أو عمليات الربط (bind mounts). تتم إدارة وحدات التخزين بواسطة Docker وتُخزن في منطقة مخصصة؛ عمليات الربط تربط بدليل المضيف. كلاهما يبقى بعد إعادة تشغيل الحاوية.
هل أنت مستعد لتبسيط سير عمل Docker الخاص بك؟ جرب محلل سجلات Nginx لتصحيح سجلات الحاويات بسرعة.