من أمر تشغيل إلى إعدادات قابلة لإعادة الاستخدام

تحويل docker run إلى Compose

احتفظ بإعدادات التشغيل في ملف يسهل مراجعته بدل البحث عنها في سجل الطرفية. ألصق الأمر لتحصل على YAML مع توضيح ما يلزم التحقق منه قبل تشغيل Compose.

docker runcompose.yaml
التحويل داخل المتصفح
01

ألصق أمرًا واحدًا. ندعم علامات الاقتباس ومتابعة الأسطر بالشرطة المائلة العكسية، وتتحدث النتيجة أثناء الكتابة.

02

compose.yaml

services:
  web:
    image: "nginx:alpine"
    container_name: "web"
    ports:
      - "8080:80"
    volumes:
      - "./html:/usr/share/nginx/html:ro"
    restart: "unless-stopped"
    network_mode: "bridge"

الخيارات: 5 · خدمة واحدةYAML

قبل التشغيل

  • التشغيل في الخلفية خيار عند البدء. استخدم ⁦docker compose up -d.⁩
  • تبدأ المسارات النسبية من موقع ⁦compose.yaml.⁩ راجع المجلد أو استخدم مسارات مطلقة.
  • يحافظ ⁦network_mode: bridge⁩ على شبكة ⁦docker run⁩ الافتراضية. أزل الحقل إذا أردت أن ينشئ ⁦Compose⁩ شبكة المشروع.
فحص الإعدادات محليًاdocker compose config

بلا تسجيل أو تنفيذ أوامر. تُعالج المدخلات داخل متصفحك.

لماذا تحفظ أمر التشغيل في ملف Compose؟

عند إعادة نشر تطبيق، لا يكفي تذكّر اسم الصورة؛ يجب أيضًا استعادة المنافذ والمسارات ومتغيرات البيئة الصحيحة. يجمع compose.yaml هذه الإعدادات في حقول واضحة، لتسهيل مراجعتها وحفظ التغييرات في Git.

ينتج المحوّل تعريف خدمة واحدة من أمر واحد. لا يقرأ إعدادات الحاويات العاملة ولا يستنتج علاقات الاعتماد بين الخدمات. كما أن إنشاء الملف لا يغيّر أي حاوية على الخادم.

من لصق الأمر إلى فحص الملف

ابدأ بأمر docker run أو docker container run، مع الحفاظ على علامات الاقتباس وشرطات متابعة الأسطر. اسم الخدمة الاختياري يغيّر المفتاح تحت services فقط؛ أما الاسم المحدد بواسطة --name فيبقى في container_name.

اقرأ الملاحظات ثم انسخ YAML أو نزّله. راجع مواقع المجلدات والملفات المشار إليها وشغّل docker compose config. لتشغيل خدمة مستمرة في الخلفية استخدم بعد ذلك docker compose up -d. المهام المؤقتة التي تستخدم --rm لها طريقة تشغيل مختلفة.

تأكّد من الرجوع إلى البيانات الموجودة

تُحفظ أسماء وحدات التخزين المسماة كما هي وتُعلن باستخدام external: true. بذلك تُستخدم الوحدة الموجودة بدل إنشاء وحدة جديدة باسم يتضمن بادئة المشروع. يجب أن تكون الوحدة موجودة مسبقًا؛ في الإعداد الجديد أنشئها أولًا أو أزل هذا الحقل. المحوّل لا ينسخ البيانات.

تُفسّر المسارات النسبية انطلاقًا من مجلد ملف Compose. وتُعامل الشبكات المخصّصة أيضًا كموارد خارجية موجودة. إن لم تحدد شبكة، يبقى network_mode: bridge للحفاظ على شبكة Docker run الافتراضية. أزل الحقل إذا أردت شبكة المشروع التي ينشئها Compose والتواصل بأسماء الخدمات.

مثال Nginx: نشر منفذ وسياسة إعادة تشغيل

يربط المثال منفذ المضيف 8080 بمنفذ الحاوية 80. تُحفظ سياسة unless-stopped في YAML، بينما يُحدد التشغيل في الخلفية عبر -d عند إطلاق Compose، ولا يُكتب كحقل في الخدمة.

docker run -d --name web -p 8080:80 \
  --restart unless-stopped nginx:alpine
services:
  web:
    image: "nginx:alpine"
    container_name: "web"
    ports:
      - "8080:80"
    restart: "unless-stopped"
    network_mode: "bridge"

ما الذي ينبغي حسمه في الطرفية أولًا؟

الإدخال بصياغة POSIX مع الاقتباس والهروب ومتابعة الأسطر. لا ندعم PowerShell أو CMD أو الأنابيب أو عدة أوامر أو خيارات Docker العامة. استبدل المتغيرات و$(pwd) بالقيم الفعلية. لحفظ علامة الدولار حرفيًا احمها بالاقتباس المفرد أو الهروب؛ وتُكتب في Compose بصيغة $$.

يُحوّل --env-file باستخدام format: raw، ويتطلب Docker Compose 2.30.0 أو أحدث. لا يقرأ المحوّل محتوى الملفات ولا يفحص الصور أو المنافذ المشغولة. نجاح فحص الإعدادات لا يضمن تشغيل التطبيق.

خيارات Docker وما يقابلها في Compose

خيار Dockerحقل Composeالمعنى
IMAGEimageالحفاظ على الصورة ووسمها
--namecontainer_nameاسم الحاوية المحدد صراحة
-p, --publishportsربط منفذ المضيف بمنفذ الحاوية
-e, --envenvironmentالقيم غير المحددة تُحل من بيئة التشغيل
-v, --volume / --mountvolumesربط المجلدات ووحدات التخزين المسماة أو المجهولة
--networknetworks / network_modeاسم الشبكة أو وضع الشبكة
--restartrestartسياسة إعادة التشغيل
IMAGE [COMMAND] [ARG…]commandالحفاظ على الوسائط ضمن قائمة

أسئلة حول الانتقال إلى Compose

لماذا لا يوجد حقل version؟

يتبع الملف Compose Specification ويبدأ بـservices. لا يضيف حقل version القديم. استخدم الأمر الحديث docker compose للفحص.

كيف أحتفظ بسلوك --rm؟

للمهمة المؤقتة استخدم docker compose run --rm --service-ports SERVICE واستبدل SERVICE باسم الخدمة. يطبّق --service-ports ربط المنافذ المعرّف في الملف.

هل يتجاهل المحوّل الخيارات غير المدعومة؟

لا. خيارات مثل --gpus و--link وبعض إعدادات الربط المتقدمة توقف التحويل وتتطلب إعدادًا يدويًا، حتى لا تُحذف من الناتج دون تنبيه.

هل يمكن جمع عدة أوامر في ملف واحد؟

حوّل كل أمر منفصلًا ثم اجمع تعريفات الخدمات. راجع وحدات التخزين المشتركة والشبكات وأضف علاقات الاعتماد يدويًا.

هل تُرسل كلمات المرور إلى خادم؟

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

ماذا لو كانت حاوية تحمل الاسم نفسه تعمل بالفعل؟

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

وثائق Docker الرسمية: docker run · Compose · $$