أساسيات Docker: دليل شامل للمطورين
اكتشف المفاهيم الأساسية في Docker، وكيفية إنشاء الحاويات وإدارتها، وأفضل الممارسات للتكامل المستمر والنشر.
InSkillCoach
أساسيات Docker: دليل شامل للمطورين
لقد أحدث Docker ثورة في طريقة تطوير التطبيقات ونشرها وتشغيلها. يقدّم لك هذا الدليل المفاهيم الأساسية في Docker وكيفية استخدامه بفعالية ضمن سير عمل التطوير لديك.
ما هو Docker؟
Docker هو منصة لتوفير الحاويات (containerization) تتيح تغليف تطبيق وجميع اعتماداته داخل “حاوية” معزولة، يمكن تشغيلها على أي خادم. وخلافًا للأجهزة الافتراضية، لا تحتاج الحاويات إلى hypervisor، بل تعمل مباشرة على نواة الجهاز المضيف.
مزايا Docker
- اتساق البيئة: تتحول عبارة “تعمل على جهازي” إلى “تعمل في كل مكان”
- العزل: تعمل التطبيقات بشكل معزول دون أن تتداخل مع بعضها
- كفاءة استخدام الموارد: أخف من الأجهزة الافتراضية التقليدية
- نشر سريع: بدء تشغيل سريع للحاويات
- سهولة التوسّع: استنساخ الحاويات بسهولة
معمارية Docker
تتكون معمارية Docker من عدة مكوّنات رئيسية:
- Docker Daemon (dockerd): الخدمة التي تدير الحاويات
- Docker Client: واجهة سطر الأوامر
- Docker Registry: المستودع الذي تُخزَّن فيه الصور (مثل Docker Hub)
- Docker Images: قوالب للقراءة فقط تُستخدم لإنشاء الحاويات
- Docker Containers: النسخ قيد التشغيل من الصور
تثبيت Docker
Windows
# تثبيت Docker Desktop لنظام Windows
# التنزيل من https://www.docker.com/products/docker-desktop
# اتباع تعليمات التثبيت
Linux (Ubuntu)
# تحديث قائمة الحزم
sudo apt-get update
# تثبيت المتطلبات المسبقة
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
# إضافة مفتاح GPG الرسمي لـ Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# إعداد المستودع المستقر
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# تثبيت Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# إضافة المستخدم الخاص بك إلى مجموعة docker
sudo usermod -aG docker $USER
macOS
# تثبيت Docker Desktop لنظام Mac
# التنزيل من https://www.docker.com/products/docker-desktop
# اتباع تعليمات التثبيت
أوامر Docker الأساسية
إدارة الصور
# تنزيل صورة
docker pull ubuntu:latest
# عرض قائمة الصور
docker images
# بناء صورة انطلاقًا من Dockerfile
docker build -t mon-app:1.0 .
# حذف صورة
docker rmi ubuntu:latest
إدارة الحاويات
# إنشاء حاوية وتشغيلها
docker run -d -p 8080:80 --name mon-conteneur nginx
# عرض الحاويات قيد التشغيل
docker ps
# عرض جميع الحاويات (بما فيها المتوقفة)
docker ps -a
# إيقاف حاوية
docker stop mon-conteneur
# تشغيل حاوية موجودة
docker start mon-conteneur
# حذف حاوية
docker rm mon-conteneur
التفاعل مع الحاويات
# تنفيذ أمر داخل حاوية قيد التشغيل
docker exec -it mon-conteneur bash
# عرض سجلات حاوية
docker logs mon-conteneur
# نسخ الملفات إلى الحاوية أو منها
docker cp mon-fichier.txt mon-conteneur:/chemin/destination
docker cp mon-conteneur:/chemin/source/fichier.txt .
إنشاء Dockerfile
Dockerfile هو ملف نصي يحتوي على جميع الأوامر اللازمة لتجميع صورة Docker.
# استخدام صورة أساسية
FROM node:14-alpine
# تحديد مجلد العمل
WORKDIR /app
# نسخ ملفات الاعتمادات
COPY package*.json ./
# تثبيت الاعتمادات
RUN npm install
# نسخ بقية الملفات
COPY . .
# كشف منفذ
EXPOSE 3000
# تحديد الأمر الذي يُنفَّذ عند بدء تشغيل الحاوية
CMD ["npm", "start"]
أفضل الممارسات لملفات Dockerfile
- استخدام صور أساسية خفيفة مثل Alpine Linux
- دمج أوامر RUN لتقليل عدد الطبقات
- تنظيف ذاكرات التخزين المؤقت بعد تثبيت الحزم
- استخدام .dockerignore لاستبعاد الملفات غير الضرورية
- تحديد إصدارات دقيقة للاعتمادات
- استخدام مستخدمين غير root لتشغيل التطبيق
Docker Compose
Docker Compose أداة لتعريف التطبيقات متعددة الحاويات وتشغيلها.
مثال على docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "8000:8000"
volumes:
- ./app:/app
depends_on:
- db
environment:
- DATABASE_URL=postgres://postgres:password@db:5432/app
db:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=password
- POSTGRES_USER=postgres
- POSTGRES_DB=app
volumes:
postgres_data:
أوامر Docker Compose
# تشغيل جميع الخدمات المعرّفة في docker-compose.yml
docker-compose up -d
# إيقاف جميع الخدمات
docker-compose down
# عرض سجلات جميع الخدمات
docker-compose logs
# إعادة بناء الصور ثم التشغيل
docker-compose up -d --build
شبكات Docker
ينشئ Docker افتراضيًا عدة شبكات:
- bridge: الشبكة الافتراضية للحاويات
- host: يزيل العزل الشبكي بين الحاوية والمضيف
- none: يعطّل الشبكة
إنشاء الشبكات وإدارتها
# إنشاء شبكة
docker network create mon-reseau
# عرض قائمة الشبكات
docker network ls
# ربط حاوية بشبكة
docker network connect mon-reseau mon-conteneur
# فحص شبكة
docker network inspect mon-reseau
وحدات التخزين (Volumes) في Docker
تتيح وحدات التخزين الاحتفاظ بالبيانات خارج الحاويات.
أنواع وحدات التخزين
- وحدة تخزين مسمّاة (Named volume): يديرها Docker
- وحدة تخزين مرتبطة (Bind mount): مرتبطة بمسار محدد على المضيف
- وحدة تخزين tmpfs: تُخزَّن في الذاكرة (غير دائمة)
أوامر إدارة وحدات التخزين
# إنشاء وحدة تخزين مسمّاة
docker volume create mon-volume
# عرض قائمة وحدات التخزين
docker volume ls
# استخدام وحدة تخزين عند تشغيل حاوية
docker run -d -v mon-volume:/data --name mon-conteneur ubuntu
# ربط مجلد من المضيف بحاوية
docker run -d -v /chemin/hote:/data --name mon-conteneur ubuntu
# حذف وحدة تخزين
docker volume rm mon-volume
Docker Registry
الـ registry هو خدمة لتخزين صور Docker وتوزيعها.
التعامل مع Docker Hub
# تسجيل الدخول إلى Docker Hub
docker login
# وسم صورة
docker tag mon-app:1.0 utilisateur/mon-app:1.0
# دفع صورة إلى Docker Hub
docker push utilisateur/mon-app:1.0
# جلب صورة من Docker Hub
docker pull utilisateur/mon-app:1.0
نشر Registry خاص
# تشغيل registry محلي
docker run -d -p 5000:5000 --name registry registry:2
# وسم صورة لتُدفع إلى registry المحلي
docker tag mon-app:1.0 localhost:5000/mon-app:1.0
# الدفع إلى registry المحلي
docker push localhost:5000/mon-app:1.0
أمان Docker
أفضل الممارسات
- إبقاء Docker محدّثًا للاستفادة من تصحيحات الأمان
- فحص الصور لاكتشاف الثغرات (باستخدام Docker Scout أو Trivy)
- تقييد صلاحيات الحاويات
- استخدام مستخدمين غير root داخل الحاويات
- توقيع الصور باستخدام Docker Content Trust
- تقييد الموارد (المعالج والذاكرة) للحاويات
الإعداد الآمن
# تشغيل حاوية مع قيود على الموارد
docker run -d --name mon-conteneur --memory="512m" --cpus="0.5" nginx
# تشغيل حاوية بمستخدم محدد
docker run -d --user 1000:1000 --name mon-conteneur nginx
# تشغيل حاوية في وضع القراءة فقط
docker run -d --read-only --name mon-conteneur nginx
حالات الاستخدام الشائعة
تطبيقات الويب
# تشغيل تطبيق ويب Node.js
docker run -d -p 3000:3000 --name node-app node-app:1.0
# تشغيل خادم Nginx كوكيل عكسي
docker run -d -p 80:80 --name nginx -v ./nginx.conf:/etc/nginx/nginx.conf nginx
قواعد البيانات
# تشغيل قاعدة بيانات MySQL
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=password -v mysql_data:/var/lib/mysql mysql:8.0
# تشغيل قاعدة بيانات PostgreSQL
docker run -d --name postgres -e POSTGRES_PASSWORD=password -v postgres_data:/var/lib/postgresql/data postgres:13
CI/CD
# تنفيذ الاختبارات داخل حاوية
docker run --rm -v $(pwd):/app -w /app node:14 npm test
# بناء تطبيق داخل حاوية
docker run --rm -v $(pwd):/app -w /app maven:3.8-openjdk-11 mvn package
التكامل مع Kubernetes
يعمل Docker بشكل ممتاز مع Kubernetes، منسّق الحاويات (container orchestrator):
- إنشاء صور Docker لتطبيقك
- دفع الصور إلى registry يمكن الوصول إليه
- تعريف ملفات manifest الخاصة بـ Kubernetes لنشر الحاويات
- استخدام kubectl لإدارة عمليات النشر
الخاتمة
لقد غيّر Docker تطوير البرمجيات إذ جعل التطبيقات أكثر قابلية للنقل، وأسهل في النشر والتوسّع. وأصبح إتقان Docker مهارة أساسية للمطورين ومحترفي DevOps.
باتباعك هذا الدليل، اكتسبت المعارف الأساسية التي تمكّنك من:
- فهم المفاهيم الرئيسية في Docker
- إنشاء الحاويات وإدارتها
- العمل مع الصور ووحدات التخزين
- استخدام Docker Compose للتطبيقات متعددة الحاويات
- اتباع أفضل ممارسات الأمان
وللمضي أبعد من ذلك، استكشف تنسيق الحاويات باستخدام Kubernetes، وخطوط CI/CD القائمة على Docker، ومعمارية الخدمات المصغّرة (microservices).
نبذة عن InSkillCoach
خبير في التدريب والتقنيات
مدرّب متخصص في التقنيات المتقدمة والذكاء الاصطناعي، تدعمه شركة GNeurone Inc.
الشهادات:
- AWS Certified Solutions Architect – Professional
- شهادات Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
التعليقات
التعليقات مدعومة عبر GitHub Discussions
سجّل الدخول باستخدام GitHub للمشاركة في النقاش