У меня с другом обсуждается вариант использования Docker . Один парень в команде хочет использовать Docker для всего - как некая универсальная оболочка процесса Unix. Другой считает, что Docker следует использовать только для приложений без сохранения состояния, таких как микросервисы и приложения в стиле AWS Lambda .
Мы разработали доказательство концепций для обоих. В нашем докерном кластере у нас есть общий диск, который монтируется при монтировании хоста Docker, и если база данных в контейнере монтируется, он просто подключает том к общему диску.
Мой друг все еще придерживается своей позиции, несмотря на то, что ему показали противоположные доказательства. (Он также утверждает, что Docker добавляет ненужный риск, добавляя сложность в стек.)
Я пытаюсь выслушать и понять его точку зрения, как в акте эмпатии, так и в лучшем рассуждении с ним. (Мы все хорошо ладим, так что это смесь шутки и серьезного обсуждения).
Вид вопроса, который стоит за вопросом: являются ли базы данных скотом ? Этот комментарий предполагает, что хорошая стратегия автоматического резервного копирования и поиска для вашей базы данных неотличима от сервера крупного рогатого скота.
Мой вопрос: по каким причинам Docker не следует использовать для баз данных?
РЕДАКТИРОВАТЬ: Люди просили меня уточнить мою терминологию. Я предполагал, что приложение базы данных было в контейнере, а хранилище было в томе. Я имел в виду, что СУБД находится в контейнере, а хранилище базы данных - в томе.
Некоторые комментаторы полагают, что драйверы томов Docker не очень хорошо работают с записями в базе данных. (Или что-то в этом роде). Не могли бы вы рассказать об этом подробнее?
источник
Ответы:
Когда люди говорят о запуске базы данных в Docker, они не имеют в виду хранить данные в контейнере; они говорят о том, чтобы иметь образ докера с программным обеспечением БД и монтировать данные в виде тома (том связывания, а не том контейнера).
Тома являются неотъемлемой частью Docker и не являются чем-то ненадежным или просто привязанным. Докер предназначен не только для (микро) услуг без гражданства.
Как бы я ни хотел, я не могу найти техническую причину не запускать базу данных в Docker, поэтому, к сожалению, я выберу другую сторону аргумента и, следовательно, возможно, не дам вам ответ, который вы ищете.
(Я использую Oracle в качестве примера, потому что я знаком с ним, как с нуля, так и с докеризацией, и потому что это довольно печально известный зверь за то, что он немного нетривиален в работе, если вы переходите к настройкам по умолчанию.)
Теперь, в зависимости от обстоятельств, могут быть мягкие причины не делать этого:
Итак, поехали. Во что бы то ни стало , докеризируйте вашу БД, по крайней мере, для ваших разработчиков (которые будут вечно благодарны) и ваших сред тестирования. На производстве, он сойдет на вкус, и там , по крайней мере, я бы тоже предпочел решение , которое сидит лучше со специализированным DBA / Ops - если они имеют многолетний опыт работы голого металл DB серверов, то все средства доверять им продолжать так. Но если вы являетесь стартапом, у которого в любом случае есть все ИТ-ресурсы в облаке, то контейнер Docker станет еще одним кусочком лука во всей картине.
источник
Я написал об этом подробно, но вот резюме:
Предотвращение разделения мозга (выбор более чем одного главного узла) должно быть решено. Невыполнение этого требования может привести к катастрофическим последствиям.
Не существует готовых решений для общего хранилища, позволяющих отключать базы данных в одном экземпляре и запускать их в другом без потери всех ваших данных.
источник
Когда вы говорите, что данные смонтированы в Docker-контейнере, не будет ли правильнее сказать, что «база данных» смонтирована в Docker-контейнере? Если вы сохраняете свои данные вне контейнера, тогда вы делаете «правильную» вещь, не помещая свою базу данных в контейнер.
Конечно, отправляйтесь в город, чтобы поместить СУБД в контейнер и позволить ей управлять данными, которые вы храните снаружи. Лично я считаю, что это просто хороший дизайн, поскольку он четко разделяет логику и данные. Но как только вы помещаете свои данные в контейнер, вы потенциально играете с огнем.
Хотя драйверы хранилища контейнеров прошли долгий путь, я лично пока не хочу погружаться и оставлять свои данные запутанными в контейнере.
источник