توقف عن كتابة أوامر docker run - استخدم Docker Compose بدلًا من ذلك

نُشرت في

أغلب أوامر docker run تتحول إلى مزيج من الأعلام غير القابل للصيانة. يوضح هذا الدليل كيفية تحويل أوامر docker run إلى docker compose - مع جدول مرجعي للأعلام، مثال حقيقي للتحويل، وأداة تحويل مجانية.

توقف عن كتابة أوامر docker run — استخدم Docker Compose بدلًا من ذلك 1
إعلان · حذف؟

تبدأ كل عملية Docker بنفس الطريقة: docker runأول علم، اثنين من العلامات — يمكن التحكم بها. ولكن بحلول الوقت الذي تبدأ فيه تشغيل حاوية بمعاينة، ومتغيرات بيئة، وحجم تخزين، وسياسة إعادة التشغيل، وشبكة مخصصة، يصبح هذا الأمر 400 حرف من شيء لا يمكن تذكره، ولا يمكن تضمينه في نظام إدارة النسخ، ولا يمكن إعطاؤه لزميلك دون تبادل شرط على وسيلة مثل سلوك سلاك يحمل شعوراً بالذنب.

يُعد Docker Compose الحل. ملف يوالي واحد يُستبدل بالكامل للتعليمات — وينتقل إلى جيت.

لماذا توقفت عملية docker run عن التوسع

إليك أمر معياري docker run للتطبيق Node.js:

docker run -d \
  --name my-app \
  -p 3000:3000 \
  -e NODE_ENV=production \
  -e DATABASE_URL=postgres://user:pass@db:5432/mydb \
  -v ./data:/app/data \
  --network app-network \
  --restart always \
  my-app:latest

يُعمل. مرة واحدة. ثم تغلق الطرف، تفتح طرفًا جديدًا بعد ثلاث أسابيع، وستكون غير معرفة بعلامات الاستخدام التي استخدمتها. لا يوجد شيء لـ git diff. لا يوجد شيء يمكن مشاركته مع مُوظف جديد. لا طريقة لضمان أن بيئة التجريب تتطابق مع الإنتاج.

ما يوفره Docker Compose

يأخذ كل ما تم وضعه في تلك docker run أوامر وينسخها إلى ملف يوالي يُسمى docker-compose.yml. هذا الملف:

  • يوجد في مخزنك بجانب الكود
  • يُشغل بسلاسل بسيطة docker compose up -d
  • يُشغل بنفس الطريقة على كل جهاز وبيئة
  • يمكنه التوسع لتركيبات متعددة الخدمات (تطبيق + قاعدة بيانات + ذاكرة مؤقتة) دون ممارسة مهارات متعددة للعلامات

كيف تحول أمر docker run

أصبح هذا الأمر نفسه docker-compose.yml:

version: "3.9"
services:
  my-app:
    image: my-app:latest
    container_name: my-app
    ports:
      - "3000:3000"
    environment:
      NODE_ENV: production
      DATABASE_URL: postgres://user:pass@db:5432/mydb
    volumes:
      - ./data:/app/data
    networks:
      - app-network
    restart: always

networks:
  app-network:

نفس السلوك. ولكن الآن يمكن قراءته، وتسجيله، وتحقيقه بشكل مكرر.

ابدأ التشغيل:

docker compose up -d

أوقف التشغيل:

docker compose down

أعلام docker run إلى مفاتيح docker-compose.yml

مراجع للاختيارات التي تستخدمها بانتظام:

أعلام docker runمفتاح docker-compose.ymlمثال
-p 8080:80ports:- "8080:80"
-e FOO=barenvironment:FOO: bar
-v ./data:/datavolumes:- ./data:/data
--network mynetnetworks:mynet
--restart alwaysrestart:always
--name mycontainercontainer_name:mycontainer
--memory 512mmem_limit:512m
--cpus 1.5deploy.resources.limits.cpuscpus: "1.5"
-dاستخدم -d أعلام التشغيل أثناء التشغيلdocker compose up -d

تحويل تلقائي

إذا كان لديك أمر طويل موجود منذ البداية docker run أو أمر ورثته من وثيقة مقدمة أو من سكربت تكامل تمت تجربته منذ سنتين — لا تحتاج إلى تطابق كل علامة يدويًا. استخدم مُحول تشغيل Docker إلى Docker Compose: انسخ الأمر، احصل على نسخة صحيحة docker-compose.yml مخرج.

يتعامل مع المعايير، المتغيرات البيئية، الحوافز، الشبكات، سياسات إعادة التشغيل، وغيرها. مفيد لتحويل أوامر قديمة دون إدخال أخطاء أثناء التحويل.

إذا كنت تُحدِّد حدود الموارد في ملف Compose، فإن حاسبة موارد حاوية Docker يساعدك في اختيار قيم مناسبة للاختصاصات والذاكرة بناءً على حجم الحمل — قبل أن تضع أرقامًا استخرجتها من فراغ.

فحص ملف Dockerfile أثناء التحديد

بمجرد أن تُرتّب ملف Compose، تحقق من ملف Dockerfile الذي يُبنى منه. صورات القواعد غير المُحددة، مفقودة WORKDIR، طبقات متكررة RUN أو طبقات غير ضرورية — هذه تُفوت بسهولة وتحاول التحقيق لاحقًا. يُكتشف ذلك من قبل مُدقق Dockerfile قبل أن يصبح مشكلة في الإنتاج.

هل تريد حذف الإعلانات؟ تخلص من الإعلانات اليوم

تثبيت ملحقاتنا

أضف أدوات IO إلى متصفحك المفضل للوصول الفوري والبحث بشكل أسرع

أضف لـ إضافة كروم أضف لـ امتداد الحافة أضف لـ إضافة فايرفوكس أضف لـ ملحق الأوبرا

وصلت لوحة النتائج!

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

إعلان · حذف؟
إعلان · حذف؟
إعلان · حذف؟

ركن الأخبار مع أبرز التقنيات

شارك

ساعدنا على الاستمرار في تقديم أدوات مجانية قيمة

اشتري لي قهوة
إعلان · حذف؟