تثبيت Kubernetes مع K3s: تنسيق الحاويات الخفيف
إعداد كلاستر Kubernetes أحادي ومتعدد العقد مع K3s، استخدام kubectl، إنشاء deployments وservices، إدارة التطبيقات مع Helm. دليل Kubernetes لبيئات VPS.
أنواع Docker volume (named, bind mount, tmpfs)، إدارة الـ volumes، أوضاع شبكات Docker (bridge, host, overlay)، إنشاء شبكات مخصصة والتواصل بين الحاويات. دليل شامل.
حاويات Docker مؤقتة بطبيعتها — عند حذف الحاوية تُفقد بياناتها أيضاً. تحل الـ volumes هذه المشكلة وتضمن بقاء البيانات بشكل مستقل عن دورة حياة الحاوية. تدير شبكات Docker التواصل بين الحاويات ومع العالم الخارجي.
| النوع | الوصف | حالة الاستخدام |
|---|---|---|
| Named Volume | تُدار بواسطة Docker | قاعدة البيانات، بيانات التطبيق |
| Bind Mount | ربط مجلد المضيف | التطوير، ملفات الإعداد |
| tmpfs Mount | مؤقت في الذاكرة | البيانات المؤقتة الحساسة |
# إنشاء volume
docker volume create myapp-data
# عرض قائمة الـ volumes
docker volume ls
# عرض تفاصيل الـ volume
docker volume inspect myapp-data
# حذف volume
docker volume rm myapp-data
# حذف الـ volumes غير المستخدمة
docker volume prune
# تشغيل MySQL مع volume
docker run -d \
--name mysql-db \
-e MYSQL_ROOT_PASSWORD=StrongPass123! \
-e MYSQL_DATABASE=myapp \
-v mysql-data:/var/lib/mysql \
-p 3306:3306 \
mysql:8.0
# تشغيل PostgreSQL مع volume
docker run -d \
--name postgres-db \
-e POSTGRES_PASSWORD=StrongPass123! \
-e POSTGRES_DB=myapp \
-v postgres-data:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:15
# ربط المجلد الحالي بالحاوية
docker run -d \
--name nginx-web \
-v /home/user/website:/usr/share/nginx/html:ro \
-p 80:80 \
nginx:latest
# Bind mount للتطوير
docker run -it \
--name node-dev \
-v $(pwd):/app \
-w /app \
-p 3000:3000 \
node:20 \
npm run dev
# docker-compose.yml
version: '3.8'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: StrongPass123!
MYSQL_DATABASE: myapp
volumes:
- mysql-data:/var/lib/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
ports:
- "3306:3306"
app:
image: myapp:latest
volumes:
- app-uploads:/app/uploads
- ./config:/app/config:ro
depends_on:
- db
volumes:
mysql-data:
driver: local
app-uploads:
driver: local
# نسخ احتياطي للـ volume (أرشيف tar)
docker run --rm \
-v mysql-data:/data \
-v $(pwd):/backup \
alpine tar czf /backup/mysql-backup.tar.gz -C /data .
# استعادة الـ volume
docker run --rm \
-v mysql-data:/data \
-v $(pwd):/backup \
alpine tar xzf /backup/mysql-backup.tar.gz -C /data
# إنشاء شبكة bridge مخصصة
docker network create myapp-network
# ربط الحاويات بالشبكة المخصصة
docker run -d \
--name web \
--network myapp-network \
nginx
docker run -d \
--name db \
--network myapp-network \
-e MYSQL_ROOT_PASSWORD=StrongPass123! \
mysql:8.0
# الحاويات في الشبكة المخصصة تجد بعضها بالاسم
docker exec web ping db
# التشغيل في وضع شبكة host (Linux فقط)
docker run -d \
--name nginx-host \
--network host \
nginx
# عرض قائمة الشبكات
docker network ls
# عرض تفاصيل الشبكة
docker network inspect myapp-network
# إنشاء شبكة بشبكة فرعية مخصصة
docker network create \
--driver bridge \
--subnet 172.20.0.0/16 \
--gateway 172.20.0.1 \
myapp-network
# ربط حاوية بشبكة
docker network connect myapp-network existing-container
# فصل حاوية عن شبكة
docker network disconnect myapp-network existing-container
# حذف شبكة
docker network rm myapp-network
version: '3.8'
services:
frontend:
image: nginx:latest
networks:
- frontend-net
ports:
- "80:80"
backend:
image: myapp:latest
networks:
- frontend-net
- backend-net
db:
image: mysql:8.0
networks:
- backend-net
environment:
MYSQL_ROOT_PASSWORD: StrongPass123!
networks:
frontend-net:
driver: bridge
backend-net:
driver: bridge
internal: true
إدارة Docker volume والشبكات هي الأساس لبنية تحتية للحاويات على مستوى الإنتاج. احفظ بياناتك بأمان مع named volumes، وعزل حاوياتك بشبكات bridge مخصصة، وعرّف بنيتك التحتية بالكامل كرمز مع Docker Compose. بهذه الإعدادات على خوادم REXE يمكنك بناء بيئات حاويات موثوقة وقابلة للتوسع.
Named volume تُدار بواسطة Docker (مخزنة في /var/lib/docker/volumes/)، قابلة للنقل وسهلة النسخ الاحتياطي. Bind mount يربط مباشرة مجلداً محدداً من المضيف، مثالي لرؤية تغييرات الكود فوراً أثناء التطوير. استخدم named volumes في الإنتاج وbind mounts في التطوير.
يجب أن تكون الحاويات على نفس الشبكة المخصصة. في شبكة bridge الافتراضية لا تستطيع الحاويات إيجاد بعضها بالاسم — فقط بعنوان IP. أنشئ شبكة مخصصة بـ docker network create وربط كلتا الحاويتين بها. عندها يمكن استخدام اسم الحاوية كـ hostname.
الطريقة الأكثر موثوقية: استخدم حاوية Alpine مؤقتة لضغط الـ volume في أرشيف tar. الأمر docker run --rm -v VOLUME_NAME:/data -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz -C /data . ينسخ محتوى الـ volume إلى المجلد الحالي. استخدم tar xzf للاستعادة.
يضع Docker Compose تلقائياً الخدمات من نفس ملف docker-compose.yml على نفس الشبكة. يمكن للخدمات إيجاد بعضها باسم الخدمة. خدمة باسم 'db' يمكن الوصول إليها من الخدمات الأخرى بـ hostname 'db'. إذا لم تعرّف شبكة مخصصة ينشئ Compose شبكة bridge افتراضية.
يُستخدم وضع شبكة host عندما تحتاج الحاوية لاستخدام واجهة شبكة المضيف مباشرة. الميزة: أعلى أداء للشبكة، لا حاجة لتعيين المنافذ. العيب: لا عزل، تعارضات المنافذ ممكنة. مناسب للتطبيقات عالية الأداء الشبكي. يعمل على Linux فقط.
إعداد كلاستر Kubernetes أحادي ومتعدد العقد مع K3s، استخدام kubectl، إنشاء deployments وservices، إدارة التطبيقات مع Helm. دليل Kubernetes لبيئات VPS.
مشغلات سجلات Docker، أمر docker logs، سجلات pods في Kubernetes، جمع السجلات المركزي (Loki, ELK Stack)، تدوير السجلات وأفضل ممارسات إدارة السجلات في بيئة الإنتاج.
أفضل ممارسات أمان Docker: مستخدم غير root، نظام ملفات للقراءة فقط، ملفات seccomp، فحص الصور، أمان Docker socket، عزل الشبكة وإدارة الأسرار.