Достаточно ли Docker надёжен для развёртывания в production?

Привет,

Это вопрос не по теме.

Мы упаковываем и распространяем веб-приложение и считаем необходимым перейти с развертывания в виде deb/rpm пакетов на контейнерный подход, чтобы контролировать версии зависимостей (например, использовать более новую версию 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 нигде.