شرح Docker للمبتدئين: ما هو وكيف تستخدمه خطوة بخطوة
دليل مبسط لـ Docker للمبتدئين: ما هي الصور والحاويات، وكيف تثبّت Docker، وأهم الأوامر، وكيف تبني أول صورة لك باستخدام Dockerfile.
نُشر في 5 دقائق قراءة
محتويات المقال
Docker أداة تجمع التطبيق مع كل ما يحتاجه ليعمل (الكود وبيئة التشغيل والمكتبات والإعدادات) في وحدة واحدة تسمى حاوية (Container). الحاوية تعمل بالطريقة نفسها على جهازك أو جهاز زميلك أو خادم سحابي، وهذا ينهي المشكلة الشهيرة "الكود يعمل على جهازي فقط".
باختصار: تصف تطبيقك في ملف Dockerfile، ثم تبنيه إلى صورة (Image)، ثم تشغّل من هذه الصورة ما تشاء من الحاويات باستخدام docker run.
ثلاث كلمات يجب أن تعرفها
معظم Docker يصبح واضحاً عندما تفهم ثلاثة مصطلحات:
- الصورة (Image): قالب للقراءة فقط يحتوي تطبيقك وكل ما يعتمد عليه. تخيّلها كوصفة طبخ، أو كالـ Class في البرمجة.
- الحاوية (Container): نسخة عاملة من الصورة. يمكنك تشغيل حاويات كثيرة من صورة واحدة، تماماً كما تطبخ الوصفة نفسها عدة مرات.
- ملف Dockerfile: ملف نصي عادي فيه تعليمات بناء الصورة، مثل "ابدأ من هذه الصورة الأساسية، انسخ ملفاتي، شغّل هذا الأمر".
تُشارَك الصور عبر السجلات (Registries)، وأشهرها Docker Hub الذي يستضيف صوراً رسمية لبرامج مشهورة مثل nginx وpostgres وpython وnode. فضّل الصور الرسمية أو الصادرة عن ناشرين موثقين، لأنها تُصان وتُحدّث باستمرار.
لماذا يستخدم المطورون Docker؟
أصبح Docker أداة أساسية في تطوير الويب لأسباب عملية:
- البيئة نفسها في كل مكان: الحاوية تحتوي الإصدارات الدقيقة التي يحتاجها تطبيقك، فتتطابق بيئة التطوير والاختبار والإنتاج.
- إعداد سريع: العضو الجديد في الفريق يشغّل المشروع كاملاً بأمر أو أمرين، بدلاً من تثبيت كل شيء يدوياً.
- جهاز نظيف: تستطيع تجربة قاعدة بيانات أو إصدار جديد من لغة برمجة داخل حاوية، ثم تحذفها دون أن تترك أثراً.
- نشر أسهل: معظم المنصات السحابية تستطيع تشغيل الحاويات مباشرة. وإذا كنت جديداً على السحابة، اقرأ شرحنا عن ما هي الحوسبة السحابية.
ويكثر استخدام Docker في جهة الباك إند، حيث تعتمد التطبيقات على خوادم وقواعد بيانات وإصدارات محددة. شرحنا عن الفرق بين الفرونت إند والباك إند يوضح هذا الفرق.
الحاويات مقابل الأجهزة الافتراضية
كثيراً ما تُقارن الحاويات بالأجهزة الافتراضية (Virtual Machines). كلاهما يعزل البرامج، لكن بطريقة مختلفة:
| الحاوية | الجهاز الافتراضي | |
|---|---|---|
| ماذا تحتوي؟ | التطبيق وما يعتمد عليه | نظام تشغيل كامل مع التطبيق |
| نظام التشغيل | تشارك نواة (Kernel) الجهاز المضيف | تشغّل نواتها الخاصة |
| وقت التشغيل | ثوانٍ أو أقل عادة | أطول بكثير عادة |
| الحجم | من ميغابايتات إلى بضع مئات منها غالباً | عدة غيغابايتات غالباً |
| الاستخدام المعتاد | تشغيل التطبيقات والخدمات | تشغيل نظام مختلف أو عزل كامل |
لأن الحاويات تشارك نواة الجهاز المضيف، فهي أخف وأسرع في التشغيل. أما الأجهزة الافتراضية فتوفر عزلاً أقوى ويمكنها تشغيل نظام تشغيل مختلف تماماً.
كيف تثبّت Docker؟
ثبّت Docker دائماً من الموقع الرسمي docs.docker.com.
- على Windows وmacOS: ثبّت Docker Desktop. على Windows يعتمد على WSL 2 (نظام Linux الفرعي في Windows)، ويساعدك المثبّت على تفعيله. التطبيق مجاني للاستخدام الشخصي والشركات الصغيرة، والشركات الكبيرة تحتاج خطة مدفوعة.
- على Linux: ثبّت Docker Engine باتباع التعليمات الخاصة بتوزيعتك في التوثيق الرسمي.
بعد التثبيت، افتح الطرفية (Terminal) وتأكد أن كل شيء يعمل:
docker --version
docker run hello-world
صورة hello-world تطبع رسالة قصيرة تؤكد أن Docker يستطيع تنزيل الصور وتشغيل الحاويات.
أول حاوية حقيقية لك
لنشغّل خادم ويب حقيقياً. هذا الأمر يشغّل صورة nginx الرسمية في الخلفية ويجعلها متاحة على المنفذ 8080 في جهازك:
docker run -d -p 8080:80 --name web nginx
معنى كل جزء:
-dيشغّل الحاوية في الخلفية.-p 8080:80يربط المنفذ 8080 في جهازك بالمنفذ 80 داخل الحاوية.--name webيعطي الحاوية اسماً سهلاً.nginxهو اسم الصورة. إذا لم تكن على جهازك، ينزّلها Docker من Docker Hub أولاً.
افتح http://localhost:8080 في المتصفح وستظهر لك صفحة الترحيب الخاصة بـ nginx. وهكذا تبدو الجلسة كاملة في الطرفية:

استخدمنا في العرض docker ps --format فقط لإظهار أعمدة أقل، والأمر docker ps العادي يعمل بالطريقة نفسها. وهذه الأوامر التي ستستخدمها كثيراً:
| الأمر | وظيفته |
|---|---|
docker ps |
عرض الحاويات العاملة |
docker ps -a |
عرض كل الحاويات بما فيها المتوقفة |
docker images |
عرض الصور الموجودة على جهازك |
docker logs web |
عرض مخرجات الحاوية |
docker exec -it web sh |
فتح سطر أوامر داخل حاوية عاملة |
docker stop web |
إيقاف حاوية |
docker rm web |
حذف حاوية متوقفة |
docker rmi nginx |
حذف صورة |
ابنِ صورتك الخاصة باستخدام Dockerfile
تشغيل صور الآخرين مفيد، لكن القوة الحقيقية في تغليف تطبيقك أنت. لنفترض أن لديك مجلداً فيه موقع ثابت بسيط (ملف index.html وملف style.css). أنشئ ملفاً باسم Dockerfile (بدون امتداد) في المجلد نفسه:
FROM nginx:alpine
COPY . /usr/share/nginx/html
FROM nginx:alpineيبدأ من صورة nginx الرسمية بنسختها الصغيرة المبنية على Alpine Linux.COPY . /usr/share/nginx/htmlينسخ ملفاتك إلى المجلد الذي يعرضه nginx بشكل افتراضي.
الآن ابنِ الصورة وشغّلها:
docker build -t my-site .
docker run -d -p 8080:80 --name my-site my-site
الخيار -t my-site يعطي الصورة اسماً (Tag)، والنقطة . تخبر Docker باستخدام المجلد الحالي كسياق للبناء. وكلما عدّلت ملفاتك، أعد بناء الصورة وشغّل حاوية جديدة.
أضف ملف .dockerignore لتستبعد الملفات غير الضرورية (مثل .git وnode_modules) من الصورة. فكرته قريبة من .gitignore، وإذا لم تستخدم Git بعد فاقرأ شرحنا عن Git وGitHub.
تشغيل عدة حاويات معاً باستخدام Docker Compose
التطبيقات الحقيقية تحتاج غالباً أكثر من حاوية، مثل تطبيق ويب مع قاعدة بيانات. أداة Docker Compose تتيح لك وصفها كلها في ملف واحد باسم compose.yaml:
services:
web:
image: nginx:alpine
ports:
- "8080:80"
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: example
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
ثم شغّل كل شيء أو أوقفه بأمر واحد:
docker compose up -d
docker compose down
الـ Volume المسمى db-data يحفظ ملفات قاعدة البيانات حتى لو حُذفت الحاوية. استخدم كلمة مرور حقيقية وقوية خارج التجارب المحلية، ولا ترفع البيانات السرية إلى مستودع عام أبداً.
نصائح للمبتدئين وأخطاء شائعة
- استخدم إصدارات محددة: الصورة
postgres:16أكثر ثباتاً منpostgres:latestالتي قد تتغير دون أن تنتبه. - لا تحفظ البيانات المهمة داخل الحاوية فقط: استخدم الـ Volumes لأي شيء تريد الاحتفاظ به.
- نظّف جهازك بانتظام: الصور القديمة والحاويات المتوقفة تشغل مساحة. الأمر
docker system pruneيحذف البيانات غير المستخدمة، لكن اقرأ التحذير قبل التأكيد. - انتبه لتعارض المنافذ: إذا كان المنفذ 8080 مستخدماً، اختر منفذاً آخر مثل
-p 8081:80. - استخدم صوراً موثوقة فقط: التزم بالصور الرسمية والناشرين الموثقين، وتجنب الصور العشوائية التي لا تستطيع فحصها.
ابدأ بتشغيل بعض الصور الرسمية، ثم حوّل مشروعاً صغيراً من مشاريعك إلى حاوية. بعد تجربتين أو ثلاث ستصبح أوامر build وrun وcompose up مألوفة لك تماماً.
أسئلة شائعة
هل استخدام Docker مجاني؟
محرك Docker Engine الذي يشغّل الحاويات على Linux مفتوح المصدر ومجاني. أما تطبيق Docker Desktop لنظامي Windows وmacOS فمجاني للاستخدام الشخصي والتعليمي والشركات الصغيرة، بينما تحتاج الشركات الكبيرة اشتراكاً مدفوعاً. راجع الشروط الحالية في موقع Docker لمعرفة التفاصيل.
هل أحتاج نظام Linux لاستخدام Docker؟
لا. على Windows وmacOS تثبّت Docker Desktop، وهو يشغّل بيئة Linux خفيفة في الخلفية نيابة عنك. وعلى Windows يعتمد على WSL 2، فقد يُطلب منك تفعيله أثناء التثبيت.
ما الفرق بين docker stop وdocker rm؟
الأمر docker stop يوقف الحاوية العاملة لكنه يُبقيها، فتستطيع تشغيلها مرة أخرى لاحقاً. أما docker rm فيحذف الحاوية المتوقفة نهائياً. وحذف الحاوية لا يحذف الصورة التي أُنشئت منها.
هل أفقد بياناتي عند حذف الحاوية؟
نعم، أي شيء مكتوب داخل نظام ملفات الحاوية نفسها يضيع عند حذفها. للاحتفاظ بالبيانات مثل ملفات قاعدة البيانات، خزّنها في Volume من Docker أو في مجلد على جهازك تربطه بالحاوية.
شروحات ذات صلة
المواقع والاستضافة
كيف تنشئ موقعك الخاص من الصفر بدون خبرة: دليل خطوة بخطوة
دليل عملي للمبتدئين لبناء أول موقع إلكتروني باستخدام HTML وCSS، وتجربته على جهازك، ثم نشره على الإنترنت مجاناً وربطه بدومين خاص.
· 5 دقائق قراءة
المواقع والاستضافة
كيف تربط الدومين بموقعك على Cloudflare Pages خطوة بخطوة
شرح عملي لربط دومين من Namecheap بموقع على Cloudflare Pages: إضافة الموقع إلى Cloudflare، تغيير الـ Nameservers، ربط الدومين، وتحويل www.
· 5 دقائق قراءة
المواقع والاستضافة
أفضل استضافة مواقع مجانية: مقارنة بين Cloudflare Pages وGitHub Pages وNetlify وVercel
مقارنة بين أفضل خيارات استضافة المواقع المجانية للمواقع الثابتة مثل GitHub Pages وCloudflare Pages وNetlify وVercel، وكيف تختار الأنسب لمشروعك.
· 5 دقائق قراءة