Почему так не делают в docker (all-in-one чёрный ящик)?
если мы опять разбиваем приложение на куски, имея весь тот геморой, который мы имели, когда докера не было?
Отчего же? Ваше приложение может работать под арчем используя одни либы, используя при этом базу данных которая крутится под дебианом, при этом вы не паритесь о каких-то других вещах. Если вам нужна база данных - вы просто используете контейнер с оной как черный ящик. А с учетом того что у нас есть docker-compose разворачивать такую систему вообще не проблема, просто запускаем docker-compose up и все. Мы добились того же что можно было бы сделать используя один контейнер, но всю систему намного проще поддерживать.
По сути если мы разделяем наше приложение на отдельные сервисы (база данных, реверс-прокси, кэш и т.д) и при этом используем удобный формат вроде docker-compose.yml для того что бы описать что у нас там и как оно должно быть слинковано вместе, мы получаем все те плюсы которые вы указали и простоту поддержки контейнеров.
По сути если вы запихнете все в один контейнер вы перенесете весь тот ад который был раньше в Dockerfile. Никакого профита, просто настройка окружения и возможность версионизации. Причем если уж так то я лучше вернусь к ansible.
Ну и опять же, многие делают именно так как вы. Просто запихивают все в один контейнер.
А ну и еще - ваш подход плохо подходит для масштабирования. Скажем я хочу что бы у меня база данных крутилась на отдельном кластере серверов, а приложение на другом. И тут мы проигрываем.
На SO народ говорит, что особого криминала в этом нет. Если приложухи небольшие, то этот подход - ОК. Проблемы будут когда понадобится скейлить, но и они решаемы. В общем, вроде так можно, если понимать возможные последствия и ограничения.