Это интересный вопрос, но я не уверен, что есть универсальный ответ на это.Это в основном зависит от вашей ситуации.
Однако, есть преимущества и недостатки, которые вы должны знать, если вы используете уникальный контейнер для нескольких приложений.В качестве примера, скажем, у вас есть только 2 контейнера приложений: A и B , а также общий контейнер DB , независимо от технологии.
Преимущества
- использование ресурсов ограничено.Тем не менее, как вы заявляете в своем вопросе, если DB издержки контейнера не так важны, то это не является действительно преимуществом
Недостатки
Если A и B являются независимыми приложениями, поэтому основным недостатком совместного использования DB является то, что вы нарушаете эту независимость и плотно связываете свои приложения с помощью DB :
- вы не можете самостоятельно обновлять контейнер DB .Версия DB должна быть согласована для обоих приложений.Если для A требуется новая версия DB (например, необходимы новые функции), то DB необходимо обновить, что может привести к поломке B
- конфигурация DB не может отличаться для A и B : если A выдает больше записей, чем прочитано, иесли B интенсивно читает данные, то вы, вероятно, не найдете идеальную конфигурацию для обоих случаев.
- сбой DB повлияет на оба приложения: A может даже аварийно завершить работу B из-за сбоя DB
- из соображений безопасности: даже если A и B имеютотдельные экземпляры базы данных в DB , A могут иметь доступ к B экземпляру базы данных, если вы не настраиваете другой доступ / роли;здесь, вероятно, проще иметь по одному контейнеру на приложение и не беспокоиться о доступе, если они находятся в одной сети (и, конечно, если к DB нельзя получить доступ извне)
- вы должны поместить службы A , B и DB в один и тот же файл docker-compose
Заключение
Если A и B уже тесно связаны между собой, то вы, вероятно, можете выбрать 1 DB .Если у вас мало ресурсов, вы также можете поделиться DB .Но не забывайте, что, делая это, вы объединяете свои приложения, которые, вероятно, вам не нужны.В противном случае самое чистое решение - 1 DB на приложение.