Large number of host emulation
you create a Docker Swarm stack file:

---
version: '3.1'

services:   
  ubuntu:
    image: ubuntu # or your custom Docker image
      deploy:
        replicas: 10000


Then, with docker stack you can run your 10000 Ubuntu's on one or - probably better in this case - a set of Swarm hosts. This could be bare metal or AWS. Enjoy!

For MAC address is very interesting question which I hope other colleagues here can answer. Geolocation should be no problem as this is AFAIK a system setting - virtual OS does not implement a physical GPS sensor.

Docs give an example how to set a fixed MAC address on docker run - possibly this can be translated to the stack YML file as well.

docker run --mac-address=".." ...