كلاود
أدلة

Docker على سيرفر سعودي: من الصفر للإنتاج

كلاود|٢٠ يناير ٢٠٢٦|4 دقائق قراءة|٦٠٨ مشاهدة
Docker على سيرفر سعودي: من الصفر للإنتاج

Docker يسهّل نشر التطبيقات. التثبيت على سيرفر سعودي واستخدام Docker Compose لبيئة إنتاج حقيقية.

لماذا Docker على سيرفر سعودي؟

Docker يحل مشكلة قديمة: "يشتغل عندي لكن ما يشتغل على السيرفر." مع Docker، تطبيقك يعمل بنفس الطريقة في كل مكان — على جهازك المحلي، على سيرفر الاختبار، وعلى سيرفر الإنتاج. أضف لذلك سيرفر سعودي بزمن استجابة 8ms وتحصل على بيئة مثالية لتطبيقاتك.

تثبيت Docker

على Ubuntu 22.04 / 24.04

# إزالة نسخ قديمة
sudo apt remove docker docker-engine docker.io containerd runc 2>/dev/null

# تثبيت المتطلبات
sudo apt update
sudo apt install ca-certificates curl gnupg -y

# إضافة مفتاح Docker الرسمي
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# إضافة المستودع
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# التثبيت
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

# التحقق
sudo docker run hello-world

السماح بتشغيل Docker بدون sudo

sudo usermod -aG docker $USER
# سجّل خروج ودخول مرة أخرى
newgrp docker

المفاهيم الأساسية

المفهوم الوصف
Image قالب جاهز يحتوي على التطبيق ومتطلباته
Container نسخة عاملة من الـ Image
Dockerfile ملف تعليمات لبناء Image
Volume مساحة تخزين دائمة خارج الحاوية
Network شبكة تربط الحاويات ببعضها

الأوامر الأساسية

# تشغيل حاوية
docker run -d --name my-nginx -p 80:80 nginx

# عرض الحاويات العاملة
docker ps

# عرض جميع الحاويات (بما فيها المتوقفة)
docker ps -a

# إيقاف حاوية
docker stop my-nginx

# حذف حاوية
docker rm my-nginx

# عرض الصور المحلية
docker images

# حذف صورة
docker rmi nginx

# الدخول داخل حاوية
docker exec -it my-nginx bash

# عرض سجلات حاوية
docker logs my-nginx
docker logs -f my-nginx # متابعة مباشرة

بناء أول Image

Dockerfile لتطبيق Laravel

# ملف: Dockerfile
FROM php:8.3-fpm

# تثبيت المتطلبات
RUN apt-get update && apt-get install -y \
 git curl zip unzip libpng-dev libonig-dev libxml2-dev \
 libzip-dev libpq-dev \
 && docker-php-ext-install pdo pdo_mysql mbstring exif pcntl bcmath gd zip \
 && apt-get clean && rm -rf /var/lib/apt/lists/*

# تثبيت Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# إعداد مجلد العمل
WORKDIR /var/www/app

# نسخ ملفات الاعتماديات أولاً (للاستفادة من الكاش)
COPY composer.json composer.lock ./
RUN composer install --no-dev --no-scripts --no-autoloader

# نسخ باقي الملفات
COPY . .

# إكمال تثبيت Composer
RUN composer dump-autoload --optimize

# ضبط الصلاحيات
RUN chown -R www-data:www-data /var/www/app/storage /var/www/app/bootstrap/cache

EXPOSE 9000
CMD ["php-fpm"]

بناء وتشغيل الصورة

# بناء الصورة
docker build -t my-laravel-app:1.0 .

# تشغيل الحاوية
docker run -d \
 --name laravel-app \
 -p 9000:9000 \
 -v $(pwd)/.env:/var/www/app/.env \
 my-laravel-app:1.0

إدارة البيانات مع Volumes

البيانات داخل الحاوية تُحذف عند حذف الحاوية. استخدم Volumes للبيانات الدائمة:

# إنشاء Volume
docker volume create mysql-data

# تشغيل MySQL مع Volume
docker run -d \
 --name mysql-db \
 -e MYSQL_ROOT_PASSWORD=secret \
 -e MYSQL_DATABASE=app_db \
 -v mysql-data:/var/lib/mysql \
 -p 3306:3306 \
 mysql:8.0

# عرض Volumes
docker volume ls

# تفاصيل Volume
docker volume inspect mysql-data

الشبكات (Networks)

# إنشاء شبكة
docker network create app-network

# تشغيل حاويات على نفس الشبكة
docker run -d --name db --network app-network mysql:8.0
docker run -d --name app --network app-network my-laravel-app:1.0

# الآن الحاوية app تقدر توصل لـ db بالاسم:
# DB_HOST=db (بدلاً من IP)

ملف .dockerignore

لا ترسل ملفات غير ضرورية أثناء البناء:

# ملف: .dockerignore
.git
.env
node_modules
vendor
storage/logs/*
storage/framework/cache/*
storage/framework/sessions/*
storage/framework/views/*
tests
docker-compose.yml
README.md

تحسين الأداء على السيرفر السعودي

تسريع سحب الصور

# إعداد mirror محلي (اختياري للبنية الكبيرة)
# ملف: /etc/docker/daemon.json
{
 "log-driver": "json-file",
 "log-opts": {
 "max-size": "10m",
 "max-file": "3"
 },
 "storage-driver": "overlay2"
}

تنظيف الموارد غير المستخدمة

# حذف الحاويات المتوقفة والصور والشبكات غير المستخدمة
docker system prune -a

# عرض استخدام القرص
docker system df

الأمان

# لا تشغّل الحاويات بصلاحية root
USER www-data # في Dockerfile

# حدد الموارد
docker run -d --name app \
 --memory="512m" \
 --cpus="1.0" \
 my-laravel-app:1.0

# لا تخزّن أسرار في الـ Image
# استخدم متغيرات البيئة أو Docker Secrets

البداية مع كلاود

سيرفرات كلاود (cloud.net.sa) جاهزة لـ Docker من اللحظة الأولى. نظام KVM يعطيك عزل كامل وصلاحية root — ثبّت Docker وابدأ بناء حاوياتك فوراً. مع أقراص SSD سريعة في الرياض، بناء الصور وتشغيل الحاويات يتم بسرعة عالية.

ابدأ بخادم سحابي من كلاود بسعر يبدأ من أسعار تنافسية — الأسعار والباقات وحوّل طريقة نشر تطبيقاتك بالكامل.


ابدأ الآن

جاهز تبني مشروعك؟ اختر خادمك السحابي بالمواصفات اللي يحتاجها تطبيقك، أو راجع الباقات والأسعار.

مشاركة