Почему когда используют Docker для поднятия окружения, создают по контейнеру на каждый сервис а не всё в одном контейнере?
Зависит от подхода к деплою
В случае "хостера" - клиента попросят засунуть все в один контейнер или платить за каждый контейнер отдельно
В случае "балансировки нагрузки" через копирование бекендов, помещение кода в контейнер - разумное решение.
В случае нагруженного проекта - СУБД лучше помещать отдельно прямо на железо без контейнеров и виртуализации
Также стоит заметить, что после установки докер не является гарантией безопасного исполнения произвольного кода юзера