Specifically, it should be very automated and repeatable to bring up an environment, either from the last working state (i.e. to boot the vm) but also to bring up a fresh environment - potentially following a teardown/destroy.
I quite like Vagrant for this - it's multi platform, works across multiple providers (i.e. you might use HyperV on Windows, Joe might use VBox on Mac, Bob might use VMWare on Linux, Sally might use LXC on Linux) and has quite a healthy range of plugins to extend functionality.
This is one of those things that immediately pays dividends as soon as more than one person works on a codebase. No need for everyone to rediscover independently how to get a complex app running locally.
https://code.visualstudio.com/docs/remote/containers
Personally I would never go back but it does take some setting up.
The documentation itself is good, I feel, but as a newcomer it's really hard to know where to look. But it's getting better, by strides.