🐳 دوكر

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
نُشر

٨ ربيع الأول ١٤٤٧ هـ

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

📦 الأوامر الأساسية

الأمر

مثال

الوصف

docker الأمر الرئيسي لسطر أوامر Docker المستخدم لتشغيل الأوامر الفرعية وإدارة الحاويات والصور والشبكات والتخزين
docker version عرض إصدار Docker المثبت (العميل والخادم). مفيد للتحقق من التثبيت
docker version --format '{{.Client.APIVersion}}'

عرض إصدار API للعميل فقط

docker version --format '{{.Server.Version}}'

عرض إصدار الخادم (Engine) فقط

docker version --format '{{json .}}'

إخراج معلومات الإصدار بالكامل بتنسيق JSON

docker system info عرض معلومات النظام العامة: عدد الحاويات، الصور، الموارد
docker info

عرض بيانات Docker: الإصدارات، الشبكات، عدد الحاويات والصور

docker info --format '{{json .}}'

إخراج المعلومات بتنسيق JSON — مفيد للأتمتة

docker info --format '{{.NCPU}} CPUs, {{.MemTotal}} bytes RAM'

عرض عدد وحدات المعالجة والذاكرة الكلية

docker info --format '{{.Driver}}'

عرض برنامج التخزين المستخدم من Docker

docker image pull تحميل صورة من Docker Hub أو سجل آخر. لا يمكن تشغيل الحاويات بدون صور
docker pull ubuntu

تحميل أحدث صورة Ubuntu

docker pull nginx:alpine

تحميل صورة Nginx خفيفة مبنية على Alpine

docker pull redis:7

تحميل صورة Redis الإصدار 7

docker container run إنشاء وتشغيل حاوية جديدة من صورة
docker run -it ubuntu bash

تشغيل Ubuntu مع طرفية Bash تفاعلية

docker run -d nginx

تشغيل Nginx في الوضع المنفصل (الخلفية)

docker run -p 8080:80 nginx

تشغيل Nginx وربط منفذ 80 في الحاوية مع منفذ 8080 على المضيف

docker container ls إدراج الحاويات قيد التشغيل
docker ps

عرض الحاويات قيد التشغيل فقط

docker ps -a

عرض جميع الحاويات بما في ذلك المتوقفة

docker ps --format '{{.Names}}'

إخراج أسماء الحاويات فقط

docker container start بدء تشغيل حاويات متوقفة
docker start container_name

بدء حاوية بالاسم

docker start $(docker ps -aq)

بدء جميع الحاويات

docker start -ai container_name

بدء حاوية مع إرفاق طرفية تفاعلية

docker container stop إيقاف تشغيل حاوية قيد التشغيل
docker stop container_name

إيقاف حاوية بالاسم

docker stop $(docker ps -q)

إيقاف جميع الحاويات قيد التشغيل

docker stop -t 5 container_name

إيقاف حاوية ومنحها 5 ثوانٍ لإنهاء العمليات

docker container restart إعادة تشغيل حاوية
docker restart container_name

إعادة تشغيل حاوية محددة

docker restart $(docker ps -q)

إعادة تشغيل جميع الحاويات قيد التشغيل

docker restart -t 10 container_name

إعادة تشغيل حاوية مع تأخير 10 ثوانٍ

docker container rm إزالة حاوية
docker rm container_name

إزالة حاوية متوقفة محددة

docker rm $(docker ps -aq)

إزالة جميع الحاويات المتوقفة

docker rm -f container_name

إجبار إزالة حاوية قيد التشغيل

docker image ls إدراج الصور التي تم تحميلها
docker images

عرض جميع الصور على المضيف

docker images -a

عرض جميع الصور بما في ذلك الطبقات الوسيطة

docker images --format '{{.Repository}}:{{.Tag}}'

إخراج أسماء الصور والعلامات فقط

docker image rm إزالة صورة أو أكثر من التخزين المحلي
docker rmi test1:latest

إزالة صورة بعلامة latest من المستودع test1

docker rmi 1a2b3c4d5e6f

إزالة صورة باستخدام معرفها

docker rmi $(docker images -q)

إزالة جميع الصور (بحذر!)

🔁 إدارة الحاويات

الأمر

مثال

الوصف

docker container exec تشغيل أمر داخل حاوية قيد التشغيل
docker exec -it container bash

تشغيل طرفية bash تفاعلية داخل الحاوية المسماة container

docker exec container ls /app

تنفيذ أمر ls في مجلد /app داخل الحاوية

docker exec -d container touch /tmp/testfile

تشغيل أمر في الحاوية في وضع الخلفية بدون انتظار

docker container logs عرض سجلات الحاويات
docker logs container

عرض جميع السجلات من الحاوية container

docker logs -f container

متابعة السجلات في الوقت الفعلي

docker logs --tail 50 container

عرض آخر 50 سطرًا من السجلات

docker inspect استرجاع معلومات JSON تفصيلية عن حاوية أو صورة
docker inspect container

عرض تفاصيل الحاوية container

docker inspect --format '{{.NetworkSettings.IPAddress}}' container

عرض عنوان IP للحاوية

docker container stats عرض إحصاءات استخدام الموارد في الوقت الفعلي
docker stats

عرض CPU، الذاكرة، الشبكة والقرص لجميع الحاويات

docker stats container_name

عرض الإحصاءات لحاوية محددة فقط

docker stats --no-stream

عرض لقطة واحدة من الإحصاءات والخروج

docker container rename إعادة تسمية حاوية
docker rename old_name new_name

إعادة تسمية حاوية من old_name إلى new_name

docker container cp نسخ الملفات بين الحاوية والمضيف
docker cp container:/src/file.txt ./file.txt

نسخ ملف من الحاوية إلى مجلد المضيف الحالي

docker cp ./config.yaml container:/app/config.yaml

نسخ ملف من المضيف إلى الحاوية

docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR"

بث ملف سجل من الحاوية وتصفيته بخطوط تحتوي “ERROR” بدون حفظه

docker container top عرض العمليات الجارية داخل الحاوية
docker top container

عرض العمليات للحاوية المسماة container

docker container pause إيقاف جميع العمليات مؤقتًا في الحاوية
docker pause container

إيقاف الحاوية container مؤقتًا

docker container unpause استئناف حاوية موقوفة
docker unpause container

استئناف الحاوية container

docker container update تحديث إعدادات الحاوية بدون إعادة تشغيل
docker update --memory 500m container

تقييد استخدام الذاكرة في الحاوية إلى 500 ميغابايت

🧱 الصور و Dockerfile

الأمر

مثال

الوصف

docker buildx build بناء صورة Docker من Dockerfile
docker build -t my_image .

بناء صورة بعلامة my_image من المجلد الحالي

docker build -t my_image:1.0 .

بناء صورة بعلامة الإصدار 1.0

docker build --no-cache -t my_image .

بناء صورة بدون استخدام ذاكرة التخزين المؤقت لبناء نظيف

docker container commit إنشاء صورة من الحالة الحالية لحاوية
docker commit container my_img:v1

إنشاء صورة my_img بعلامة v1 من الحاوية container

docker commit -m "Added config" container my_img:v2

إنشاء صورة مع رسالة commit

docker commit -a "John Doe" container my_img:latest

إنشاء صورة مع تحديد المؤلف

docker image tag إضافة أو تغيير علامة لصورة
docker tag my_image myrepo/my_image:latest

إضافة علامة لدفعها إلى المستودع myrepo

docker tag my_image:1.0 my_image:stable

إنشاء علامة stable للصورة ذات العلامة 1.0

docker tag my_image my_image:backup

إضافة علامة backup لصورة محلية

docker image push دفع صورة إلى Docker Hub أو سجل آخر
docker push myrepo/my_image:latest

دفع صورة بعلامة latest إلى المستودع myrepo

docker push myrepo/my_image:1.0

دفع صورة بعلامة 1.0

docker push myrepo/my_image

دفع صورة مع العلامة الافتراضية latest

docker login تسجيل الدخول إلى Docker Hub أو سجل آخر
docker login

إدخال اسم المستخدم وكلمة المرور بشكل تفاعلي

docker login myregistry.local:5000

تسجيل الدخول إلى سجل خاص

docker login -u username -p password

تسجيل الدخول باسم مستخدم وكلمة مرور (غير مستحسن)

docker logout تسجيل الخروج من Docker Hub أو سجل آخر
docker logout

تسجيل الخروج من Docker Hub

docker logout myregistry.local:5000

تسجيل الخروج من سجل خاص

HEALTHCHECK تعليمة في Dockerfile للتحقق تلقائيًا من صحة الحاوية
HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost/ || exit 1

إضافة فحص صحة للتحقق من الخدمة كل 30 ثانية

docker inspect --format='{{json .State.Health}}' container_name

التحقق من حالة الصحة لحاوية قيد التشغيل

🔌 الشبكات والتخزين

الأمر

مثال

الوصف

docker network ls إدراج جميع شبكات Docker
docker network ls

عرض جميع الشبكات التي تم إنشاؤها

docker network ls --filter driver=bridge

عرض الشبكات التي تستخدم السائق bridge فقط

docker network ls --format '{{.Name}}'

عرض أسماء الشبكات فقط

docker network create إنشاء شبكة جديدة
docker network create my_net

إنشاء شبكة باسم my_net بالإعدادات الافتراضية

docker network create --driver bridge my_bridge_net

إنشاء شبكة باستخدام السائق bridge

docker network create --subnet=192.168.10.0/24 my_custom_net

إنشاء شبكة مع نطاق IP محدد

docker network connect توصيل حاوية بشبكة
docker network connect my_net container

توصيل الحاوية container بالشبكة my_net

docker network connect --alias db_net my_net container

توصيل مع اسم مستعار db_net

docker network disconnect فصل حاوية عن شبكة
docker network disconnect my_net container

فصل الحاوية container عن الشبكة my_net

docker volume ls إدراج جميع وحدات تخزين Docker
docker volume ls

عرض جميع وحدات التخزين

docker volume ls --filter dangling=true

عرض الوحدات غير المستخدمة

docker volume create إنشاء وحدة تخزين جديدة
docker volume create my_vol

إنشاء وحدة تخزين باسم my_vol

docker volume create --driver local --opt type=tmpfs my_tmp_vol

إنشاء وحدة تخزين مؤقتة باستخدام tmpfs

docker volume inspect عرض معلومات تفصيلية عن وحدة تخزين
docker volume inspect my_vol

عرض تفاصيل وحدة التخزين my_vol بتنسيق JSON

docker volume rm إزالة وحدة تخزين أو أكثر
docker volume rm my_vol

إزالة وحدة التخزين my_vol

docker volume rm $(docker volume ls -qf dangling=true)

إزالة جميع الوحدات غير المستخدمة

🧩 إضافات دوكر

الأمر

مثال

الوصف

docker plugin ls إدراج إضافات Docker المثبتة
docker plugin ls

عرض جميع الإضافات وحالتها

docker plugin install تثبيت إضافة من السجل
docker plugin install vieux/sshfs

تثبيت إضافة التخزين SSHFS

docker plugin install store/weaveworks/net-plugin:latest_release

تثبيت إضافة الشبكة Weave

docker plugin disable تعطيل إضافة مثبتة
docker plugin disable vieux/sshfs

تعطيل إضافة SSHFS

docker plugin enable تمكين إضافة معطلة مسبقًا
docker plugin enable vieux/sshfs

تمكين إضافة SSHFS

docker plugin rm إزالة إضافة Docker
docker plugin rm vieux/sshfs

إزالة إضافة SSHFS

📋 دوكر كومبوز

الأمر

مثال

الوصف

docker compose up بدء الحاويات المعرفة في docker-compose.yml
docker compose up

بدء جميع الخدمات في المجلد الحالي في الوضع التفاعلي

docker compose up -d

بدء الخدمات في الوضع المنفصل (الخلفية)

docker compose up --build

بناء الصور قبل بدء الخدمات

docker compose down إيقاف وإزالة الحاويات والشبكات ووحدات التخزين التي تم إنشاؤها بواسطة up
docker compose down

إيقاف جميع الخدمات وإزالة الموارد المرتبطة

docker compose down --volumes

إزالة وحدات التخزين التي أنشأها Compose أيضًا

docker compose down --rmi all

إزالة الصور التي أنشأها Compose أيضًا

docker compose logs عرض سجلات جميع الخدمات أو خدمات محددة
docker compose logs

عرض سجلات جميع الخدمات

docker compose logs -f

متابعة السجلات في الوقت الفعلي

docker compose logs web

عرض سجلات الخدمة web فقط

docker compose exec تشغيل أمر داخل حاوية خدمة قيد التشغيل
docker compose exec web bash

دخول صدفة bash تفاعلية داخل حاوية الخدمة web

docker compose exec db ls /var/lib/postgresql

تشغيل أمر ls داخل حاوية قاعدة البيانات

docker compose exec -d worker touch /tmp/done

تشغيل أمر داخل حاوية worker في الوضع المنفصل

docker compose build بناء أو إعادة بناء صور الخدمات
docker compose build

بناء جميع الصور المعرفة في docker-compose.yml

docker compose build web

بناء صورة خدمة web فقط

docker compose build --no-cache

بناء الصور بدون استخدام الكاش

docker compose ps عرض حالة جميع الخدمات والحاويات
docker compose ps -a

عرض جميع الحاويات بما في ذلك المتوقفة

docker compose ps --services

عرض أسماء الخدمات فقط

docker compose pull تحميل/تحديث صور الخدمات من السجل
docker compose pull web

تحميل صورة خدمة web فقط

docker compose pull --ignore-pull-failures

الاستمرار في التحميل حتى إذا فشلت بعض الصور

docker compose restart إعادة تشغيل جميع الخدمات أو خدمات محددة
docker compose restart db

إعادة تشغيل خدمة db فقط

docker compose restart -t 10

إعادة تشغيل الخدمات بمهلة 10 ثوانٍ

docker compose config عرض التكوين النهائي لـ Compose بتنسيق YAML
docker compose config --services

إدراج جميع الخدمات في التكوين

docker compose config --volumes

إدراج جميع وحدات التخزين المعرفة في التكوين

docker compose start بدء الخدمات المتوقفة بدون إعادة إنشاء الحاويات
docker compose start web

بدء خدمة web

docker compose start db api

بدء عدة خدمات في وقت واحد

docker compose stop إيقاف الخدمات بدون إزالة الحاويات
docker compose stop web

إيقاف خدمة web

docker compose stop -t 5

إيقاف الخدمات بمهلة 5 ثوانٍ

📤 التصدير والاستيراد

الأمر

مثال

الوصف

docker image save حفظ صورة أو أكثر إلى أرشيف tar للاستيراد أو النقل لاحقًا
docker save -o image.tar my_img:tag

حفظ صورة Docker إلى ملف tar

docker save my_image > my_image.tar

طريقة بديلة لحفظ صورة إلى ملف

docker save -o redis_latest.tar redis:latest

حفظ صورة Redis محددة إلى ملف

docker image load تحميل صور Docker من أرشيف tar محفوظ مسبقًا
docker load < image.tar

تحميل صورة Docker من ملف tar

docker load --input redis_latest.tar

تحميل صورة بتحديد الملف عبر وسيط

docker load --quiet < my_image.tar

تحميل صورة بدون إخراج تقدم

docker container export تصدير نظام ملفات الحاوية كأرشيف tar بدون تاريخ الصورة أو البيانات الوصفية
docker export container > file.tar

تصدير نظام ملفات الحاوية إلى أرشيف

docker export my_container > my_container_fs.tar

تصدير حاوية بالاسم

docker export -o container_fs.tar container_id

تصدير باستخدام معرف الحاوية مع الخيار -o

docker image import إنشاء صورة جديدة من أرشيف نظام ملفات
docker import file.tar new_img

استيراد ملف أرشيف كصورة Docker جديدة

docker import https://example.com/image.tar my_new_image

استيراد صورة مباشرة من URL

docker import - my_image < file.tar

استيراد من الإدخال القياسي

🧹 التنظيف والتشخيص

الأمر

مثال

الوصف

docker system df عرض استخدام مساحة Docker: وحدات التخزين، الصور، الحاويات، وذاكرة التخزين المؤقت للبناء
docker system df -v

إخراج تفصيلي لكل صورة وحاوية ووحدة تخزين

docker system df --format '{{json .}}'

إخراج المعلومات بتنسيق JSON

docker system prune إزالة جميع بيانات Docker غير المستخدمة: الحاويات المتوقفة، الشبكات غير المستخدمة، الصور المعلقة، وذاكرة التخزين المؤقت
docker system prune -a

إزالة الصور غير المستخدمة بما في ذلك الوسيطة

docker system prune --volumes

إزالة وحدات التخزين غير المستخدمة أيضًا

docker image prune إزالة الصور غير المستخدمة بما في ذلك الطبقات المعلقة
docker image prune -a

إزالة جميع الصور غير المستخدمة

docker image prune --filter "until=24h"

إزالة الصور الأقدم من 24 ساعة

docker container prune إزالة الحاويات المتوقفة حسب المرشحات أو جميعها إذا لم يتم تحديد أي منها
docker container prune --filter "until=24h"

إزالة الحاويات المتوقفة الأقدم من 24 ساعة

docker container prune --force

إزالة بدون مطالبة بالتأكيد

🐝 دوكر سوارم

الأمر

مثال

الوصف

docker swarm init تهيئة عنقود Swarm جديد على العقدة الحالية
docker swarm init --advertise-addr 192.168.1.100

تهيئة العنقود مع تحديد عنوان IP

docker swarm init --listen-addr 0.0.0.0:2377

تهيئة مع منفذ استماع محدد

docker service create إنشاء خدمة جديدة في العنقود
docker service create --name nginx nginx

إنشاء خدمة Nginx في Swarm

docker service create --replicas 3 --name web webserver

إنشاء خدمة مع 3 نسخ

docker service create --name redis --publish 6379:6379 redis

إنشاء خدمة مع تعيين منفذ

docker stack deploy نشر حزمة خدمات إلى العنقود بناءً على ملف Compose
docker stack deploy -c docker-compose.yml mystack

نشر الحزمة من ملف compose

docker stack deploy --with-registry-auth -c compose.yml mystack

النشر مع إعادة توجيه مصادقة السجل

docker stack deploy -c swarm-compose.yml mystack

استخدام ملف compose بديل للحزمة

docker stack rm إزالة حزمة أو أكثر من العنقود
docker stack rm mystack

إزالة الحزمة mystack

docker stack rm

إزالة جميع الحزم (غير مستحسن)

docker stack rm mystack && docker swarm leave --force

إزالة الحزمة والخروج من Swarm

💼 استخدام دوكر المتقدم

🚀 أوامر دوكر الاحترافية

الأمر

مثال

الوصف

docker buildx أداة بناء صور متقدمة بديلة لـ docker build. تدعم المنصات المتعددة، الكاش، البناء المتوازي، والتصدير لتنسيقات متعددة. مفيدة لـ CI/CD والتطوير متعدد المنصات
docker buildx build --platform linux/arm64,linux/amd64 -t myimg:multi .

بناء صورة متعددة المنصات (ARM و x86 في آن واحد)

docker buildx build --load -t localimg .

بناء صورة وتحميلها إلى كاش Docker المحلي

docker buildx build --push --platform linux/amd64,linux/arm64 -t repo/app:latest .

بناء ودفع صورة متعددة المنصات إلى السجل

docker context إدارة سياقات Docker للعمل مع بيئات محلية وبعيدة. تتيح التبديل السريع بين محركات Docker
docker context create myremote --docker "host=ssh://user@host"

إنشاء سياق للاتصال بمضيف بعيد

docker context use myremote

التبديل إلى السياق البعيد

docker context ls

إدراج السياقات المتاحة والنشط منها

docker system events الاستماع لأحداث Docker في الوقت الفعلي مع تصفية حسب نوع الحدث (مثل بدء الحاوية). مفيد للمراقبة والأتمتة
docker events --filter 'event=start'

عرض أحداث بدء الحاويات فقط

docker events --since 1h --until 10m

عرض الأحداث من الساعة الماضية حتى 10 دقائق مضت

docker events --filter 'type=network'

عرض الأحداث المتعلقة بالشبكات فقط

docker events --filter 'image=nginx'

عرض الأحداث المرتبطة بصورة nginx

docker container update تغيير حدود الموارد وإعدادات حاوية قيد التشغيل بدون إعادة تشغيلها
docker update --cpus 2 --memory 1g my_container

تعيين الحد إلى 2 CPU و1 جيجابايت RAM

docker update --restart unless-stopped my_container

تعيين سياسة إعادة التشغيل unless-stopped

docker update --pids-limit 200 my_container

تقييد عدد العمليات إلى 200

docker container diff عرض تغييرات نظام الملفات في الحاوية مقارنة بالصورة الأصلية. مفيد للتصحيح والتدقيق
docker diff my_container

عرض جميع تغييرات نظام الملفات في الحاوية

docker diff my_container | grep '^A'

عرض الملفات المضافة فقط (A — Added)

docker image history عرض تاريخ طبقات الصورة: أوامر البناء، حجم كل طبقة، ووقت الإنشاء. مفيد للتحسين والتدقيق
docker history my_image

عرض تاريخ الطبقات لصورة

docker history --no-trunc my_image

عرض أوامر البناء كاملة بدون اختصار

docker history --format "{{.CreatedBy}}: {{.Size}}" my_image

إخراج أوامر البناء وأحجام الطبقات فقط

🛠 ممارسات دوكر المفيدة والأتمتة

  • تقليل حجم الصورة
    استخدم صور أساسية مثل alpine أو scratch للحصول على حجم صغير.
    لدمج الطبقات، استخدم --squash أثناء البناء (يتطلب تفعيل الميزات التجريبية).
    أيضًا، أزل الملفات المؤقتة والكاش في طبقة واحدة:

    RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
  • تقليل عدد الطبقات
    ادمج الأوامر في RUN واحد لتقليل الطبقات وحجم الصورة النهائي:

    RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
  • تحسين بناء Dockerfile
    استخدم البناء متعدد المراحل بحيث تبقى الملفات الضرورية فقط في الصورة النهائية.
    انسخ وثبّت التبعيات أولاً، ثم انسخ الكود — هذا يحسّن الكاش ويُسرّع إعادة البناء.

  • فصل الأسرار والإعدادات
    لا تخزن ملفات .env أو مفاتيح API أو الشهادات الخاصة داخل الصورة.
    استخدم للتكوين:

    • docker secret (في Swarm)
    • متغيرات البيئة (-e VAR=value أو .env)
    • وحدات تخزين خارجية للإعدادات

  • أسرار وقت البناء (BuildKit)
    لتمرير الأسرار بأمان أثناء البناء، استخدم الخيار --secret:

    docker buildx build --secret id=mysecret,src=./secret.txt .

    في Dockerfile، السر متاح في /run/secrets/mysecret:

    RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret

    🛡 يمنع هذا تخزين الأسرار في طبقات الصورة.

  • دوكر بدون صلاحيات root
    تشغيل Docker بدون حقوق root يحسن الأمان ويقلل مخاطر الاختراق.
    للتفعيل:

    dockerd-rootless-setuptool.sh install
    export PATH=/usr/bin:$PATH

    تحقق:

    docker info | grep Rootless

    ⚠ بعض الميزات (مثل إعادة توجيه المنافذ <1024) لن تكون متاحة.

  • فحص الصور بحثًا عن الثغرات
    استخدم الأدوات المدمجة:

    docker scan my_image

    أو CLI الجديد:

    docker scout cves my_image

    يساعد هذا في اكتشاف الثغرات في الصور الأساسية والتبعيات.

  • مراقبة استخدام الموارد
    حدد الحاويات بالذاكرة، وحدة المعالجة، وعدد العمليات:

    docker run --memory=512m --cpus="1.5" --pids-limit=200 myimage

    يمنع هذا استهلاك الموارد المفرط.
    يمكنك أيضًا تقييد الإدخال/الإخراج:

    docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimage

    مفيد للحاويات التي لا يجب أن تفرط في استهلاك القرص.

  • التنظيف التلقائي
    قم بإزالة الصور والحاويات ووحدات التخزين والشبكات غير المستخدمة بانتظام:

    docker system prune -af --volumes

    ⚠ احذر: هذا الأمر يحذف جميع الموارد غير المستخدمة.

    للتنظيف الانتقائي استخدم:

    docker image prune --filter "until=24h"
  • تكامل CI/CD
    ادمج البناء، الاختبار، والنشر في GitHub Actions وGitLab CI وJenkins.
    مثال خطوة في GitHub Actions:

    - run: docker build -t myapp:${GITHUB_SHA} .
    - run: docker push myapp:${GITHUB_SHA}
  • التسجيل والمراقبة
    أرفق برامج تسجيل (--log-driver) بأنظمة مركزية: ELK، Loki، Splunk.
    استخدم Prometheus + cAdvisor لقياسات الحاويات.

  • النشر في بيئة الإنتاج
    افصل الإعدادات للتطوير والإنتاج باستخدام docker-compose.override.yml.
    للتوافر العالي والتوسيع استخدم:

    • دوكر سوارم
    • كوبرنيتس

🐞 تصحيح وتتبع أداء حاويات دوكر

الأمر

مثال

الوصف

docker container exec تشغيل أمر داخل حاوية قيد التشغيل، مع توفير وصول تفاعلي أو إمكانية تشغيل عمليات في بيئة الحاوية المعزولة
docker exec -it my_container bash

بدء طرفية تفاعلية (bash) داخل حاوية قيد التشغيل

docker exec -it my_container sh

بدء صدفة بسيطة داخل الحاوية (إذا لم يتوفر bash)

docker exec my_container ls /app

تشغيل أمر داخل الحاوية بدون وضع تفاعلي

docker container logs عرض سجلات الحاوية المحددة، لتمكين مشاهدة المخرجات والأحداث المرتبطة بعملها للتشخيص والمراقبة
docker logs -f --tail 100 my_container

عرض آخر 100 سطر من السجلات مع البث في الوقت الحقيقي

docker logs my_container

عرض جميع السجلات المتاحة للحاوية

docker logs --since 1h my_container

عرض السجلات من الساعة الماضية

docker inspect إخراج معلومات تفصيلية حول كائن دوكر (حاوية، صورة، شبكة، إلخ) بتنسيق JSON بما في ذلك التهيئة والحالة
docker inspect my_container

الحصول على معلومات JSON كاملة عن الحاوية

docker inspect --format '{{.State.Pid}}' my_container

عرض PID للعملية الرئيسية للحاوية على المضيف

docker inspect --format '{{.NetworkSettings.IPAddress}}' my_container

عرض عنوان IP للحاوية

nsenter (with strace) أداة لينكس للدخول إلى مساحات الأسماء لعملية أخرى (هنا الحاوية). تُستخدم مع strace لتتبع استدعاءات النظام داخل الحاوية
nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1

دخول مساحات أسماء الحاوية وتتبع استدعاءات العملية 1

nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash

فتح صدفة bash داخل مساحات أسماء الحاوية

nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp

عرض المنافذ المفتوحة داخل الحاوية

tcpdump (inside container) أداة سطر أوامر لالتقاط وتحليل حركة مرور الشبكة. تُستخدم داخل الحاوية لتشخيص مشاكل الشبكة وتحليل الحزم ومراقبة الاتصالات
docker exec -it my_container tcpdump -i any

التقاط وتحليل حركة المرور داخل الحاوية

docker exec -it my_container tcpdump -nn port 80

التقاط الحركة على المنفذ 80 فقط

docker exec -it my_container tcpdump -w /tmp/dump.pcap

حفظ الحركة في ملف لتحليلها لاحقًا

docker container stats عرض مقاييس استخدام الموارد الحالية (CPU، الذاكرة، الشبكة، القرص) لحاوية أو أكثر في الوقت الفعلي
docker stats my_container

عرض استخدام CPU والذاكرة والشبكة والقرص في الوقت الفعلي للحاوية

docker stats

عرض الإحصاءات لجميع الحاويات

docker stats --no-stream

إخراج الإحصاءات مرة واحدة والخروج

docker container top عرض قائمة العمليات الجارية داخل الحاوية، مشابهة لـ ps في لينكس لتحليل نشاط الحاوية
docker top my_container

عرض العمليات الجارية داخل الحاوية

docker top my_container aux

استخدام صيغة إخراج بديلة مثل ps aux

docker top my_container -eo pid,cmd

عرض PID والأمر فقط للعمليات

docker diff عرض التغييرات في نظام ملفات الحاوية مقارنة بالصورة الأساسية، بما في ذلك الملفات المضافة أو المعدلة أو المحذوفة
docker diff my_container

عرض تغييرات نظام الملفات في الحاوية مقارنة بالصورة الأساسية

docker diff my_container | grep '^A'

عرض الملفات المضافة فقط (A — Added)

docker diff my_container | grep '^C'

عرض الملفات المعدلة فقط (C — Changed)

docker cp نسخ الملفات والمجلدات بين الحاوية والمضيف، لتمكين تبادل البيانات والنسخ الاحتياطي
docker cp my_container:/path/to/file ./file

نسخ ملف من الحاوية إلى المضيف

docker cp ./config.yaml my_container:/app/config.yaml

نسخ ملف من المضيف إلى الحاوية

docker cp my_container:/var/log/app.log - | tar x -O | grep "ERROR"

نسخ ملف سجل وتصفيته لأسطر الأخطاء بدون حفظه على القرص

💡 للتصحيح المتقدم يمكنك استخدام nsenter و strace و tcpdump و gdb وأدوات منخفضة المستوى الأخرى.

💼 الاستخدام المتقدم لـ Docker Compose

🚀 أوامر دوكر كومبوز الاحترافية

الأمر

مثال

الوصف

docker compose up بدء وإدارة دورة حياة الخدمات المحددة من ملف docker-compose.yml مع إمكانية التشغيل في الخلفية
docker compose up -d web db

تشغيل خدمات web و db فقط في الوضع المنفصل

docker compose up --build

إعادة بناء الصور قبل بدء الخدمات

docker compose up --remove-orphans

إزالة الحاويات غير المعرفة في ملف compose الحالي

docker compose build بناء صور الخدمات كما هو موصوف في ملف compose مع التحكم في الكاش والتوازي
docker compose build --no-cache

إعادة بناء الصور بالكامل بدون استخدام الكاش

docker compose build --parallel

بناء جميع الخدمات بشكل متوازي لتسريع العملية

docker compose build web

بناء صورة خدمة web فقط

docker compose pull تحميل أحدث نسخ من الصور من السجل لجميع الخدمات أو خدمات محددة
docker compose pull

تحميل الصور لجميع الخدمات

docker compose pull db

تحميل صورة خدمة db فقط

docker compose pull --ignore-pull-failures

متابعة التنفيذ مع تجاهل أخطاء تحميل الصور

docker compose restart إعادة تشغيل جميع الخدمات أو خدمات محددة بدون إعادة إنشاء الحاويات
docker compose restart

إعادة تشغيل جميع الخدمات في المشروع الحالي

docker compose restart worker

إعادة تشغيل خدمة worker فقط

docker compose restart web db

إعادة تشغيل عدة خدمات في وقت واحد

docker compose exec تشغيل أمر داخل حاوية خدمة قيد التشغيل مع خيار الوضع التفاعلي
docker compose exec db psql -U user -d database

تشغيل psql داخل حاوية خدمة db

docker compose exec web sh

فتح صدفة داخل حاوية web

docker compose exec api curl http://localhost:8080

تنفيذ طلب curl من حاوية خدمة api

docker compose config إخراج التكوين النهائي لـ Compose مع مراعاة جميع الملفات ومتغيرات البيئة
docker compose config

عرض التكوين المدمج بتنسيق YAML

docker compose config --services

إدراج جميع الخدمات

docker compose config --environment

عرض جميع متغيرات البيئة المستخدمة بواسطة الخدمات

docker compose watch إعادة تشغيل الخدمات تلقائيًا عند تغيّر الملفات المصدرية، مفيد للتطوير
docker compose watch

بدء مراقبة الملفات وإعادة تشغيل الخدمات عند حدوث تغييرات

docker compose events تدفق أحداث Compose: بدء، إيقاف، تحديث الخدمات
docker compose events --json

استقبال الأحداث بتنسيق JSON

docker compose rm إزالة الحاويات المتوقفة للخدمات
docker compose rm web db

إزالة حاويات خدمات web و db

docker compose pause إيقاف تشغيل الخدمات مؤقتًا
docker compose pause api

إيقاف خدمة api مؤقتًا

docker compose unpause استئناف الخدمات الموقوفة
docker compose unpause api

استئناف خدمة api

docker compose create إنشاء الحاويات بدون تشغيلها
docker compose create web db

إنشاء حاويات لخدمات web و db بدون تشغيلها

docker compose images عرض قائمة الصور المستخدمة بواسطة الخدمات
docker compose images

عرض صور جميع الخدمات

docker compose top عرض العمليات الجارية داخل حاويات الخدمات
docker compose top web

عرض العمليات داخل حاويات خدمة web

🛠 ممارسات مفيدة وأتمتة مع Docker Compose

  • فصل البيئات
    استخدم ملفات docker-compose.override.yml منفصلة للبيئات المختلفة — development، staging، production. هذا يساعد على عزل الإعدادات وتجنب التعارضات.
    يمكنك أيضًا دمج عدة ملفات تكوين باستخدام الخيار -f:

    docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

    استخدم ملفات .env مختلفة (.env.dev، .env.prod، إلخ) لإدارة متغيرات البيئة.

  • تخزين الأسرار بشكل آمن
    لا تضع بيانات حساسة (كلمات مرور، رموز) مباشرة في ملفات Compose. بدلاً من ذلك، استخدم:

    • ملفات .env لمتغيرات البيئة (لاحظ أنها غير مشفرة ولا يجب رفعها لمستودعات عامة)
    • docker secret و docker config لإدارة الأسرار والإعدادات بأمان في Swarm
    • وحدات تخزين خارجية لملفات التكوين التي تحتوي على أسرار
    • أنظمة إدارة أسرار خارجية (مثل HashiCorp Vault، AWS Secrets Manager)

  • ترتيب بدء الخدمات باستخدام depends_on و healthcheck
    لجعل الخدمات تنتظر حتى تكون التبعيات جاهزة:

    services:
      db:
        image: postgres
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U postgres"]
          interval: 10s
          retries: 5
      api:
        image: my_api
        depends_on:
          db:
            condition: service_healthy
  • تقليل التوقف أثناء التحديثات
    قبل تحديث الخدمات، نفّذ:

    docker compose pull && docker compose up -d --remove-orphans

    الخيار -d يشغل الحاويات في الخلفية، و--remove-orphans يزيل الحاويات غير المعرفة في الإعدادات الحالية.
    لإيقاف وإزالة الحاويات القديمة تمامًا إذا لزم الأمر:

    docker compose down --remove-orphans

    يضمن هذا تحميل الصور الجديدة وإزالة الحاويات غير المستخدمة بدون توقف.

  • إعادة تحميل الكود أثناء التطوير باستخدام Volumes
    استخدم volumes لتركيب مجلدات محلية داخل الحاويات. هذا يسمح بتطبيق تغييرات الكود فورًا بدون إعادة بناء الصور.
    كن حذرًا من مشاكل الأذونات والتخزين المؤقت خاصة في Windows وmacOS لتجنب مشاكل الأداء.

  • إعادة تحميل الكود بدون Volumes (Compose 2.22+)

    develop:
      watch:
        - path: ./src
          action: sync
          target: /app
  • تجميع مركزي للسجلات
    أعد توجيه سجلات الحاويات إلى أنظمة مراقبة وتجميع مثل ELK وLoki وPrometheus وFluentd للتحليل والتنبيه.
    استخدم برامج تشغيل السجلات (--log-driver) لتمكين جمع السجلات مركزيًا.
    اضبط برامج تشغيل السجلات للحاويات في Compose:

    services:
      api:
        image: my_api
        logging:
          driver: "json-file"
          options:
            max-size: "10m"
            max-file: "3"
  • إعادة تشغيل الخدمات تلقائيًا
    اضبط سياسة إعادة التشغيل في docker-compose.yml:

    restart: unless-stopped

    سياسات إعادة التشغيل الأخرى تشمل:

    • no — عدم إعادة التشغيل تلقائيًا (افتراضي)
    • always — إعادة تشغيل دائمًا
    • on-failure — إعادة تشغيل فقط عند الفشل (مع خيار تحديد عدد المحاولات)

    في بيئة الإنتاج، unless-stopped هو الخيار الأمثل لضمان استمرارية الخدمة.
    هذا يمكّن من استعادة الخدمات تلقائيًا بعد الأعطال أو إعادة تشغيل المضيف.

  • ملفات تعريف الخدمات
    تسمح بتشغيل مجموعات محددة فقط من الخدمات:

    services:
      db:
        image: postgres
        profiles: ["backend"]
      web:
        image: nginx
        profiles: ["frontend"]

    لتشغيل ملف تعريف الواجهة الأمامية فقط:

    docker compose --profile frontend up

🐞 تصحيح وتتبع خدمات Docker Compose

الأمر

مثال

الوصف

docker compose exec تنفيذ أمر داخل خدمة تعمل بالفعل، مما يوفر الوصول إلى الحاوية أو تشغيل عمليات فردية
docker compose exec web sh

فتح صدفة (shell) داخل حاوية خدمة web

docker compose exec db psql -U user -d database

تشغيل أمر psql داخل حاوية خدمة db

docker compose logs عرض سجلات الخدمة للتشخيص والمراقبة
docker compose logs -f db

عرض سجلات خدمة db في الوقت الحقيقي

docker compose logs --tail=50 api

إظهار آخر 50 سطرًا من سجلات خدمة api

docker compose logs --since=1h web

إظهار سجلات الساعة الأخيرة لخدمة web

docker inspect عرض معلومات تفصيلية عن الحاوية التي تشغل الخدمة
docker inspect $(docker compose ps -q web)

الحصول على JSON بمعلومات تفصيلية عن حاوية خدمة web

docker container stats مراقبة استخدام الموارد للحاويات التي تشغل الخدمات
docker stats $(docker compose ps -q worker)

تتبع استخدام وحدة المعالجة والذاكرة والموارد الأخرى لحاوية خدمة worker

docker compose run --rm تشغيل حاوية مؤقتة بإعدادات الخدمة، مفيدة لأغراض التصحيح
docker compose run --rm web sh

تشغيل حاوية مؤقتة لخدمة web مع صدفة تفاعلية

docker container cp نسخ الملفات بين المضيف والحاوية
docker cp $(docker compose ps -q db):/dump.sql ./dump.sql

نسخ ملف من حاوية خدمة db إلى المضيف

💡 لتصحيح مريح للإعدادات المعقدة متعددة الخدمات، استخدم docker compose run --rm لتشغيل حاويات فردية مع الشبكات والأحجام اللازمة دون التأثير على الخدمات الأساسية.

📚 موارد إضافية

🚫 تجاهل الملفات باستخدام .dockerignore

أضف الملفات والمجلدات إلى ملف .dockerignore التي لا ينبغي تضمينها في الصورة لتقليل الحجم وتسريع عملية البناء:

node_modules/
*.log
.env

⚡ تبسيط الأوامر باستخدام الأسماء المستعارة

يمكنك إنشاء أسماء مستعارة للأوامر المستخدمة بشكل متكرر لتشغيلها بسرعة أكبر:

alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"

🧠 نصيحة: إرشادات لاستخدام Docker

  • لا تحاول حفظ كل شيء — استخدم docker --help أو docker <command> --help لاستكشاف الأوامر.
  • تمرن بانتظام وجرب مشاريع بسيطة.
  • راقب أحجام الصور وقم بإزالة الملفات غير الضرورية عبر .dockerignore.

🌐 روابط مفيدة

📘 التوثيق الرسمي لـ Docker — أدلة ومرجع شامل لجميع مواضيع Docker:
https://docs.docker.com/

📙 ورقة الغش لـ Docker — ورقة الغش الرسمية الكاملة لـ Docker:
https://dockerlabs.collabnix.com/docker/cheatsheet/

📗 Docker Hub — الصور والمستودعات:
https://hub.docker.com/