Docker Images وContainers: الأوامر الأساسية ودورة الحياة
بعد مقدمة Docker، تحتاج الآن إلى إتقان إدارة الصور والحاويات في الحياة اليومية.
هذا الدرس يركز على الأوامر العملية التي تستخدمها كل يوم في التطوير وDevOps.
الفرق بين Image وContainer
- Image: قالب ثابت يحتوي التطبيق والاعتماديات
- Container: instance تعمل فعليا من Image
- يمكن تشغيل عدة Containers من نفس Image
استعراض الصور والحاويات
docker images
docker ps
docker ps -a
| الأمر | الوظيفة |
|---|---|
docker images |
عرض الصور الموجودة محليًا |
docker ps |
عرض الحاويات الجارية |
docker ps -a |
عرض كل الحاويات (بما فيها المتوقفة) |
جلب صورة من Docker Hub
docker pull nginx:latest
docker pull redis:7
استخدم tag محدد في البيئات الجدية بدل الاعتماد دائمًا على latest.
تشغيل حاوية من صورة
docker run -d --name web -p 8080:80 nginx
docker run --name test-redis redis:7
-d: تشغيل بالخلفية--name: اسم واضح للحاوية-p host:container: ربط المنافذ
إدارة دورة حياة الحاوية
docker start web
docker stop web
docker restart web
docker rm web
لا يمكنك حذف حاوية جارية قبل إيقافها (إلا باستخدام force).
مراقبة الحاوية: logs وexec
docker logs web
docker logs -f web
docker exec -it web /bin/bash
logs للتشخيص، وexec للدخول داخل الحاوية لفحص سريع.
إنشاء Docker Image من Dockerfile
مثال Dockerfile بسيط:
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
بناء الصورة:
docker build -t my-nginx:v1 .
docker run -d --name mysite -p 8081:80 my-nginx:v1
فهم tags في Docker Images
docker tag my-nginx:v1 my-nginx:prod
docker images
tag يساعدك تميّز نسخ الصور (dev، test، prod).
تنظيف الموارد غير المستخدمة
docker container prune
docker image prune
docker system prune
أفضل ممارسات Images وContainers
- استخدم tags واضحة بدل latest دائمًا
- راقب logs للحاويات الحرجة
- لا تحفظ أسرار داخل image
- نظف الموارد المؤقتة دوريًا
تمرين عملي: Build + Run + Logs
mkdir -p /tmp/docker-lab && cd /tmp/docker-lab
echo "<h1>Docker Lab</h1>" > index.html
cat > Dockerfile <<'EOF'
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
EOF
docker build -t docker-lab:v1 .
docker run -d --name docker-lab -p 8090:80 docker-lab:v1
docker logs docker-lab
curl http://localhost:8090
docker stop docker-lab && docker rm docker-lab
إذا ظهر محتوى الصفحة عبر curl، فأنت أتقنت دورة Images/Containers الأساسية.
FAQ: أسئلة شائعة حول Docker Images وContainers
ما الفرق بين Docker Image وDocker Container؟
Image هي قالب ثابت، بينما Container هو نسخة قيد التشغيل من هذا القالب.
كيف أبني Docker image من Dockerfile؟
استخدم docker build -t image_name:tag . داخل المجلد الذي يحتوي Dockerfile.
كيف أنظف Docker resources غير المستخدمة؟
يمكنك استخدام docker system prune بحذر لحذف الحاويات المتوقفة والصور غير المستخدمة والموارد المؤقتة.