لا يتميز Docker Compose بالوظائف المطلوبة. يتيح بناء قوالب ملفات Docker الخاصة بـ Discourse نتائج Docker مرنة. مع Compose، كل ما لديك هو مجموعة محتملة من ملفات Docker الثابتة التي يمكن أن تؤدي إلى مجموعة من الحاويات.
في إعداد Discourse الخاص بي، أستخدم حاوية واحدة مع Discourse و nginx باستخدام مقبس UNIX. PostgreSQL و Redis هما خدمة على المضيف. هذا انحراف كبير عن الإعداد الافتراضي، ولكنه ممكن وجاهز للاستخدام.
إنه ممكن جزئيًا باستخدام Compose، ربما عن طريق استخدام ميزة التوصيف (profile) التي تم تصميمها بشكل سيء. ولكن حتى ذلك الحين، فإنه فوضوي للغاية. أو ستحتاج إلى تقديم ملفات Compose مختلفة لكل تنويع.
أنت فقط تنقل المشكلة.
سيكون إعداد Compose نظيف لـ Discourse هو الخدمات التالية في حاويات منفصلة:
- Discourse
- nginx
- PostgreSQL
- Redis
يحتاج Discourse و nginx إلى مشاركة وحدة تخزين، لا مشكلة.
PostgreSQL و Redis… هذه أشياء قد ترغب في استضافتها في مكان آخر، ولا يكون لديك حاوية خاصة بـ Discourse لها. والآن يصبح Docker Compose مشكلة، حيث سيقوم الأمر docker compose up -d بتشغيل PostgreSQL غير المرغوب فيه. حسنًا، لذا نجعله docker compose --profile postgresql up -d لتشغيل إعداد Discourse الأساسي، وحاوية PostgreSQL. و docker compose --profile postgresql --profile redis up -d لإعداد حاويات Discourse المكتفية ذاتيًا “الكاملة”. من الأفضل ألا تنسى وسيطة --profile ...، لأن ذلك سيؤدي إلى المزيد من المشاكل.
لذلك، لتحسين تجربة المستخدم (UX)، تقوم بإنشاء مشغل للعناية بإنشاء أمر Docker Compose المطلوب. الآن نحن نوعًا ما عدنا إلى نقطة البداية. باستثناء أن التعديلات على حاوية nginx ليست ممكنة بعد. لذا أحتاج إلى حاوية nginx-http وحاوية nginx-unix التي يجب أن تكون متبادلة الاستبعاد؟ …
بالتأكيد يمكن أن تكون إدارة الإضافات أفضل، ولكن القيام بذلك باستخدام Docker Compose سيكون أمرًا صعبًا للغاية.