Multi-container app, best practices?

Hello guys.
I’m new with docker, so i want to ask experienced inhabitants.
If you create multi-container app and you want to allow containers to communicate with each other (for example, monitor a separate host or write something to the database) and there was an opportunity to connect or disconnect an additional container at any time. Then from the point of view of best practices, how to do it?
Should i only use docker-compose or create cluster in swarm or kubernetes or even create bridge network?
I would be grateful for any adequate response, thanks.