но к ним нельзя подключиться извне (из-за использования networks, а как открыть нетворк -
догадаться нужно самому)
А через директивы ports - разве не прокидываются нужные порты из контейнеров наружу?
При внесении каких-то изменений в основное приложение
можно лишь надеяться что они когда-то появятся в контейнере
Если вы вносите изменения в проект который примаплен через volume - то контейнер их тут же видит.
Умеет ли ваше приложение видеть что локальные файлы изменились, и применять их - это уже другой вопрос.
Но даже если не умеет - нет никаких проблем перестартануть нужный контейнер после внесения каких-либо изменений.
Можно пять раз удалить контейнер с приложением, потом десять раз удалить образ
никакие изменения никуда не попадут.
Не знаю как у вас построено - но приведу насчет примеров с проектами на python.
В Python создается папка с виртуальным окружением, куда устанавливаются все необходимые библиотеки для работы. Эта папка мапится вместе с проектом в контейнер. При этом используется контейнер python из стандартного образа на все проекты, а виртуальное окружение - из примапленной директории. Нет необходимости ничего дополнительно устанавливать в контейнеры. Поэтому что вы там пытаетесь делать с образами - непонятно...
Использовать при этом виртуальное окружение на локальной машине, запуская приложение через него - нельзя,
потому что нетворк баз данных где-то там локальный.
Ну тут определиться - используете докер для этого, или виртуальное окружение на своей машине.
Если хотите одновременно использовать и то и другое - прокидывайте порты.