There is multiple approach you can take but the main thing to keep in mind is that it needs to be maintainable. The more web properties aka containers you have, then the more release you will need to do each time a new extension or a new functionality needs to be deployed, This might become a nightmare to maintain.
You should not think about it in terms of domains as in most big companies, different brand domains are ultimately served by the same platform.
In this case a platform is the project/application that serves the website. For example if the different website domains are served using AEM then the platform would be AEM. If it is a React APP then it would be core repo of the React project. Each platform will provide a set of common functionalities so it is easier to create one container for each platforms. You should then name your rules, data elements an so on accordingly to make sure to identify correct cell that use the platform. Check this https://dev.to/alcazes/adobe-launch-tagging-standards-3aak
For example in our company I look after a container that is linked to a React application. Each cell has its own repo and its own React app but they all use the same core library and core MI library that populate a data layer with all the details required for tagging. So we have 5 cells using the same container. As I am using a data layer, I only have 15 rules to manage all marketing pixels and analytics interaction. Pretty easy to maintain.
In terms of companies and containers, I would say a container should not span more than one company, this way you sure that correct data is sent to correct company. Now if you business is a business of Brands, meaning that while for customers they see 5 distinct brands but ultimately it is managed by your parent company that owns the brands then it is ok to use the same container. In my use case, while we have 5 cells using 1 container, in reality each cell has between 2 to 4 brands with nearly identical journeys. All the tagging is managed centrally by one container.