انتقل إلى المحتوى

Docker Compose - أداة ترتيب الصور

صورة

Docker Compose هو أداة لترتيب صور Docker. نوصي باستخدام Docker Compose كوسيلة افتراضية لفتح Docker، لأنه يمكنك من تكوين ونشر الصور بسهولة، وكذلك تكوين خدمات متعددة بشكل أسهل، بما في ذلك تحديد ترتيب تشغيلها، وهذا ما لا يتيحه الأمر العادي.

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

Docker Compose يسمح لك بكتابة جميع الصور التي تحتاج إليها (جميع خصائص الخدمات وتكوين الشبكة وجرد التخزين المرفق) وترتيب التشغيل في ملف YAML واحد. بمجرد تشغيل هذا الملف التكويني، يمكنك تشغيل الحاويات وفقًا للأسلوب والخطوات التي تحتاجها دون الحاجة إلى التدخل اليدوي في كل حاوية. فيما يلي مثال لاستخدام Docker Compose لنشر خدمة ويب:

compose.yaml
version: "3"
services:
  web:
    image: beginor/geoserver:2.11.1
    container_name: geoserver-web
    hostname: geoserver-web
    ports:
      - 8080:8080
    volumes:
      - ./web/data_dir:/geoserver/data_dir
      - ./web/logs:/geoserver/logs
    restart: unless-stopped
    links:
      - database:database
  database:
    image: beginor/postgis:9.3
    container_name: postgis
    hostname: postgis
    ports:
      - 5432:5432
    volumes:
      - ./database/data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: 1q2w3e4R
    restart: unless-stopped

في هذا الملف YAML، تم تعريف وتشغيل مثيلين: web و database.

تثبيت وتكوين Docker Compose

يعتمد Docker Compose على Docker Engine، لذا تأكد أولاً من تثبيت بيئة Docker Engine. إذا لم تكن قد قمت بذلك بعد، يمكنك الرجوع إلى البرنامج التعليمي السابق: أساسيات Docker لتثبيت Docker Engine.

إذا كنت تستخدم نسخة سطح المكتب لنظام التشغيل Windows/MacOS/Linux، فلن تحتاج إلى تثبيت Docker Compose بشكل منفصل، حيث يتم تضمينه بالفعل. أما بالنسبة لبيئة Docker Engine على نظام التشغيل Linux، فيمكنك استخدام الأوامر التالية لتثبيت Docker Compose:

لأنظمة Ubuntu وDebian، استخدم الأوامر التالية:

sudo apt-get update
sudo apt-get install docker-compose

بالنسبة لأنظمة RPM مثل CentOS، استخدم الأوامر التالية:

sudo yum update
sudo yum install docker-compose

بعد الانتهاء، يمكنك التحقق من نجاح التثبيت باستخدام الأمر التالي:

ترجمة إلى العربية:

```shell
docker compose version
```

كيفية استخدام Docker Compose

عادةً، نقوم بإنشاء ملف compose.yaml (الإصدار القديم كان docker-compose.yml وهو متوافق أيضًا) ونضعه في دليل يحمل اسم التطبيق، مثل web/compose.yaml.

لتشغيل هذا البرنامج، يكفي تنفيذ الأمر docker compose up في هذا الدليل، وبذلك سيتم تشغيل الخدمات وفقًا لتكوين الملف YAML. (يمكنك تشغيلها في الخلفية باستخدام الخيار -d)

لإيقاف تشغيل مكدس التطبيقات، يمكنك استخدام الأمر docker compose down.

كتابة ملف Docker Compose

الطريقة الافتراضية لاستخدام Docker Compose هي إنشاء ملف بتنسيق YAML، ويتم تسميته افتراضيًا بـ compose.yaml. فيما يلي قالب مثالي يحتوي على جميع الخيارات المتاحة (ولكن ليس من الضروري استخدامها جميعًا):

compose.yaml
version: "3"

services:
  service1:
    build:
      context: .
      dockerfile: Dockerfile
    image: صورتك1
    command: ["python", "app.py"]
    ports:
      - "8000:8000"
    volumes:
      - ./data:/app/data
    networks:
      - شبكتك
    environment:
      - ENV_VARIABLE=القيمة
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=كلمة المرور الخاصة بك
    volumes:
      - db-data:/var/lib/mysql

networks:
  شبكتك:

volumes:
  حجمك:
  db-data:

في ملف compose.yaml، ستجد عادةً الخيارات التالية:

يرجى العلم بأنه يمكن أن تختلف تفاصيل الملف الخاص بـ Docker Compose حسب متطلبات التطبيق الفعلية.

- **version**: تُستخدم فقط لعرض معلومات إصدار ملف الـ compose. يرتبط بإصدار Docker Engine وقد يحتوي على ميزات أو تركيب جديد. يرجى الرجوع إلى [**Compose file versions and upgrading**](https://docs.docker.com/compose/compose-file/compose-versioning/) في الوثائق الرسمية.

- **services**: يعرف جميع الخدمات (الحاويات) المدرجة في ملف الـ compose هذا. كل خدمة هي حاوية مستقلة يمكن تعريف صورتها، وتعيين تطوير البيئة وغيرها.

- **container_name**: اسم الحاوية. اختياري، ولكن لا يجوز تكرار الأسماء.

- **networks**: يعرف تكوين الشبكة بين الخدمات. يمكن إنشاء شبكات مخصصة وربط الخدمات بهذه الشبكات لتحقيق التواصل بين الحاويات.

- **volumes**: يعرف تكوين توصيل الأقراص للحاوية. يمكن توصيل مجلدات أو ملفات الحاوية بمجلدات أو ملفات المضيف لتحقيق الاستدامة والمشاركة. يعادل معامل `-v` في Docker CLI.

- **environment** (أو `env_file`): يحدد اسم ملف ومسار متغيرات البيئة للحاوية. يتم تحميل المتغيرات من هذا الملف. إذا لم يتم تكوين المتغيرات، يمكن تجاهله. إذا كان ملف المتغيرات موجودًا في الدليل الحالي ويسمى `.env`، يمكن تجاهله أيضًا. يعادل معامل `-e` في Docker CLI.

- **build**: يبدأ باستخدام الصورة المُبنية. يُحدد مسار ملف Dockerfile.

- **image**: يُحدد الصورة التي سيستخدمها الحاوية. يمكن استخدام صور من مستودع الصور العام أو تحديد ملف Dockerfile محلي.

- **ports**: يُحدد علاقة التعيين بين الحاوية والمضيف ويمكن تحديد بروتوكول التعيين (TCP أو UDP). يعادل معامل `-p` في Docker CLI.

- **depends_on**: يُحدد العلاقات بين الخدمات. يمكن تحديد اسم أو أسماء الخدمات التي تعتمد عليها الخدمة الحالية في تشغيلها.

- **restart**: يُحدد استراتيجية إعادة تشغيل الحاوية. يمكن تعيينها إلى `no` (بدون إعادة تشغيل تلقائي) أو `always` (إعادة تشغيل دائمًا) أو `unless-stopped` (إعادة تشغيل ما لم يتم إيقاف الحاوية يدويًا) أو `on-failure` (إعادة تشغيل فقط في حالة الفشل). يعادل معامل `--restart` في Docker CLI.

- **command**: يُحدد الأمر الذي سيتم تنفيذه عند بدء تشغيل الحاوية، ويُستخدم لتجاوز الأمر الافتراضي في صورة الحاوية.

- **volumes_from**: يُحدد مصدر الأقراص التي سيتم توصيلها إلى الحاوية.

## بعض الأوامر الشائعة لإدارة وتشغيل الخدمات المحددة في ملف `compose.yaml`:


```markdown
- `docker compose up`: يقوم ببناء الصور المحددة في compose ويشغل الحاويات. إذا كان ذلك ضروريًا، سيقوم ببناء الصور تلقائيًا (إذا تغير Dockerfile) ثم يشغل جميع الخدمات المحددة. إذا كنت بحاجة إلى تشغيله في الخلفية، فضع الخيار `-d`.

- `docker compose down`: يوقف ويزيل جميع الحاويات والشبكات والأقراص المحددة في compose. سيتوقف عن تشغيل الخدمات الجارية وينظف جميع الموارد ذات الصلة.

- `docker compose pull`: يجلب جميع الصور المحددة في compose أو يستخدم لتحديث الصور.

- `docker compose start`: يقوم بتشغيل الحاويات الموجودة بالفعل في compose، ولن يقوم بإعادة إنشاء الحاويات أو إعادة بناء الصور.

- `docker compose stop`: يقوم بإيقاف تشغيل الحاويات الموجودة بالفعل في compose، ولكنه لن يقم بإزالتها.

- `docker compose restart`: يقوم بإعادة تشغيل الحاويات الموجودة بالفعل في compose.

- `docker compose pause`: يقوم بإيقاف مؤقت للحاويات الموجودة بالفعل في compose، مما يجعلها تتوقف مؤقتًا عن العمل.

- `docker compose unpause`: يقوم بإعادة تشغيل الحاويات التي تم إيقافها مؤقتًا في compose لاستئناف تشغيلها.

- `docker compose ps`: يعرض حالة **جميع** الحاويات الجارية في compose.

- `docker compose logs`: يعرض سجلات الإخراج للحاويات الموجودة في compose.

- `docker compose exec`: يُستخدم لتنفيذ الأوامر في الحاويات الجارية في compose. على سبيل المثال: `docker exec -it [اسم الـ compose] /bin/bash`.

هذه بعض الأوامر الشائعة، يمكنك أيضًا تنفيذ `docker compose --help` لعرض المزيد من الأوامر المتاحة.

## المتغيرات البيئية

في Docker Compose، على الرغم من أن المتغيرات البيئية ليست إلزامية، إلا أنه من المستحسن استخدامها بشكل مكثف لأسباب عدة:

1. **المرونة وقابلية التكوين**: يمكنك بسهولة تعديل معلومات تكوين التطبيق دون الحاجة إلى تعديل صور Docker أو إعادة بناء الحاويات.
2. **الأمان والعزل**: من خلال تخزين المعلومات الحساسة في المتغيرات البيئية بدلاً من كتابتها مباشرة في الشيفرة أو ملف التكوين، يمكنك زيادة أمان التطبيق.
3. **التوافق عبر المنصات**: يمكن نقل معلومات التكوين المختلفة إلى الحاويات دون الحاجة إلى تعديل ملفات التكوين أو شيفرة الصور.
4. **تبسيط النشر والإدارة**: من خلال استخدام المتغيرات البيئية بشكل موحد لتكوين معلمات مختلفة للحاويات، يمكنك تقليل التكرار في ملفات التكوين وجعل العملية أكثر وضوحًا وسهولة للصيانة.
5. **التكامل والتلقائية**: بالتنسيق مع أدوات CI/CD والأتمتة، يمكن نقل معلمات تكوين التطبيق إلى حاويات Docker تلقائيًا، مما يتيح النشر والتكامل التلقائي.

المتغيرات البيئية عادةً ما تتمثل في ملف بامتداد `.env`، وعادةً ما يتم إنشاؤه مباشرة في نفس الدليل الرئيسي الذي يحتوي على ملف `compose.yaml`. فيما يلي مثال:

```dotenv title=".env"
TAG=v1.5

يمكن الرجوع إلى المتغيرات البيئية مباشرة في ملف compose.yaml:

compose.yaml
services:
  web:
    image: "webapp:${TAG}"

نصائح صغيرة

هناك موقع ويب يقوم بتحو

عنوان النص: https://wiki-power.com/ يتم حماية هذا المقال بموجب اتفاقية CC BY-NC-SA 4.0، يُرجى ذكر المصدر عند إعادة النشر.

تمت ترجمة هذه المشاركة باستخدام ChatGPT، يرجى تزويدنا بتعليقاتكم إذا كانت هناك أي حذف أو إهمال.