← يتطلب: إدارة النظام الحوكمة والتشغيل متوسط ⏱ 5 ساعات الدورة 29

Docker والحاويات

Docker and Containers

🎯 أهداف التعلم

1فهم مفهوم الحاويات (Containers)
2تعلم بناء Docker Image لـ IRIS
3فهم Docker Compose
4تعلم نشر IRIS في Kubernetes
5فهم أفضل ممارسات الحاويات
01

مقدمة في Docker

الحاويات توفر بيئة معزولة لتشغيل التطبيقات.

# Dockerfile لـ IRIS
FROM intersystems/iris:2024.1

# تعيين متغيرات البيئة
ENV ISC_DATA_DIRECTORY=/opt/irisapp/data
ENV IRIS_USERNAME=SuperUser
ENV IRIS_PASSWORD=***

# نسخ التطبيق
COPY ./src /opt/irisapp/src
COPY ./installer.cls /opt/irisapp/

# تشغيل المثبت
RUN iris session IRIS < /opt/irisapp/installer.cls

# فتح المنافذ
EXPOSE 1972 52773

# تشغيل IRIS
CMD ["iris", "start", "IRIS", "foreground"]
# بناء الصورة
docker build -t hospital-iris:1.0 .

# تشغيل الحاوية
docker run -d \
  --name hospital-iris \
  -p 1972:1972 \
  -p 52773:52773 \
  -v iris-data:/opt/irisapp/data \
  hospital-iris:1.0

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

# عرض السجلات
docker logs hospital-iris
02

Docker Compose

Docker Compose يدير حاويات متعددة.

# docker-compose.yml
version: '3.8'

services:
  iris:
    image: intersystems/iris:2024.1
    container_name: hospital-iris
    ports:
      - "1972:1972"
      - "52773:52773"
    environment:
      - ISC_DATA_DIRECTORY=/opt/irisapp/data
      - IRIS_USERNAME=SuperUser
      - IRIS_PASSWORD=***
    volumes:
      - iris-data:/opt/irisapp/data
      - ./src:/opt/irisapp/src
    networks:
      - hospital-net

  web:
    image: nginx:alpine
    container_name: hospital-web
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - iris
    networks:
      - hospital-net

volumes:
  iris-data:

networks:
  hospital-net:
    driver: bridge
# تشغيل جميع الخدمات
docker-compose up -d

# إيقاف جميع الخدمات
docker-compose down

# عرض الحاويات
docker-compose ps

# عرض السجلات
docker-compose logs -f iris
03

Kubernetes Deployment

Kubernetes يدير الحاويات على نطاق واسع.

# kubernetes/iris-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hospital-iris
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hospital-iris
  template:
    metadata:
      labels:
        app: hospital-iris
    spec:
      containers:
      - name: iris
        image: hospital-iris:1.0
        ports:
        - containerPort: 1972
        - containerPort: 52773
        env:
        - name: ISC_DATA_DIRECTORY
          value: /opt/irisapp/data
        volumeMounts:
        - name: iris-data
          mountPath: /opt/irisapp/data
        resources:
          requests:
            memory: "2Gi"
            cpu: "1000m"
          limits:
            memory: "4Gi"
            cpu: "2000m"
      volumes:
      - name: iris-data
        persistentVolumeClaim:
          claimName: iris-pvc
# نشر التطبيق
kubectl apply -f kubernetes/

# عرض الحاويات
kubectl get pods

# عرض الخدمات
kubectl get services

# تكبير/تصغير
kubectl scale deployment hospital-iris --replicas=5
04

أفضل الممارسات

اتبع هذه الممارسات لاستخدام الحاويات بشكل فعال.

# أفضل الممارسات

# 1. استخدم Multi-stage builds
# Stage 1: Build
FROM intersystems/iris:2024.1 AS builder
COPY ./src /build/src
RUN iris session IRIS < /build/installer.cls

# Stage 2: Production
FROM intersystems/iris:2024.1
COPY --from=builder /opt/irisapp /opt/irisapp

# 2. لا تشغّل كـ root
USER irisowner

# 3. استخدم Health Checks
HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost:52773/csp/sys/ || exit 1

# 4. استخدم .dockerignore
echo ".git" >> .dockerignore
echo "node_modules" >> .dockerignore
echo "*.log" >> .dockerignore

# 5. استخدم Tags محددة بدلاً من latest
FROM intersystems/iris:2024.1.0.200.0
# بدلاً من
FROM intersystems/iris:latest

📝 اختبار التحقق

1 ما هو Docker؟
A نظام تشغيل
B منصة لبناء ونشر الحاويات
C قاعدة بيانات
D لغة برمجة
💡 الشرح

Docker هو منصة لبناء ونشر وتشغيل الحاويات (Containers).

2 ما هو Kubernetes؟
A نوع من الحاويات
B نظام إدارة حاويات على نطاق واسع
C أداة بناء
D قاعدة بيانات
💡 الشرح

Kubernetes (K8s) هو نظام مفتوح المصدر لإدارة الحاويات على نطاق واسع.

ما هو الفرق بين Docker Image و Container؟
💡 الشرح

Image هو القالب (template) و Container هو نسخة عاملة (instance) من الـ Image

💡 النقاط الرئيسية

  • الحاويات توفر بيئة معزولة لتشغيل التطبيقات
  • Dockerfile يحدد كيفية بناء الصورة
  • Docker Compose يدير حاويات متعددة
  • Kubernetes يدير الحاويات على نطاق واسع
  • اتبع أفضل الممارسات لبناء صور فعالة