Должен ли я контейнеризировать свою базу данных? Если нет, то почему все так думают? - PullRequest
0 голосов
/ 10 апреля 2020

Мое понимание контейнерных приложений состоит в том, что каждый контейнер должен быть эфемерной единицей, которая может и будет неожиданно удалена и повторно предоставлена, и поэтому ее не следует использовать для целей отслеживания состояния.

Однако, если посмотреть на раскрутку приложения с помощью Docker -Compose, кажется, что каждый пример, который я вижу, имеет своего рода сервис PostgreSQL или Redis как часть его конфигурации.

Извинения, если это не лучший способ сформулировать этот вопрос, но какова общая наилучшая практика в этом вопросе? Чтобы контейнеризировать базу данных и предположительно сохранить данные из контейнера на диск хоста или напрямую запустить базу данных на хосте и подключиться из контейнера приложения к хосту?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Очень разумно запускать рабочие нагрузки без сохранения состояния в контейнерах и иметь отдельную неконтейнерную базу данных на голом железе или в облачной службе (, например, , AWS RDS), особенно на производстве.

Как вы заметили, жизненный цикл баз данных и контейнеров сильно отличается. Базы данных должны быть зарезервированы и доступны, а для традиционных реляционных баз данных сложно получить больше репликации, чем активная / резервная пара и, возможно, пассивная реплика чтения. Контейнеры предназначены для свободного уничтожения и замены, и типичные микросервисы на основе HTTP или очередей могут легко запускать несколько реплик.

Если вы посмотрите на вопросы переполнения стека, вы увидите много вещей, которые этого не делают. соответствуют производственным установкам. (Самое большое использование volumes: для среды разработки в реальном времени; производственные контейнерно-ориентированные развертывания должны просто иметь возможность docker run образа из репозитория без локального исходного кода или ресурсов.) Локальная база данных Программа установки подходит для этой категории, но это хорошая идея для среды разработки: вы можете использовать базу данных для каждого проекта, и они будут изолированы от других баз данных, и их легко сбросить, если что-то пойдет не так.

0 голосов
/ 10 апреля 2020

Контейнерирование базы данных и ее использование в качестве микросервиса - разные идеи, даже если они противоречат друг другу. Контейнер во многом похож на виртуальную машину. Это нормально для контейнерной базы данных, но определенно * не делайте ее микросервисной.

* Если вы не знаете, зачем вам нужна микросервисная служба.

...