В чем суть баз данных в докере?
Я немного не понимаю суть того же Postgresql в докере. Сейчас это популярно да и в общем то проект на микросервисах возник. И вот столкнулся с таким понятием.
Чтобы ее нормально хранить, я так понимаю, придется при каждом выключении контейнера обязательно сохранять текущий state контейнера.
Но это же не удобно с точки зрения надежности. Контейнер упадет, а вместе с ним и куча данных.
Не могли бы просветить в чем вообще суть баз данных в контейнерах?
Ответы (1 шт):
в чем вообще суть баз данных в контейнерах?
тут стоит немного уточнить: следует разделять две сущности — базу данных как файл (или набор файлов) и процесс(-ы), выполняющий функцию системы управления базой данных.
в отношении «докеризации» процессов субд, думаю, вопросов нет: тут ровно все те же преимущества (и недостатки), как и для любых других «докеризуемых» процессов.
а вот базу данных, т.е. файлы, её содержащие, для того, чтобы они могли «пережить» пересоздание контейнера с субд, имеет смысл держать отдельно, не в составе этого контейнера:
- либо в каталоге хост-системы;
- либо с помощью «механизма» volumes.
Чтобы ее нормально хранить, я так понимаю, придется при каждом выключении контейнера обязательно сохранять текущий
stateконтейнера. Но это же не удобно с точки зрения надежности. Контейнер упадет, а вместе с ним и куча данных.
когда вы командуете программе docker остановить контейнер (по сути — процесс (с его потомками), выполняющийся в изолированном окружении), например, командой stop, вы можете указать с помощью опции -t время, сколько времени (в секундах, по умолчанию 10) программа будет ожидать завершения процесса:
$ docker stop -t время имя-контейнера
основному процессу будет отправлен сигнал SIGTERM, и лишь по истечении указанного (или умолчального) интервала времени, если процесс так и не завершился самостоятельно — SIGKILL.
эта пауза как раз и служит для того, чтобы процесс успел корректно завершить работу — сохранил данные, закрыл файлы и т.д. и т.п.