🐳 دوكر
دوكر هو منصة لتشغيل التطبيقات في حاويات معزولة. تحتوي هذه الورقة المرجعية على أوامر للعمل مع الصور، الحاويات، الشبكات، وحدات التخزين، بالإضافة إلى 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 (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 |
استخدام صيغة إخراج بديلة مثل |
|
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/