LEMP Docker один контейнер или связка контейнеров, что лучше?

Есть необходимость поднять для приложения стек nginx+php+redis+mysql. Приложение небольшое. Изначально хотел всё сделать в одном контейнере, ибо нет необходимости в особой устойчивости отдельных компонентов и приложение является по сути монолитом. Но не нашел более-менее вменяемых рекомендаций по компоновке такого контейнера, зато везде и всюду рекомендуют собирать связки из готовых контейнеров с помощью docker compose. Почему, разве так лучше для любых задач?


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

Автор решения: Roman Konoval

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

Вот подумайте. Если запускать в одном контейнере сразу возникает несколько проблем, которые в принципе не возникают, если использовать несколько контейнеров.

  1. Отслеживание, какой процес запустился, какой нет.
  2. Просмотр логов от отдельных процессов.
  3. Контроль используемых ресурсов.
  4. С отдельными контейнерами, можно использовать стандартные образы без или с минимальной конфигурацией, т.е. не нужно самому создавать образы. Это упрощает поддержку, обновление версий компонетнов делать гораздо проще. Нет перекрестных зависимостей, когда, скажем, для mysql в системе нужна одна версия системной библиотеки, а редису - другая, несовместимая.
→ Ссылка