Правильно создать архитектуру?
1 сервис = 1 контейнер (docker). При изменение одного сервиса тебе нет нужды пересоздавать остальные.
Базу данных в docker не нужно, в идеале на отдельный VPS и забыть.
Nginx без разницы где и как будет - конфиг что так что так подключается заранее написанный для нужных сервисов. В целом ситуация похожая с БД - один раз установил/настроил и забыл.
Вам нужно думать какие сервисы имеет смысл использовать в своем отдельном контейнере, а какие сервисы имеет смысл сгруппировать. Например, база данных и nginx не имеют ничего общего друг с другом. Если вам вдруг понадобится скейлить базу, а вы засунули её в один контейнер с nginx, то добавление нового контейнера одновременно добавит вам и новую базу, и nginx.

Для того чтобы настроить взаимодействие контейнеров (сервисов) друг с другом используйте docker compose.

А вообще сейчас настало время облаков. Просто используйте AWS и не парьтесь. Там и базу вам сделают с репликацией и бэкапами, и от Nginx сможете избавиться, и вообще там есть абсолютно всё. Потраться время на изучение AWS и тогда сможете сконцентрироваться на коде, вместо всех заморочек с деплоем и поддержкой.