Docker: دليل تقني شامل لإدارة الحاويات والبنية المعزولة
Docker أداة تُمكّن من تشغيل التطبيقات داخل بيئات معزولة تُسمّى حاويات (Containers).
الفكرة الأساسية هي فصل التطبيق عن النظام المضيف، مع الحفاظ على خفة التشغيل وسهولة النقل بين البيئات.
هذا المقال يجمع الأوامر والمفاهيم الأساسية والمتقدمة لـ Docker بشكل منظم، ليكون مرجعًا تقنيًا يمكن الرجوع له عند الحاجة.
مفهوم الحاويات (Containers)
الحاوية هي بيئة تشغيل مستقلة تحتوي على:
- التطبيق
- اعتماداته
- إعداداته
مع مشاركة نواة النظام المضيف، مما يجعلها أخف من الأنظمة الافتراضية التقليدية.
إدارة الحاويات
عرض الحاويات المشغلة:
docker ps
عرض جميع الحاويات بما فيها الموقوفة:
docker ps -a
تشغيل حاوية:
docker start <container>
إيقاف حاوية:
docker stop <container>
إعادة تشغيل حاوية:
docker restart <container>
حذف حاوية:
docker rm <container>
الدخول التفاعلي إلى الحاوية:
docker exec -it <container> bash
عرض السجلات:
docker logs <container>
متابعة السجلات مباشرة:
docker logs -f <container>
مراقبة الموارد والعمليات
إحصائيات الموارد:
docker stats
عرض العمليات داخل الحاوية:
docker top <container>
عرض معلومات تفصيلية بصيغة JSON:
docker inspect <container>
الصور (Images)
عرض الصور:
docker images
تحميل صورة:
docker pull nginx
بناء صورة من Dockerfile:
docker build -t my-image .
حذف صورة:
docker rmi my-image
عرض تاريخ الطبقات:
docker history my-image
حفظ الصورة كملف:
docker save my-image > image.tar
تحميل صورة من ملف:
docker load < image.tar
Volumes (التخزين)
Volumes تُستخدم لحفظ البيانات خارج الحاوية.
عرض Volumes:
docker volume ls
إنشاء Volume:
docker volume create my-vol
فحص Volume:
docker volume inspect my-vol
حذف Volume:
docker volume rm my-vol
ربط Volume بحاوية:
docker run -v my-vol:/app/data ubuntu
الشبكات (Networking)
عرض الشبكات:
docker network ls
إنشاء شبكة:
docker network create my-network
ربط حاوية بشبكة:
docker network connect my-network container
فصل حاوية عن شبكة:
docker network disconnect my-network container
فحص إعدادات الشبكة:
docker network inspect my-network
تشغيل حاوية داخل شبكة محددة:
docker run --network=my-network nginx
تنظيف النظام
حذف الموارد غير المستخدمة:
docker system prune
حذف الحاويات المتوقفة فقط:
docker container prune
حذف الصور غير المرتبطة:
docker image prune
حذف Volumes غير المستخدمة:
docker volume prune
حذف الشبكات غير المستخدمة:
docker network prune
متغيرات البيئة والأسرار
تمرير متغير بيئة:
docker run -e VAR=value ubuntu
تمرير ملف متغيرات:
docker run --env-file .env ubuntu
إدارة الأسرار:
docker secret create my_secret file.txt
docker secret ls
docker secret rm my_secret
Dockerfile: البنية الأساسية
مثال Dockerfile:
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
شرح التعليمات:
- FROM: تحديد الصورة الأساسية
- WORKDIR: مجلد العمل داخل الحاوية
- COPY: نسخ الملفات
- RUN: تنفيذ أوامر أثناء البناء
- CMD: الأمر الافتراضي عند التشغيل
- ENTRYPOINT: نقطة تشغيل مخصصة
Docker Compose: إدارة الخدمات المتعددة
مثال ملف docker-compose.yml:
version: '3.8'
services:
web:
image: nginx
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- webnet
app:
build: .
depends_on:
- db
environment:
DB_HOST: db
networks:
- webnet
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
networks:
webnet:
الاعتبارات الأمنية
نقاط أساسية:
- استخدام صور موثوقة فقط
- تشغيل الحاويات بوضع القراءة فقط عند الإمكان
- تحديد استهلاك الموارد
مثال تحديد الموارد:
docker run --memory="512m" --cpus="1.0" ...
ملاحظة ختامية
Docker يوفر طبقة تشغيل مرنة وقابلة للتوسع، لكنه يتطلب فهمًا واضحًا لإدارة الحاويات، التخزين، الشبكات، والأمان.
أي أمر يمكن استكشاف خياراته مباشرة:
docker run --help