🐳 دوكر
دوكر هو منصة لتشغيل التطبيقات في حاويات معزولة. تحتوي هذه الورقة المرجعية على أوامر للعمل مع الصور، الحاويات، الشبكات، وحدات التخزين، بالإضافة إلى 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 | إزالة صورة بعلامة  | |
| docker rmi 1a2b3c4d5e6f | إزالة صورة باستخدام معرفها | |
| docker rmi $(docker images -q) | إزالة جميع الصور (بحذر!) | 
🔁 إدارة الحاويات
| الأمر | مثال | الوصف | 
|---|---|---|
| docker container exec | تشغيل أمر داخل حاوية قيد التشغيل | |
| docker exec -it container bash | تشغيل طرفية bash تفاعلية داخل الحاوية المسماة  | |
| docker exec container ls /app | تنفيذ أمر  | |
| docker exec -d container touch /tmp/testfile | تشغيل أمر في الحاوية في وضع الخلفية بدون انتظار | |
| docker container logs | عرض سجلات الحاويات | |
| docker logs container | عرض جميع السجلات من الحاوية  | |
| docker logs -f container | متابعة السجلات في الوقت الفعلي | |
| docker logs --tail 50 container | عرض آخر 50 سطرًا من السجلات | |
| docker inspect | استرجاع معلومات JSON تفصيلية عن حاوية أو صورة | |
| docker inspect 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 | إعادة تسمية حاوية من  | |
| 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 | عرض العمليات للحاوية المسماة  | |
| docker container pause | إيقاف جميع العمليات مؤقتًا في الحاوية | |
| docker pause container | إيقاف الحاوية  | |
| docker container unpause | استئناف حاوية موقوفة | |
| docker unpause container | استئناف الحاوية  | |
| docker container update | تحديث إعدادات الحاوية بدون إعادة تشغيل | |
| docker update --memory 500m container | تقييد استخدام الذاكرة في الحاوية إلى 500 ميغابايت | 
🧱 الصور و Dockerfile
| الأمر | مثال | الوصف | 
|---|---|---|
| docker buildx build | بناء صورة Docker من Dockerfile | |
| docker build -t my_image . | بناء صورة بعلامة  | |
| docker build -t my_image:1.0 . | بناء صورة بعلامة الإصدار  | |
| docker build --no-cache -t my_image . | بناء صورة بدون استخدام ذاكرة التخزين المؤقت لبناء نظيف | |
| docker container commit | إنشاء صورة من الحالة الحالية لحاوية | |
| docker commit container my_img:v1 | إنشاء صورة  | |
| 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 | إضافة علامة لدفعها إلى المستودع  | |
| docker tag my_image:1.0 my_image:stable | إنشاء علامة  | |
| docker tag my_image my_image:backup | إضافة علامة  | |
| docker image push | دفع صورة إلى Docker Hub أو سجل آخر | |
| docker push myrepo/my_image:latest | دفع صورة بعلامة  | |
| docker push myrepo/my_image:1.0 | دفع صورة بعلامة  | |
| docker push myrepo/my_image | دفع صورة مع العلامة الافتراضية  | |
| 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 | عرض الشبكات التي تستخدم السائق  | |
| docker network ls --format '{{.Name}}' | عرض أسماء الشبكات فقط | |
| docker network create | إنشاء شبكة جديدة | |
| docker network create my_net | إنشاء شبكة باسم  | |
| docker network create --driver bridge my_bridge_net | إنشاء شبكة باستخدام السائق  | |
| docker network create --subnet=192.168.10.0/24 my_custom_net | إنشاء شبكة مع نطاق IP محدد | |
| docker network connect | توصيل حاوية بشبكة | |
| docker network connect my_net container | توصيل الحاوية  | |
| docker network connect --alias db_net my_net container | توصيل مع اسم مستعار  | |
| docker network disconnect | فصل حاوية عن شبكة | |
| docker network disconnect my_net container | فصل الحاوية  | |
| docker volume ls | إدراج جميع وحدات تخزين Docker | |
| docker volume ls | عرض جميع وحدات التخزين | |
| docker volume ls --filter dangling=true | عرض الوحدات غير المستخدمة | |
| docker volume create | إنشاء وحدة تخزين جديدة | |
| docker volume create my_vol | إنشاء وحدة تخزين باسم  | |
| docker volume create --driver local --opt type=tmpfs my_tmp_vol | إنشاء وحدة تخزين مؤقتة باستخدام tmpfs | |
| docker volume inspect | عرض معلومات تفصيلية عن وحدة تخزين | |
| docker volume inspect my_vol | عرض تفاصيل وحدة التخزين  | |
| docker volume rm | إزالة وحدة تخزين أو أكثر | |
| docker volume rm 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 | عرض سجلات الخدمة  | |
| docker compose exec | تشغيل أمر داخل حاوية خدمة قيد التشغيل | |
| docker compose exec web bash | دخول صدفة bash تفاعلية داخل حاوية الخدمة  | |
| docker compose exec db ls /var/lib/postgresql | تشغيل أمر  | |
| docker compose exec -d worker touch /tmp/done | تشغيل أمر داخل حاوية  | |
| docker compose build | بناء أو إعادة بناء صور الخدمات | |
| docker compose build | بناء جميع الصور المعرفة في  | |
| docker compose build web | بناء صورة خدمة  | |
| docker compose build --no-cache | بناء الصور بدون استخدام الكاش | |
| docker compose ps | عرض حالة جميع الخدمات والحاويات | |
| docker compose ps -a | عرض جميع الحاويات بما في ذلك المتوقفة | |
| docker compose ps --services | عرض أسماء الخدمات فقط | |
| docker compose pull | تحميل/تحديث صور الخدمات من السجل | |
| docker compose pull web | تحميل صورة خدمة  | |
| docker compose pull --ignore-pull-failures | الاستمرار في التحميل حتى إذا فشلت بعض الصور | |
| docker compose restart | إعادة تشغيل جميع الخدمات أو خدمات محددة | |
| docker compose restart 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 | بدء خدمة  | |
| docker compose start db api | بدء عدة خدمات في وقت واحد | |
| docker compose stop | إيقاف الخدمات بدون إزالة الحاويات | |
| docker compose stop 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 | تصدير باستخدام معرف الحاوية مع الخيار  | |
| 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 | إزالة الحزمة  | |
| 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' | عرض الأحداث المرتبطة بصورة  | |
| docker container update | تغيير حدود الموارد وإعدادات حاوية قيد التشغيل بدون إعادة تشغيلها | |
| docker update --cpus 2 --memory 1g my_container | تعيين الحد إلى 2 CPU و1 جيجابايت RAM | |
| docker update --restart unless-stopped my_container | تعيين سياسة إعادة التشغيل  | |
| docker update --pids-limit 200 my_container | تقييد عدد العمليات إلى 200 | |
| docker container diff | عرض تغييرات نظام الملفات في الحاوية مقارنة بالصورة الأصلية. مفيد للتصحيح والتدقيق | |
| docker diff my_container | عرض جميع تغييرات نظام الملفات في الحاوية | |
| docker diff my_container | grep '^A' | عرض الملفات المضافة فقط ( | |
| 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(withstrace) | أداة لينكس للدخول إلى مساحات الأسماء لعملية أخرى (هنا الحاوية). تُستخدم مع 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 | استخدام صيغة إخراج بديلة مثل  | |
| docker top my_container -eo pid,cmd | عرض PID والأمر فقط للعمليات | |
| docker diff | عرض التغييرات في نظام ملفات الحاوية مقارنة بالصورة الأساسية، بما في ذلك الملفات المضافة أو المعدلة أو المحذوفة | |
| docker diff my_container | عرض تغييرات نظام الملفات في الحاوية مقارنة بالصورة الأساسية | |
| docker diff my_container | grep '^A' | عرض الملفات المضافة فقط ( | |
| docker diff my_container | grep '^C' | عرض الملفات المعدلة فقط ( | |
| 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 | تشغيل خدمات  | |
| 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 | بناء صورة خدمة  | |
| docker compose pull | تحميل أحدث نسخ من الصور من السجل لجميع الخدمات أو خدمات محددة | |
| docker compose pull | تحميل الصور لجميع الخدمات | |
| docker compose pull db | تحميل صورة خدمة  | |
| docker compose pull --ignore-pull-failures | متابعة التنفيذ مع تجاهل أخطاء تحميل الصور | |
| docker compose restart | إعادة تشغيل جميع الخدمات أو خدمات محددة بدون إعادة إنشاء الحاويات | |
| docker compose restart | إعادة تشغيل جميع الخدمات في المشروع الحالي | |
| docker compose restart worker | إعادة تشغيل خدمة  | |
| docker compose restart web db | إعادة تشغيل عدة خدمات في وقت واحد | |
| docker compose exec | تشغيل أمر داخل حاوية خدمة قيد التشغيل مع خيار الوضع التفاعلي | |
| docker compose exec db psql -U user -d database | تشغيل psql داخل حاوية خدمة  | |
| docker compose exec web sh | فتح صدفة داخل حاوية  | |
| docker compose exec api curl http://localhost:8080 | تنفيذ طلب curl من حاوية خدمة  | |
| 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 | إزالة حاويات خدمات  | |
| docker compose pause | إيقاف تشغيل الخدمات مؤقتًا | |
| docker compose pause api | إيقاف خدمة  | |
| docker compose unpause | استئناف الخدمات الموقوفة | |
| docker compose unpause api | استئناف خدمة  | |
| docker compose create | إنشاء الحاويات بدون تشغيلها | |
| docker compose create web db | إنشاء حاويات لخدمات  | |
| docker compose images | عرض قائمة الصور المستخدمة بواسطة الخدمات | |
| docker compose images | عرض صور جميع الخدمات | |
| docker compose top | عرض العمليات الجارية داخل حاويات الخدمات | |
| docker compose top 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) داخل حاوية خدمة  | |
| docker compose exec db psql -U user -d database | تشغيل أمر psql داخل حاوية خدمة  | |
| docker compose logs | عرض سجلات الخدمة للتشخيص والمراقبة | |
| docker compose logs -f db | عرض سجلات خدمة  | |
| docker compose logs --tail=50 api | إظهار آخر 50 سطرًا من سجلات خدمة  | |
| docker compose logs --since=1h web | إظهار سجلات الساعة الأخيرة لخدمة  | |
| docker inspect | عرض معلومات تفصيلية عن الحاوية التي تشغل الخدمة | |
| docker inspect $(docker compose ps -q web) | الحصول على JSON بمعلومات تفصيلية عن حاوية خدمة  | |
| docker container stats | مراقبة استخدام الموارد للحاويات التي تشغل الخدمات | |
| docker stats $(docker compose ps -q worker) | تتبع استخدام وحدة المعالجة والذاكرة والموارد الأخرى لحاوية خدمة  | |
| docker compose run --rm | تشغيل حاوية مؤقتة بإعدادات الخدمة، مفيدة لأغراض التصحيح | |
| docker compose run --rm web sh | تشغيل حاوية مؤقتة لخدمة  | |
| docker container cp | نسخ الملفات بين المضيف والحاوية | |
| docker cp $(docker compose ps -q db):/dump.sql ./dump.sql | نسخ ملف من حاوية خدمة  | 
💡 لتصحيح مريح للإعدادات المعقدة متعددة الخدمات، استخدم
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/