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 سريعة في الرياض، بناء الصور وتشغيل الحاويات يتم بسرعة عالية.
ابدأ بخادم سحابي من كلاود بسعر يبدأ من أسعار تنافسية — الأسعار والباقات وحوّل طريقة نشر تطبيقاتك بالكامل.
ابدأ الآن
جاهز تبني مشروعك؟ اختر خادمك السحابي بالمواصفات اللي يحتاجها تطبيقك، أو راجع الباقات والأسعار.
