В чем суть баз данных в докере?

Я немного не понимаю суть того же Postgresql в докере. Сейчас это популярно да и в общем то проект на микросервисах возник. И вот столкнулся с таким понятием.

Чтобы ее нормально хранить, я так понимаю, придется при каждом выключении контейнера обязательно сохранять текущий state контейнера.
Но это же не удобно с точки зрения надежности. Контейнер упадет, а вместе с ним и куча данных.

Не могли бы просветить в чем вообще суть баз данных в контейнерах?


Ответы (1 шт):

Автор решения: aleksandr barakin

в чем вообще суть баз данных в контейнерах?

тут стоит немного уточнить: следует разделять две сущности — базу данных как файл (или набор файлов) и процесс(-ы), выполняющий функцию системы управления базой данных.

в отношении «докеризации» процессов субд, думаю, вопросов нет: тут ровно все те же преимущества (и недостатки), как и для любых других «докеризуемых» процессов.

а вот базу данных, т.е. файлы, её содержащие, для того, чтобы они могли «пережить» пересоздание контейнера с субд, имеет смысл держать отдельно, не в составе этого контейнера:

Чтобы ее нормально хранить, я так понимаю, придется при каждом выключении контейнера обязательно сохранять текущий state контейнера. Но это же не удобно с точки зрения надежности. Контейнер упадет, а вместе с ним и куча данных.

когда вы командуете программе docker остановить контейнер (по сути — процесс (с его потомками), выполняющийся в изолированном окружении), например, командой stop, вы можете указать с помощью опции -t время, сколько времени (в секундах, по умолчанию 10) программа будет ожидать завершения процесса:

$ docker stop -t время имя-контейнера

основному процессу будет отправлен сигнал SIGTERM, и лишь по истечении указанного (или умолчального) интервала времени, если процесс так и не завершился самостоятельно — SIGKILL.

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

→ Ссылка