Поиск по сайту:

Стоит ли запускать базу данных в Docker?


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

Docker может обрабатывать рабочие нагрузки с отслеживанием состояния

Лучше всего начать с другого вопроса: Cа вы запускаете базу данных в Docker? В общем, Docker не предназначен для сервисов с отслеживанием состояния. Одним из основных преимуществ контейнеров является то, что их можно останавливать и запускать по желанию, обычно подключаясь к авторитетному источнику данных, например базе данных, для сохранения своего состояния. Все данные в контейнере эфемерны и уничтожаются при удалении контейнера.

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

Подключения томов — предпочтительный способ обработки большинства сценариев. Они позволяют создать том, которым управляет Docker:

docker volume create my-volume

Затем смонтируйте этот том в целевое место внутри контейнера:

docker run --mount source=my-volume,target=/app

Биндовые крепления проще. Это то, что тома используют внутри, но они позволяют вам вручную установить местоположение на хост-диске, а не управлять им через Docker.

docker run ~/nginxlogs:/var/log/nginx

На практике использование этих креплений может быть немного сложнее. Многие управляемые сервисы Docker, такие как ECS AWS или управляемый Kubernetes, не предоставляют вам прямого доступа к базовому серверу, и поэтому вы не сможете напрямую устанавливать подключения для подключения. Обычно это решается с помощью такого сервиса, как EFS, который позволяет подключаться к контейнерам ECS, или с помощью внешнего хранилища данных, такого как база данных.

Стоит ли выбирать Docker для своей базы данных?

Docker, как правило, не подходит для обработки состояния. Рабочие нагрузки на основе Docker обычно передают эту проблему базам данных. Поскольку база данных является решением проблемы, целесообразно ли размещать вашу базу данных в Docker?

В основном ответ «не обычно». Docker прошел долгий путь с момента своего появления, и контейнеризация баз данных больше не является ужасной или «неправильной» идеей. Это, безусловно, можно сделать, и в этом есть некоторые преимущества. Однако для большинства общих рабочих нагрузок преимущества не перевешивают сложности.

Чтобы понять почему, давайте посмотрим на преимущества Docker:

  • Простота масштабирования: серверы можно быстро создавать и уничтожать в соответствии со спросом.
  • Упрощенный инструментарий непрерывной интеграции и непрерывного развертывания: автоматическая сборка стала тривиальной задачей.
  • Кодификация вашей инфраструктуры: все базовые библиотеки и настройки обрабатываются в файле Docker.

Большинство из них не очень хорошо переносятся на рабочие нагрузки баз данных, которые часто представляют собой долгосрочные усилия, которые превыше всего способствуют целостности данных. Как правило, вы не хотите автоматически масштабировать большинство баз данных; они сами обычно не получают регулярных обновлений кода, и поэтому не так много выигрывают от работы в контейнерах. И, если вы все равно просто монтируете локальный накопитель, почему бы не запустить его вне Docker?

Если вы хотите избавиться от сложностей управления базами данных, Docker не подходит для этой работы. Это просто ненужное усложнение для рабочей нагрузки, которую можно легко запустить на стандартном VPS. Скорее всего, вам будет намного лучше использовать полностью управляемую базу данных как услугу, такую как RDS от AWS. Это приносит много автоматизации, для которой хорош Docker, без головной боли, связанной с тем, чтобы делать это самостоятельно.

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