Мы упаковываем и распространяем веб-приложение и считаем необходимым перейти с развертывания в виде deb/rpm пакетов на контейнерный подход, чтобы контролировать версии зависимостей (например, использовать более новую версию Python на старых дистрибутивах).
Я изучил LXC/LXD, и идея кажется заманчивой для старого подхода к разработке приложений с хранением состояния внутри контейнера. Однако нам также нужно развертывание на RHEL/CentOS, и состояние пакетов LXC и LXD для этих систем выглядит плачевно. К тому же не похоже, что у LXD или LXC есть будущее в экосистеме RHEL.
Я как-то избегал Docker из-за различных проблем с архитектурой или безопасностью, которые возникали у него на протяжении лет, а также из-за необходимости принять смену парадигмы на бессостоянные (stateless) контейнеры, что непросто для нас, «старой школы».
Является ли Docker сейчас надежной платформой для небольших и крупных производственных развертываний, где критически важно время бесперебойной работы приложения?
Какие существуют лучшие практики для упаковки и распространения приложений с помощью Docker?
Поскольку Discourse развертывается исключительно на Docker, и я уверен, что у него есть крупные производственные развертывания, кажется, что это лучшее место, чтобы задать этот вопрос.
Мы запускаем сотни серверов в десятках дата-центров как на «голом» железе, так и в облаке, и каждая часть приложения Discourse работает в контейнерах Docker.
У Docker, конечно, есть свои баги, но для нас преимущества перевешивают недостатки.
Только один момент:
Я точно не понимаю, что вы имеете в виду, но долгосрочные данные, такие как данные базы данных, обычно хранятся в томах, которые сопоставлены с хостом.