Допустим, мы не хотим слишком усложнять пример, и мы решили использовать внешнее хранилище для базы данных. Кроме того, код, файлы конфигурации и т. Д. Являются частью образов Docker.
Мой вопрос основан на опыте, передовой практике и простоте использования. Какую стратегию вы, ребята, используете для развертывания nginx, стека php-fpm?
На ум приходят три варианта:
Создайте Dockerfile, в котором у вас есть два процесса, а затем просто создайте модуль с запущенным на нем контейнером. Это нарушит принцип один процесс на контейнер.
Создайте один модуль с двумя контейнерами, каждый из которых содержит по одному процессу. Я нашел некоторые мнения онлайн что говорит такие вещи, как:
Основной мотивацией концепции pod является поддержка совместно расположенных, совместно управляемых вспомогательных контейнеров рядом с контейнером приложения. К ним относятся такие вещи, как: ведение журнала или мониторинг агентов, инструменты резервного копирования, средства отслеживания изменений данных, издатели событий, прокси-серверы и т. Д.
Было бы неплохо, если бы вы, ребята, могли что-то сказать по этому поводу, основываясь на вашем опыте, и обсудить, что имеет больше смысла по разным причинам.
Спасибо вам всем!
Контейнер с несколькими контейнерами, который имеет полный набор услуг, работает проще всего и в наибольшей степени соответствует принципам проектирования, но имеет недостаток в том, что масштабирование предназначено для всего пакета. Это может быть проблематично в тех случаях, когда, например, nginx использует очень мало ЦП по сравнению с процессом php:
Поэтому, если ваш процесс крайне неуравновешен в ресурсах, используйте опцию использования раздельного подхода, как вы делали наброски для нескольких процессов / программ в одном контейнере в вашем вопросе, удобнее с автоматическим масштабированием или управлением ресурсами в целом.
Однако следует избегать использования многопроцессорного контейнера, поскольку он противоречит принципам проектирования (он менее гибок, проблемы с библиотеками могут все еще возникать), но иногда его можно избежать. Например, вам нужно регистрировать вращающиеся файлы, и процесс в контейнере должен знать об этом, тогда достаточно запустить cron и другой процесс в этом контейнере. Так что переходите к многопроцессорному контейнеру только в том случае, если это требуется для управления вашим приложением и / или ресурсами, иначе держитесь подальше от него 🙂
Других решений пока нет …