Один инстанс postgres на несколько проектов, или каждому свой?
У меня есть виртуалка, на которой я запускаю свои pet-projects. Хочу завернуть их в докер. Они все используют postgres. У меня варианты:
1. Поднять постгре на хосте, обращаться из контейнеров, зная ip хоста
2. Поднимать постгре для каждого проекта по отдельности в соседнем контейнере, соединяя через docker-compose
Большой плюс отдельных инстансов в контейнерах - проекты независимы, любой из них можно легко перекинуть на другой сервер. Плюс одного общего инстанса - большая экономия места на диске и памяти сервера (не надо держать в памяти несколько инстансов постгре). Как вы считаете, какой вариант выбрать?
И попутный вопрос. Процессы постгре исполняются на одном и том же ядре, неважно, что они в разных контейнерах. Есть ли разница в расходе cpu с этих двух вариантах?
Я под reusable штуки имею отдельный докер-проект, в котором у меня общий nginx/postgres/redis. И их уже конфигурю по надобности, добавляю базы данных/хосты и прочее.
glader, Истино так :)
А еще отдельные контейнеры - это +1 к переносимости решений, когда ты запрал композ файл и папки и утащил куда-то еще проект + возможность погасить ненужное окружение полностью, без "лишних" баз, которые останутся висеть на Шаред контейнере/инстансе...
Резонов и идей много. Мне нравится так. Ресурсы сейчас не настолько дорогие, чтобы городить костыли.
glader,
1. Контейнеры в любом случае замедляют работу базы.
2. Смысла в выделении базы в отдельный контейнер небольшой, поскольку особенный енвайрнмент для нее не нужен, а масштабировать на своем кластере - много гемороя.
3. Если же масштабировать в облаке, то в облаке есть готовое облачное решение баз данных, которое и дешевле и масштабируется лучше и администрируется удобнее.
Итого - базы в контейнере не есть бест практика и используется в редких случаях.