Docker doesn't allow you to mount a subpath of a named volume - you can only mount the named volume itself:
volumes:
- my_data:/path/in/container
When mounting an existing volume in a stack file, you will also need to flag that volume as external otherwise it will try to create it for you. This is done in a separate volumes
section outside of the services
section:
volumes:
my_data:
external: true
Do I need to have one Volume for every stack so I would just say my_data:/datastore?
You can share volumes between containers, however I would generally advise a volume for each. This makes the container configurations more independent of each other, whereas shared volumes are less so.
Am I better off just ignoring Volumes and putting my persistent files somewhere like /data/my_data/ ?
It depends. If you only intend to deploy your stack on the one environment and you don't need the ability to redeploy the stack on another environment, then bind mounts (mounting to a path on the host) are fine. When portability is a concern, named volumes are generally better.
Am I asking the wrong questions :)
No such thing :)