هل Docker قوي بشكل عام بما يكفي للنشر في بيئة الإنتاج؟

مرحبًا،

هذا سؤال خارج عن الموضوع.

نحن نقوم بتغليف وتوزيع تطبيق ويب، ونشعر بالحاجة إلى الانتقال من طريقة النشر عبر حزم deb/rpm إلى استخدام الحاويات (containers) للتحكم في إصدارات التبعيات (مثل وجود إصدار أحدث من Python على توزيعات قديمة).

لقد استعرضت خيارات LXC وLXD، ويبدو أنهما خياران جذابان للطريقة القديمة في تطوير التطبيقات التي تخزن الحالة داخل الحاوية. لكننا بحاجة أيضًا إلى النشر على أنظمة RHEL/CentOS، وحالة حزم LXC وLXD على هذه الأنظمة تبدو سيئة للغاية. كما لا يبدو أن هناك مستقبلًا لـ LXD أو LXC في عالم RHEL.

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

هل أصبحت Docker الآن منصة موثوقة للنشر في بيئات الإنتاج الصغيرة والكبيرة حيث يكون وقت تشغيل التطبيق أمرًا بالغ الأهمية؟

وما هي أفضل الممارسات لتغليف وتوزيع التطبيقات باستخدام Docker؟

بما أن Discourse يُنشر حصريًا باستخدام Docker، وأنا متأكد من أنه يُستخدم في نشرات كبيرة، يبدو أنه المكان الأنسب لطرح هذا السؤال.

شكرًا لك

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

لدى Docker نصيبه العادل من الأخطاء، لكن بالنسبة لنا، تفوق الفوائد المشكلات.

فقط نقطة واحدة:

لا أعرف بالضبط ما تقصده بهذا، لكن الحالة طويلة الأجل مثل بيانات قاعدة البيانات، تُحفظ عادةً في وحدات تخزين ترتبط بالمضيف.

هل من المعروف أن حاويات Discourse تعمل دون مشاكل على كل من المضيفين الذين يعملون بنظام Ubuntu وتوزيعات RHEL (Ubuntu 18.04/16.04 و CentOS 7/8)؟

هل هذا متوقع من Docker؟

معظم الناس يستخدمون Ubuntu، وهو نظام التشغيل الموصى به.

ندير بعض النشر المحلي على CentOS 7 (بناءً على طلب العميل) دون أي مشاكل.

الأجزاء ذات الصلة من دور Ansible:

- name: إضافة مستودع Docker (CentOS)
  get_url:
    url: "https://download.docker.com/linux/centos/docker-ce.repo"
    dest: '/etc/yum.repos.d/docker-ce.repo'
    owner: root
    group: root
    mode: 0644
  when: ansible_distribution == 'CentOS'

- name: تثبيت Docker
  package:
    name: "{{ item }}"
    state: present
  with_items:
  - docker-ce
  - docker-ce-cli
  - containerd.io

- name: التأكد من تشغيل Docker وتفعيله عند بدء التشغيل
  service:
    name: docker
    state: started
    enabled: yes

نحن ندير كل بنيتنا التحتية على Debian. لا يوجد أي نظام RHEL في أي مكان.